我认为在combobox中显示列是在Desingner of Form中的这个字符串:
this.ComboBox1.DisplayMember = "name";
但是,我无法在“名称”附近添加任何内容,组合框显示在所有字符串中:System.Data.DataRowView
也许是错的,请告诉我这是怎么回事?
我只是从数据源中将组合框作为组合框拖动:
表单加载时:
private void frmCheck_Load(object sender, EventArgs e)
{
this.ttzTableAdapter.Fill(this.dbDataSet.ttz, Convert.ToInt32(idFromWork.Text));
}
所以组合框显示,只是列表中的“名称”,我希望他在列表中显示“数字”和“名称”。
"Convert.ToInt32(idFromWork.Text)"
显示名称的参数,其中id_ttz(ID)= @idwork
答案 0 :(得分:2)
DisplayMember
是a string specifying the name of an object property,它包含在DataSource属性指定的集合中。您无法指定要显示的多个属性。如果您尝试这样做,将无法找到您的“复合属性”,并且将通过ToString()
实现显示对象(这就是您看到System.Data.DataRowView
字符串的原因)。
如果需要显示对象的多个属性,可以create custom multi-column combobox并将其弹出为ListView或DataGridView。
UPDATE:您可以创建自己的匿名类型,而不是直接绑定到DataView的DataTable,它将提供用于显示的格式化文本:
ComboBox1.DataSource = tdbDataSet.ttz.AsEnumerable()
.Select(row => new
{
Text = String.Format("{0,5} | {1}", row["id_ttz"], row["name"]),
Value = row["id_ttz"]
})
.ToList();
ComboBox1.DisplayMember = "Text";
ComboBox1.ValueMember = "Value";
答案 1 :(得分:2)
您无法在组合框中添加两列。怎么能从两个对象中连接值。请参阅此WinForms combobox with multiple columns (C#)?
答案 2 :(得分:1)
在您的查询中添加计算列
select name, ..., name+' '+number as colToDisplay...
并像这样使用
this.ComboBox1.DisplayMember = "colToDisplay";
或者,如果您将组合绑定到custom object
添加一个新属性,该属性组合了您需要显示的列
public string PropertyToShow
{
get{return name+" "+otherProp;}
}
答案 3 :(得分:0)
你有几种可能性。如果未指定DisplayMember
,则组合框使用ToString
方法获取字符串。因此,如果您控制了类的ToString
方法,则可以自然地覆盖类的DisplayMember
方法。或者您可以添加一个返回适当字符串的属性,并在ComboBox
中使用它。
完全不同的方法是通过从DrawMode
派生一个来创建自己的组合框。如果项目的高度相同,则将组合框的OwnerDrawFixed
更改为OwnerDrawVariable
;如果项目高度不同,则将OnDrawItem
更改为OwnerDrawVariable
。您必须覆盖OnMeasureItem
并执行自己的绘图逻辑。如果您指定了{{1}},则必须覆盖{{1}}以告知每个项目的组合框高度。
使用第二种方法可以创建真实的列并绘制垂直分隔符等等。您可以使用不同的背景和文字颜色,不同的字体等绘制图标。