【发布时间】: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