我有一个有3个字段的数据表,我需要将第2和第3个字段的值组合起来并显示在组合框中。我的方法是
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 :(得分:6)
我已经在
下完成了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";
答案 1 :(得分:3)
试试这个..
DataTable dt = new DataTable();
foreach (DataRow dr in dt.Rows)
{
comboBox1.Items.Add(dr["Col1"].ToString() + dr["Col2"].ToString());
}
答案 2 :(得分: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";
答案 3 :(得分:0)
将组合框绑定到 DataView 而不是 DataTable 。您将获得值而不是System.Data.DataRowView
。它对我有用。
DataTable dt = new DataTable()
....
DataView dv = new DataView();
dv = new DataView(dt,,,DataViewRowState.CurrentRows);
comboBox1.ItemsSource = dv;
comboBox1.DisplayMemberPath = "YourColumnName";
答案 4 :(得分: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 = "";
}
答案 5 :(得分:0)
使用Combobox Format事件,例如:
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;
}
}