0

我的问题是“有没有办法将数据绑定到组合框而不更改/填充 selectedItem 和文本值?” (我希望组合框保持空白)

这是我正在做的一个例子:

        Dictionary<int,string> test = new Dictionary<int,string>();
        test.Add(1, "Company1");
        test.Add(2, "Company2");
        test.Add(3, "Company3");
        test.Add(4, "Company4");
        test.Add(5, "Company5");
        test.Add(6, "Company6");

        var list = test.Select(x => new { CompanyName = x.Value }).ToList();

        comboBox1.DataSource = list;
        comboBox1.DisplayMember = "CompanyName";
        comboBox1.ValueMember = "CompanyName";
        comboBox1.SelectedItem = null;

如果您运行此代码,它可以正常工作,因为它加载速度非常快,看起来组合框保持空白。

但是,如果您单步执行代码,您将看到当将 DataSource 分配给“list”时,SelectedItem 和 Text 值发生了变化。

我实际的 LINQ 查询要大一些,因此加载速度较慢。我的组合框在 Text 值被清除之前“闪烁”它,我想删除这个难看的 flash。

我已经尝试在 DataSource 分配之前和之后将 SelectedItem 和 Text 值设置为 null(或“”)的不同组合,但我无法让“flash”消失。

任何建议都非常感谢!=)

编辑:我还想补充一点,这只发生在初始表单加载时......如果我更改绑定源然后重置回我的原始(再次运行完全相同的代码),它不会“闪烁”......不确定这是否有帮助或有所作为......

4

6 回答 6

1

尝试使用comboBox1.SuspendLayout()comboBox1.ResumeLayout()围绕您的数据绑定代码。第一个应该完全阻止它更新,直到第二个被调用。

于 2012-11-09T17:06:50.437 回答
1

另一个简单的建议是将空白的 CompanyName 添加为列表中的第一项

list.Insert(0, "");
于 2012-11-09T17:09:17.920 回答
1

在设置comboBox1.DataSource 之前,将一个空引用添加到您的列表作为第一个列表元素。

 var list = test.Select(x => new { CompanyName = x.Value }).ToList();
 list.Insert(0, null);
 comboBox1.DataSource = list;
于 2012-11-09T17:11:06.357 回答
0

我遇到了同样的问题,但我无法添加一个空项目,所以我所做的是:

comboBox.ForeColor = comboBox.BackColor;
//set the combobox datasource
comboBox.ForeColor = SystemColors.WindowText;

这使得组合框在设置数据源而不添加空项目时看起来是空白的。

于 2014-04-12T21:34:42.603 回答
0

这对我有用:删除绑定,然后在设置 DataSource 后将它们添加回来:

Binding[] bindings = new Binding[combo.DataBindings.Count];
combo.DataBindings.CopyTo(bindings, 0);
combo.DataBindings.Clear();
combo.DataSource = datasource;
combo.SelectedIndex = -1;
foreach (Binding b in bindings)
{
    combo.DataBindings.Add(b);
}
于 2019-06-14T15:47:56.047 回答
0

我对这个问题的解决方案是在表单构造函数中添加一个数据源,然后在 form_Load 中将其更改为 null,之后,当我用我的列表设置数据源时,组合框中的文本保持空白

于 2022-01-29T11:32:03.657 回答