C# 如何在数据表的组合框中显示多个值
我有一个datatable,有3个字段,其中我需要组合第2个和第3个字段的值,并显示在组合框中。我的方法如下C# 如何在数据表的组合框中显示多个值,c#,winforms,C#,Winforms,我有一个datatable,有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().Fo
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
即使是我也无法从存储过程级别更改它。不过,我可以通过公开一些属性,使用实体方法来实现这一点,但目前这将是一个巨大的变化。是否有任何机制可以让我使用datatable作为源并完成工作
谢谢,试试这个
DataTable dt = new DataTable();
foreach (DataRow dr in dt.Rows)
{
comboBox1.Items.Add(dr["Col1"].ToString() + dr["Col2"].ToString());
}
将组合框绑定到数据视图,而不是数据表。您将获得值,而不是
System.Data.DataRowView
。它对我有用
DataTable dt = new DataTable()
....
DataView dv = new DataView();
dv = new DataView(dt,,,DataViewRowState.CurrentRows);
comboBox1.ItemsSource = dv;
comboBox1.DisplayMemberPath = "YourColumnName";
我是按计划做的
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";
您还可以简单地使用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 = "";
}
使用组合框格式事件,如:
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;
}
}
您尝试过DataView而不是DataTable吗?我必须补充一点,一旦您声明了组合框的DisplayMember和ValueMember,就应该设置组合框的数据源。否则,您可能会得到未正确显示/获取的数据(如DataRow.etc)。
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;
}
}