gpt4 book ai didi

c# - ComboBox 在数据绑定(bind)更新后变为空白,即使数据更新成功

转载 作者:行者123 更新时间:2023-11-30 17:23:41 26 4
gpt4 key购买 nike

当数据绑定(bind)时,我无法让 ComboBox 按预期运行,我不确定问题出在哪里。

在下面的代码中,创建了一个 ComboBox 并为其提供了一个数据绑定(bind)值列表,然后将数据绑定(bind)到表单。这个想法是 ComboBox 应该显示选项列表,当一个选项被选中时,它应该更新数据源,并在状态文本框中指示。

除了 ComboBox 在更新值后变为空白外,所有这一切似乎都正常工作,这是我不明白的。

当“选择”属性的数据类型从 Int32 更改为字符串时,它完全按预期工作。然而,作为 Int32,即使正确设置了值,该框也会变为空白。

如能帮助理解如何解决此问题,我们将不胜感激。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace ComboboxDatabindingTest
{
public partial class Form1 : Form
{
ComboBox _box;
TextBox _status;
ValuesDataSource _bsValues;
BindingSource _bsObject;
Binding _binding;
int _selection;

public Form1()
{
_selection = 0;

_bsValues = new ValuesDataSource();

_bsObject = new BindingSource();
_bsObject.DataSource = this;

_status = new TextBox();
_status.Left = 20;
_status.Top = 50;
_status.Width = 200;
_status.ReadOnly = true;

_box = new ComboBox();
_box.Name = "box";
_box.Left = 20;
_box.Top = 20;
_box.Width = 200;
_box.DropDownStyle = ComboBoxStyle.DropDownList;
_box.ValueMember = "CodeOrLabel";
_box.DisplayMember = "Label";
_box.DataSource = _bsValues;
_binding = _box.DataBindings.Add("SelectedValue", _bsObject, "Selection");

this.Controls.Add(_box);
this.Controls.Add(_status);
}

public int Selection
{
get { return _selection; }
set { _selection = value; _status.Text = value.ToString(); }
}
}

public class Value
{
private string _code = null;
private string _label = "";

public Value(string code, string label)
{
_code = code;
_label = label;
}

public string Code
{
get { return _code; }
}

public string Label
{
get { return _label; }
}

public string CodeOrLabel
{
get { return _code == null ? _label : _code; }
}
}

public class ValuesDataSource : BindingList<Value>
{
public ValuesDataSource()
{
base.Add(new Value("1", "California"));
base.Add(new Value("2", "Nevada"));
base.Add(new Value("3", "Arizona"));
base.Add(new Value("4", "Oregon"));
}
}
}

最佳答案

它正在挣扎,我并不感到惊讶。使用 SelectedValue 绑定(bind),它将尝试在每个(即 CodeOrLabel)的 ValueMember 之间找到匹配项(意味着 Equals) ) 和绑定(bind)属性 (Selection)。但是(例如)"123".Equals(123) 从不 是真的,所以这永远不会匹配。所以它大概决定没有一个选定的项目(因为没有匹配项)。

基本上,在这里使用string,或者在整个过程中使用int

关于c# - ComboBox 在数据绑定(bind)更新后变为空白,即使数据更新成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2036551/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com