【问题标题】:Combo box custom items and data bound items组合框自定义项和数据绑定项
【发布时间】:2014-06-22 13:58:10
【问题描述】:

我已经制作了组合框并添加了项目并从数据源函数 getBS() 加载数据返回绑定源。

comboBox1.Items.Insert(0, "ALL");
comboBox1.DataSource = getBS();

当我评论数据源时,它只显示项目“all”,但是当代码是这样时,它只显示数据但不显示属性“all”。有没有办法把这一切结合在一起?显示属性“全部”和其余数据?

【问题讨论】:

  • 你能显示 getBS() 的定义吗?
  • con.Open(); cmd = new SqlCommand("uspPodruznicaSelect", con); da.SelectCommand = cmd; da.SelectCommand.CommandType = CommandType.StoredProcedure; da.Fill(dbtable); bsource.DataSource = 数据库表; con.Close();返回 bsource;

标签: c# combobox datasource items


【解决方案1】:

MSDN says

数据源可以是数据库、Web 服务或对象 稍后用于生成数据绑定控件。当数据源 属性已设置,无法修改项目集合

那么你现在有什么选择?

BindingSource GetBS(bool addAll = false)
{
    ......
    con.Open(); 
    cmd = new SqlCommand("uspPodruznicaSelect", con); 
    da.SelectCommand = cmd; 
    da.SelectCommand.CommandType = CommandType.StoredProcedure; 
    da.Fill(dbtable); 

    if(addAll)
    {
        DataRow dr = dbTable.NewRow();
        dr["ItemID"] = 0;
        dr["ItemData"] = "ALL";
        dbTable.Rows.InsertAt(dr, 0);
    }

    bsource.DataSource = dbtable; 
    con.Close(); 
    return bsource;
}

将 ALL 直接添加到您的 sp. 返回的 DataTable 中。当然我不知道这个表中涉及的字段的确切名称,但这只是为了给你一个想法。如果 sp 返回一个包含更多字段并且这些字段不是 NULLABLE 的表,您可能会遇到其他问题。在这种情况下,您还需要在新行中为这些字段添加一个虚拟值。

【讨论】:

    【解决方案2】:
    comboBox1.DataSource = getBS();
    comboBox1.Items.Insert(0, "ALL");
    

    您需要填充数据源,然后也添加它。在索引 0 处插入项目的目的是让您可以将其添加到现有的 ListItems 集中。

    如果您添加您的项目,然后设置数据源,您的清除数据源并重置它。

    【讨论】:

    • 已经尝试过了。仍然只显示数据。我使用了返回所有数据的存储过程,然后“da.Fill(dbtable); bsource.DataSource = dbtable; 并返回 bsource;
    • ' con.Open(); cmd = new SqlCommand("uspPodruznicaSelect", con); da.SelectCommand = cmd; da.SelectCommand.CommandType = CommandType.StoredProcedure; da.Fill(dbtable); bsource.DataSource = 数据库表; con.Close();返回 bsource;'
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多