C# ComboBox SelectedValue 在焦点丢失时重置

问题描述 投票:0回答:4

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");

当我从组合框中选择一个项目时,当组合框失去焦点时它会重置。 为什么?解决办法是什么? 注意。 连接到产品表。 谢谢。

c# winforms binding combobox
4个回答
2
投票

检查

_dbOperation == Helper.DbOperation.Insert

的条件值

我猜测这个条件是满足的,并且每次调用此方法后组合框都会重置为初始值。


0
投票

请检查

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. 线。


0
投票

对于 winforms,以这种方式绑定它(对于强类型)

comboBoxFollowedBy.DataBindings.Add("SelectedValue", bindingSource1, "FieldName", true, DataSourceUpdateMode.OnPropertyChanged);

0
投票

我在 .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
的数组来修复此问题。

© www.soinside.com 2019 - 2024. All rights reserved.