2011-10-11 26 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; 
    } 
} 
相关问题