使用ComboBox WinForms C#保持ID和值同步

我正在使用ComboBox来保存数据。通常我创建2个ComboBox一个隐藏以保存ID,一个隐藏真实数据。 我需要id来知道它在数据库中的ID。 然后我使用SelectedIndex和事件两个复选框来保持它们同步。 有时甚至使用更多的combobox并使用SelectedIndex和许多事件使它们彼此保持同步。 我觉得有更好的方法。

  private void czynnoscInstrumentyFinansoweComboID_SelectedIndexChanged(object sender, EventArgs e) { czynnoscInstrumentyFinansoweCombo.SelectedIndex = czynnoscInstrumentyFinansoweComboID.SelectedIndex; } 

另外我想要的是在ComboBox自动完成/搜索。 当用户使用combobox并开始在combobox内键入时,它只会对第一个字母作出反应,因此当您键入“开始”时,它将跳过列表然后转到t然后转到等等,当我希望它尝试找到短语“事情的开始“。

我如何实现这两个目标?

编辑:

我没有使用DataSet,我正在添加这样的值:

  // get sql data and put it into strings/decimals then add it like that to comboBox string var = "sds"; czynnoscInstrumentyFinansoweComboID.Add(var); 

好吧,如果我理解你的问题,那么我会说你的感觉是正确的。 您不必使用多个组合来跟踪数据/值(即您的情况下的标识符)。

通常要这样做,我们需要将一个数据源分配给combobox,这样当您获得所选索引更改事件时,它将为您提供文本以及附加ID。 将DisplayMember设置为包含文本的数据集列,并将ValueMember属性设置为包含该ID的数据集列。

 DataSet yourDataSource = SomeGetDataSourceMethod(); //get your data source ready. this.cbxLookup.DataSource = yourDataSource; this.cbxLookup.DisplayMember ="EmployeeName"; this.cbxLookup.ValueMember = "EmployeeID"; 

在SelectedIndexChanged事件中,您可以获取SelectedItem,SelectedIndex,SelectedValue。

或者你也可以这样做:

 int value=1; cbxLookup.Items.Add(new ListViewItem("Your Name", value)); 

–EDIT 2–定义如下结构:

  class KeyValueData { public KeyValueData(string Text) { text = Text; itemData = 0; } public KeyValueData(string Text, int ItemData) { text = Text; itemData = ItemData; } public int ItemData { get { return itemData; } set { itemData = value; } } public override string ToString() { return text; } protected string text; protected int itemData; } 

//然后添加到组合中,如下所示:

 comboBox1.Items.Add(new KeyValueData("New Yorkers", 21)); 

–EDIT 1–

对于第二部分,假设您使用的是.NET 2.0,您可以获取KeyPress事件并使用ComboBox.FindString方法。 这个例子可能有帮助。

Dzien Dobry,

首先….为什么不将OBJECT放入具有字符串和ID值的combobox中? 总有Selecteditem来获取它(不是SelectedIndex)…为你节省第二个combobox。

第二……获得适当的工具。 Infragistics,Devexpress – Microsoft内部UI元素在Winforms中受到严格限制。 使用WPF变得更好,但Windowms它真的很原始。 而且它不会改变 – MS依靠生态系统来提供适当的工具。

我从来没有接触任何Winform集成控件 – 完全基于Infragistics,这是有原因的。

Dzien Dobry rowniez :)我不确定,但你是否错过了这样一个事实:你可以轻松地保持combobox中的id和值?

而且总的offtopic,但是你的控制命名惯例刚刚在这里激起了大笑的爆发。 谢谢你。