2017-06-30 61 views
0

如何在DataGrid中替換「true」和「false」來顯示其他內容,比如說「在線/離線」。在DataGrid中替換「true」和「false」

我從MySQL數據庫使用此代碼獲取數據:

MySqlConnection connection = new MySqlConnection("SERVER=127.0.0.1;DATABASE=xo_game;UID=root;PASSWORD=;"); 

try 
{ 
    connection.Open(); 

    MySqlCommand cmd = new MySqlCommand("SELECT id, player_one, player_two, avaible FROM games", connection); 
    MySqlDataAdapter adp = new MySqlDataAdapter(cmd); 
    DataSet ds = new DataSet(); 
    adp.Fill(ds, "LoadDataBinding"); 
    dataGridGames.DataContext = ds; 
} 
catch (MySqlException ex) 
{ 
    MessageBox.Show(ex.ToString()); 
} 
finally 
{ 
    connection.Close(); 
} 

我初學C#請幫助:/

+0

最簡單的方法是使用一個'IValueCOnverter' –

+0

是的,他有同樣的問題,但他用的DataGridView,這是一個有點不同勢。在DataGrid中,你不能應用相同的功能 – trans1x2d

+0

@MightyBadaboom thx的建議,我會嘗試 – trans1x2d

回答

1

我想你會嘗試顯示可用列。 您可以嘗試使用CASE語句中的查詢

MySqlConnection connection = new MySqlConnection ("SERVER=127.0.0.1;DATABASE=xo_game;UID=root;PASSWORD=;"); 

    try 
    { 
    connection.Open(); 

MySqlCommand cmd = new MySqlCommand("SELECT id, player_one, player_two, CASE avaible WHEN 1 THEN 'Available' ELSE 'Not available' END as 'avaible' FROM games", connection); 
MySqlDataAdapter adp = new MySqlDataAdapter(cmd); 
DataSet ds = new DataSet(); 
adp.Fill(ds, "LoadDataBinding"); 
dataGridGames.DataContext = ds; 
} 
catch (MySqlException ex) 
{ 
MessageBox.Show(ex.ToString()); 
} 
finally 
{ 
connection.Close(); 
} 
+0

謝謝soooo多!是的,這是我想要做的 – trans1x2d

+0

我很高興你:) –

1

如果使用MVVM模式,你需要創建一個轉換器(實施IValueConverter),將採取真/假和顯示在線/離線。

Internet/SO充滿了這樣的例子。

+0

MessageBox.Show()表明它是winforms。 –

+0

@PalleDue:問題被標記爲'wpf'。 'MessageBox.Show'也適用於wpf。 –

+0

對不起,我的壞。我會給你一個upvote實際閱讀的問題:-) –

0

另外,如果你想保持你的SQL命令固體,這裏是你如何使用IValueConverter上柱創作:

訂閱DataGrid「小號OnAutoGeneratingColumn事件爲:

private void DataGrid_OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) 
    { 
     if (e.PropertyName == "avaible") 
     { 
      var b = (e.Column as DataGridCheckBoxColumn).Binding as Binding; 
      b.Converter = new BoolToStringConverter(); 
      var dgtc = new DataGridTextColumn(); 
      dgtc.Binding = b; 
      e.Column = dgtc; 
     } 
    }