【问题标题】:Insert a default row into a combobox that is bound to a datatable?将默认行插入绑定到数据表的组合框中?
【发布时间】:2011-03-02 16:54:30
【问题描述】:

在 winform 上有一个从数据表中获取信息的组合框。数据表从数据库列表中提取。

this.cboList.DataSource = pullData();
this.cboList.DisplayMember = "fieldA";

一旦设置了数据源,我就无法插入默认行(即 *)作为组合框中的第一项。

我试过这个:

this.cboList.Items.Insert(0,"*");

有没有办法在设置数据源后在组合框中插入,还是应该在数据表中完成?

更新1:

解决方案如下所示:

 var list = mydt.AsEnumerable().Select(row => row.Field<string>(fieldName)).ToList();
 list.Insert(0, "*");

其中 mydt 是填充的数据表,fieldName 是保存数据库字段名称的变量。

【问题讨论】:

    标签: c# winforms .net-3.5 combobox datatable


    【解决方案1】:

    如果“选择无”或“*”是有效的选择选项,则它需要来自绑定源对象。过去,我通过在将默认记录绑定到组合框之前将默认记录添加到集合中来做到这一点。

    【讨论】:

      【解决方案2】:

      不要仅仅为了让您的 UI 正常工作而从源头修改您的数据。相反,也许将您的列提取到一个列表中,您可以在将其附加到组合框之前对其进行修改。

      var list = table.AsEnumerable().Select(row => row.Field<string>("fieldA")).ToList();
      list.Insert(0, "*");
      this.cboList.DataSource = list;
      

      【讨论】:

      • 我收到 InvalidCastException -> 在您显示的代码中,我将在哪里将 System.Double 转换/转换为 System.String?
      • @John - 如果您的列是双精度列,您可以像这样修改它.Select(row =&gt; row.Field&lt;double&gt;("fieldA").ToString("0.00")).ToList();,其中“0.00”是您的数字格式(格式可以省略或更改)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-28
      • 2020-07-27
      • 1970-01-01
      • 1970-01-01
      • 2013-12-24
      相关资源
      最近更新 更多