组合框自定义项和数据绑定项

本文关键字:数据绑定 自定义 组合 | 更新日期: 2023-09-27 18:10:00

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

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

当我注释数据源时,它只显示项目"all",但是当代码像这样时,它只显示数据,但不显示属性"all"。有没有一种方法可以把这一切结合在一起?要显示属性"所有"和数据的其余部分?

组合框自定义项和数据绑定项

MSDN显示

数据源可以是数据库、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返回一个包含更多字段的表,并且这些字段是NOT NULLABLE,那么您可能会遇到其他问题。在这种情况下,您还需要在新行中为这些字段添加一个虚拟值。

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

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

如果你添加你的项目,然后设置数据源,你的清除数据源和重置。