C#、VS2010。
private void FillCombo()
{
var data = from c in _ctx.Categories
select c;
categoryBindingSource.DataSource = data.ToList();
cbxCategory.DataSource = categoryBindingSource;
cbxCategory.DisplayMember = "Name";
cbxCategory.ValueMember = "CategoryId";
if (_dbOperation == Helper.DbOperation.Insert)
{
cbxCategory.SelectedIndex = -1;
}
}
cbxCategory.DataBindings.Add("SelectedValue", bindingSource, "CategoryId");
当我从组合框中选择一个项目时,当组合框失去焦点时它会重置。 为什么?解决办法是什么? 注意。 连接到产品表。 谢谢。
检查
_dbOperation == Helper.DbOperation.Insert
的条件值
我猜测这个条件是满足的,并且每次调用此方法后组合框都会重置为初始值。
请检查
UIForm.Designer.cs
文件,如果你使用它,可能是你没有注意到双DataBinding
行,寻找类似的行:
// Master->Details ::= Category->Products
//
// categoryIdComboBox
//
// 1.
// this.categoryIdComboBox.DataBindings.Add("SelectedValue", this.productBindingSource, "CategoryId", true);
// 2.
this.categoryIdComboBox.DataBindings.Add("SelectedItem", this.productBindingSource, "Category", true);
// 3.
// this.categoryIdComboBox.DataBindings.Add(new System.Windows.Forms.Binding("SelectedValue", this.productBindingSource, "CategoryId", true));
// 4.
// this.categoryIdComboBox.DataBindings.Add(new System.Windows.Forms.Binding("SelectedItem", this.productBindingSource, "Category", true));
起初我没有注释第 3 行和第 4 行,并且遇到了和你一样的问题。 当我只留下 1. 行未注释时,它醒来了,但我在验证方面遇到了问题。
我的解决方案是仅取消注释 2 行。
也许仅适用于 4. 线。
对于 winforms,以这种方式绑定它(对于强类型)
comboBoxFollowedBy.DataBindings.Add("SelectedValue", bindingSource1, "FieldName", true, DataSourceUpdateMode.OnPropertyChanged);
我在 .Net 4.8.1 Winforms 应用程序上遇到了同样的问题。
comboBoxSweepedSignal.DataBindings.Add(nameof(comboBoxSweepedSignal.DataSource), viewModel, nameof(viewModel.AvailableSweepSignalItems), true, DataSourceUpdateMode.Never);
comboBoxSweepedSignal.DataBindings.Add(nameof(comboBoxSweepedSignal.SelectedItem), viewModel, nameof(viewModel.SelectedSweepSignalItem), true, DataSourceUpdateMode.OnPropertyChanged);
comboBoxSweepedSignal.DataBindings.Add(nameof(comboBoxSweepedSignal.SelectedValue), viewModel, nameof(viewModel.SelectedSweepSignalItem), true, DataSourceUpdateMode.OnPropertyChanged);
我通过将
AvailableSweepSignalItems
的类型从 ImmutableArray
更改为公开为 IReadOnlyList
的数组来修复此问题。