【问题标题】:combobox default value winforms c#组合框默认值winforms c#
【发布时间】:2009-08-31 11:55:52
【问题描述】:

您好,我想动态绑定一些值到复选框。

dataset ds = //getting emp values form database;
cbemp.ValueMember = "empid";
cbemp.DisplayMember = "empname";
cbemp.DataSource = ds.Tables["emp"];

它工作正常。但我想添加

“选择员工”作为复选框的默认值。

但是我的复选框直接添加了类似的值

a1
a2
a3

像这样。

我试过这样

cbemp.Items.Insert(0, "Select emplyoee");

但它不起作用

如何添加?

【问题讨论】:

    标签: c# winforms combobox


    【解决方案1】:

    当您使用数据绑定时,您不能“手动”添加或删除项目。使用数据绑定实现您想要的唯一方法是首先在 DataTable 中插入具有所需值的行,或者通过代码填充组合框(添加“选择员工”项,然后迭代 DataTable添加记录的行)。

    也许这样的事情可以工作:

    // create new row for "Select employee"
    DataRow row = ds.Tables["emp"].NewRow();
    row["empid"] = -1;
    row["empname"] = "Select employee";
    // insert the row at the top of the table
    ds.Tables["emp"].Rows.InsertAt(row, 0);
    // do the databinding
    cbemp.ValueMember = "empid";
    cbemp.DisplayMember = "empname";
    cbemp.DataSource = ds.Tables["emp"];
    

    我不经常使用数据绑定,因此可能存在我不知道的缺点(但我相信社区会在这种情况下指出这一点)。

    【讨论】:

      【解决方案2】:

      在数据源中插入数据是个坏主意。它促进打破层的抽象,如果您在其他地方使用相同的数据源,可能会导致一些问题。

      相反,您可以轻松扩展 ComboBox 以在未选择任何项目时显示“请选择”消息。

      我在博客上讨论了这个问题并在此处提供了代码:http://www.byteauthor.com/2010/08/inner-label-in-combobox/

      【讨论】:

        【解决方案3】:

        我认为您必须将其添加到基础数据表 (ds.Tables["emp"]) 中,以便在您使用数据绑定控件时将其作为条目显示在列表中。

        【讨论】:

          【解决方案4】:

          当您的控件是数据绑定时,我认为您无法手动添加项目。

          要解决此问题,您可以向数据源添加新项目,也可以手动添加项目。

          【讨论】:

            【解决方案5】:

            上述公认的解决方案更好,但有时可能派上用场的一个技巧是将“假”记录联合到返回数据绑定记录集的 SQL 中。在这种情况下,类似于:

            select 0 as empid, 'Please select' as empname
            union
            select empid, empname from emp
            order by empid
            

            当然,您必须保护数据库不会意外写回“0”记录(例如,如果用户没有进行选择),但这并不太难。

            【讨论】:

              【解决方案6】:

              如果 ComboBoxStyle 设置为 DropDownList(因此用户无法编辑组合框),那么确保用户选择项目的最简单方法是设置 selectedIndex=-1,您始终可以在组合框上方添加“请选择”等。

              【讨论】:

                【解决方案7】:

                就我而言(数据绑定组合框),我解决了这样的问题。当然,最好的方法是 Kevin Coulombe 方法。

                ComboBox.SelectedIndex = -1;
                ComboBox.Text = "Please, select something";
                

                只需一点代码,您就可以非常轻松地管理这个场景。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2016-11-17
                  • 2012-07-25
                  • 2012-04-07
                  • 2016-06-29
                  • 1970-01-01
                  • 2014-02-14
                  相关资源
                  最近更新 更多