2011-10-11 37 views
1

我有一個數據表有三個字段,我需要將第二個和第三個字段的值組合在一起並顯示在組合框中。我的做法是在如何在數據表中顯示組合框中的多個值

DataTable dt = new DataTable(); 
dt.Columns.Add("Id", typeof(int)); 
dt.Columns.Add("Col1", typeof(string)); 
dt.Columns.Add("Col2", typeof(string));    

Enumerable.Range(1, 10).ToList().ForEach(i => dt.Rows.Add(i, string.Concat("Col1", i), string.Concat("Col2", i))); 

comboBox1.DataSource = dt; 
comboBox1.DisplayMember = string.Format("{0} : {1}","Col1","Col2"); 

但我得到的輸出作爲System.Data.DataRowView ...

即使我不能把它從存儲過程級別更改。但是,我可以通過暴露一些財產來使用實體方法,但目前這將是一個巨大的變化。是否有任何機制可以將數據表用作源並完成工作。

感謝

+0

你試過數據視圖,而不是數據表? – KMC

回答

5

我已經做到了爲下

DataTable dt = new DataTable(); 
      dt.Columns.Add("Id", typeof(int)); 
      dt.Columns.Add("Col1", typeof(string)); 
      dt.Columns.Add("Col2", typeof(string)); 
      dt.Columns.Add("ConcatenatedField", typeof(string), "Col1 + ' : ' +Col2"); 

      Enumerable.Range(1, 10).ToList().ForEach(i => dt.Rows.Add(i, string.Concat("Col1", i), string.Concat("Col2", i))); 

      comboBox1.DataSource = dt; 
      comboBox1.DisplayMember = "ConcatenatedField"; 
+0

我必須添加,一旦聲明其DisplayMember和ValueMember,就應該設置ComboBox的DataSource。否則,您可能會無法正確顯示/獲取數據(如DataRow.etc)。 – Pundia

3

試試這個..

DataTable dt = new DataTable(); 
    foreach (DataRow dr in dt.Rows) 
    { 
     comboBox1.Items.Add(dr["Col1"].ToString() + dr["Col2"].ToString()); 
    } 
0

綁定組合框數據視圖,而不是的DataTable。您將獲得該值,而不是System.Data.DataRowView。這個對我有用。

DataTable dt = new DataTable() 
.... 
DataView dv = new DataView(); 
dv = new DataView(dt,,,DataViewRowState.CurrentRows); 
comboBox1.ItemsSource = dv; 
comboBox1.DisplayMemberPath = "YourColumnName"; 
1
 DataTable dt = ds.Tables[0]; 
     dt.Columns.Add("NewColumn", typeof(string));    

     foreach (DataRow dr in dt.Rows) 
     { 
      dr["NewColmun"] = dr["Column1"].ToString() + " " + dr["Co"].ToString(); 
     } 
     Combo.DataSource = dt; 
     Combo.DisplayMember = "NewColumn"; 
     Combo.ValueMember = "ValueField"; 
0

你也可以簡單地使用一個SQL視圖,並寫在它的結合領域。

Create View yourView as  
Select Id, "Col1 + ' : ' +Col2" as bindField from yourTable; 

和代碼:

var yourList = DB.yourView; 
if (yourList.Count() > 0) 
    { 
    comboBox1.DataSource = yourList ; 
    comboBox1.DisplayMember = "bindField "; 
    comboBox1.ValueMember = "id"; 
    comboBox1.SelectedItem = ""; 
    } 
0

使用像組合框格式事件:

private void cmbDirectoryType_Format(object sender, System.Windows.Forms.ListControlConvertEventArgs e) 
{ 
    if (e.DesiredType == typeof(string)) 
    { 
    string str1 = ((Datarow)e.ListItem)("Col1").ToString(); 
    string str2 = ((Datarow)e.ListItem)("Col2").ToString(); 
    e.Value = str1 + " " + str2; 
    } 
} 
相關問題