1

我认为在组合框中显示列的原因是表单设计者中的这个字符串:

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

4

4 回答 4

2

DisplayMember一个字符串,它指定对象属性的名称,该对象属性包含在由 DataSource 属性指定的集合中。您不能指定要显示的多个属性。如果您尝试这样做,将找不到您的“复合属性”,并且将通过ToString()实现显示对象(这就是您看到System.Data.DataRowView字符串的原因)。

如果您需要显示对象的多个属性,您可以创建自定义多列组合框并将其弹出为 ListView 或 DataGridView。

更新:您可以创建自己的匿名类型,而不是直接绑定到 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";
于 2012-06-09T14:44:10.533 回答
2

您不能在组合框中添加两列。您如何连接两个对象的值。看到这个带有多列的 WinForms 组合框(C#)?

于 2012-06-09T14:48:57.387 回答
1

在您的查询中添加一个计算列

  select name, ..., name+' '+number as colToDisplay...

并像这样使用它

   this.ComboBox1.DisplayMember = "colToDisplay";

或者,如果您将组合绑定到custom object

添加一个新的属性,它结合了您需要显示的列

 public string PropertyToShow
 {
   get{return name+" "+otherProp;}
 } 
于 2012-06-09T14:46:40.173 回答
0

你有几种可能性。如果您不指定 a DisplayMember,则组合框使用该ToString方法获取字符串。所以一个选择自然是覆盖ToString你的类的方法,如果你在它的控制之下。或者您可以添加一个返回适当字符串的属性并在DisplayMember.

一种完全不同的方法是通过从ComboBox. 然后将DrawMode组合框的更改OwnerDrawFixed为项目是否具有相同的高度或OwnerDrawVariable它们可能具有不同的高度。您将不得不覆盖OnDrawItem并执行自己的绘图逻辑。如果您指定OwnerDrawVariable,您还必须覆盖OnMeasureItem以告知每个项目的组合框高度。

使用第二种方法,您可以创建真正的列并绘制垂直分隔符等等。您可以使用不同的背景和文本颜色、不同的字体等来绘制图标。

于 2012-06-09T14:55:15.787 回答