【问题标题】:ComboBox.SelectedValue is messed up after binding to a List绑定到列表后 ComboBox.SelectedValue 搞砸了
【发布时间】:2010-07-21 20:56:33
【问题描述】:

我在这里失去了理智......

我在表单上有 ComboBox,其中一个属性已更改,Sorted = true。

此属性与 SelectedValue 混淆,我想知道原因。

看一下代码(可以粘贴到新建的WinForms项目中,添加combobox后就可以使用了):

    private void Form1_Load(object sender, EventArgs e)
    {
        List<ColumnFilter> ColumnFilters = new List<ColumnFilter>();
        ColumnFilters.Add(new ColumnFilter("Ope_OpeID", "Ope_OpeID", ColumnFilterType.DataGridViewHidden));
        ColumnFilters.Add(new ColumnFilter("Ope_Kod", "Ope_Kod", ColumnFilterType.DataGridViewHidden));
        ColumnFilters.Add(new ColumnFilter("Ope_Imie", "Ope_Imie", ColumnFilterType.DataGridViewHidden));
        ColumnFilters.Add(new ColumnFilter("Ope_Nazwisko", "Ope_Nazwisko", ColumnFilterType.DataGridViewHidden));

        comboBox1.DataSource = ColumnFilters;
        comboBox1.DisplayMember = "Description";
        comboBox1.ValueMember = "Expression";
    }

    private void comboBox1_SelectionChangeCommitted(object sender, EventArgs e)
    {
        MessageBox.Show(comboBox1.SelectedValue.ToString());
    }
}
public enum ColumnFilterType
{
    DataGridView = 1,
    DataGridViewHidden = 2,
    DataTable = 3
}

public struct ColumnFilter
{
    private string description;
    private string expression;
    public string Description
    {
        get { return description; }
        set { description = value; }
    }
    public string Expression
    {
        get { return expression; }
        set { expression = value; }
    }
    public readonly ColumnFilterType Type;
    public ColumnFilter(string description, string expression, ColumnFilterType type)
    {
        this.description = description;
        this.expression = expression;
        this.Type = type;
    }
    public override string ToString()
    {
        return description;
    }
}

如您所见,我手动将 4 个结构添加到列表中,并在 SelectionChangeCommited 事件中显示所选结构的当前值。

因此,当我选择 Ope_OpeID 时,我想查看 Ope_OpeID 值,当我选择 Ope_Imie 时,我想查看 Ope_Imie 值。换句话说,值必须等于显示的文本。

问题是,例如,当我选择 Ope_Imie 时,值就是 Ope_OpeID! 当我选择 Ope_OpeID 时,值为 Ope_Nazwisko。我不知道为什么会这样。

“有趣”(在浪费了两个小时的生命之后就不那么有趣了..)是当我添加到列表中的不同项目时:

        ColumnFilters.Add(new ColumnFilter("1Ope_OpeID", "1Ope_OpeID", ColumnFilterType.DataGridViewHidden));
        ColumnFilters.Add(new ColumnFilter("2Ope_Kod", "2Ope_Kod", ColumnFilterType.DataGridViewHidden));
        ColumnFilters.Add(new ColumnFilter("3Ope_Imie", "3Ope_Imie", ColumnFilterType.DataGridViewHidden));
        ColumnFilters.Add(new ColumnFilter("4Ope_Nazwisko", "4Ope_Nazwisko", ColumnFilterType.DataGridViewHidden));

它可以正常工作。所以,排序确实有问题,它只对第一个字符排序吗???

感谢您的宝贵时间。

【问题讨论】:

  • 普通人:)这是基本功能,我需要你的帮助...:|

标签: c# winforms data-binding combobox


【解决方案1】:

排序属性不适用于数据绑定组合框。请参阅备注部分here

您的一个选择是让 ColumnFilter 实现 IComparable 然后直接对 List 进行排序。

【讨论】:

    猜你喜欢
    • 2017-10-03
    • 2017-12-14
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多