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

Mad*_*Boy 0 c# combobox winforms

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

    private void czynnoscInstrumentyFinansoweComboID_SelectedIndexChanged(object sender, EventArgs e) {
        czynnoscInstrumentyFinansoweCombo.SelectedIndex = czynnoscInstrumentyFinansoweComboID.SelectedIndex;
    }
Run Code Online (Sandbox Code Playgroud)

我想要的另一件事是内部自动完成/搜索ComboBox.当用户使用组合框并开始在组合框内输入时,它只会对第一个字母作出反应,因此当您键入"开始"时,它将跳过列表s然后t再转到a等等,当我希望它尝试找到短语"开始的东西"时".

我如何实现这两个目标?

编辑:

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

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

KMå*_*Mån 5

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

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

DataSet yourDataSource = SomeGetDataSourceMethod(); //get your data source ready.

this.cbxLookup.DataSource = yourDataSource;
this.cbxLookup.DisplayMember ="EmployeeName";
this.cbxLookup.ValueMember = "EmployeeID";
Run Code Online (Sandbox Code Playgroud)

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

或者你也可以这样做:

int value=1;
cbxLookup.Items.Add(new ListViewItem("Your Name", value));
Run Code Online (Sandbox Code Playgroud)

--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;
  }
Run Code Online (Sandbox Code Playgroud)

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

comboBox1.Items.Add(new KeyValueData("New Yorkers", 21));
Run Code Online (Sandbox Code Playgroud)

--EDIT 1--

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