Синхронизация идентификатора и значения с помощью ComboBox WinForms C # - PullRequest
0 голосов
/ 11 марта 2010

Я использую ComboBox для хранения данных. Обычно я создаю 2 ComboBox один скрытый для хранения идентификатора и один с реальными данными.Мне нужен идентификатор, чтобы знать, какой идентификатор в базе данных.Затем я использую SelectedIndex и событие для обоих флажков, чтобы держать их в синхронизации.Иногда я даже использую больше комбинированных списков и синхронизирую их друг с другом, используя SelectedIndex и множество событий.У меня есть ощущение, что есть лучший способ.

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

Еще одна вещь, которую я хотел бы иметь, это автозаполнение / поиск внутри ComboBox.Когда пользователь использует комбобокс и начинает печатать внутри комбобокса, он просто реагирует на первую букву, поэтому, когда вы набираете «старт», он переходит через список к s, затем к t, затем к a и т. Д., Когда я хочупопробуйте найти фразу «Начало чего-то».

Как мне добиться того и другого?

РЕДАКТИРОВАТЬ:

Я не использую DataSets, и я добавляю значениявот так:

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

Ответы [ 3 ]

5 голосов
/ 11 марта 2010

Ну, если я правильно понимаю ваш вопрос, тогда я скажу, что вы чувствуете, что это правильно. Вам не нужно использовать несколько комбинаций для отслеживания данных / значения (т. Е. Идентификатора в вашем случае).

Обычно для этого нам необходимо назначить источник данных в поле со списком, чтобы при получении события, выбранного для изменения индекса, он предоставлял вам текст, а также прикрепленный идентификатор. Задайте для DisplayMember столбец набора данных, содержащий текст, а для свойства ValueMember - столбец набора данных, содержащий идентификатор.

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));

- РЕДАКТИРОВАТЬ 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));

- РЕДАКТИРОВАТЬ 1 -

Для второй части, предполагая, что вы используете .NET 2.0, вы можете получить событие KeyPress и использовать метод ComboBox.FindString . Этот пример может помочь.

1 голос
/ 11 марта 2010

Дзиен Добрый,

Сначала .... Почему бы вам не поместить ОБЪЕКТ в поле со списком, в котором есть строка и значение идентификатора? Всегда есть Selecteditem, чтобы получить его (не SelectedIndex) ... спасает вас второй комбинированный список.

Во-вторых ... получить надлежащие инструменты. Infragistics, Devexpress - внутренние элементы пользовательского интерфейса Microsoft СЕРЬЕЗНО ограничены в Winforms. Становится лучше с WPF, но Windowms это просто действительно примитивно. И это не изменится - MS полагается на экосистему, чтобы обеспечить надлежащие инструменты здесь.

Я никогда не прикасаюсь ни к одному из интегрированных элементов управления Winform - полностью по поводу инфраструктуры, и это по какой-то причине.

0 голосов
/ 11 марта 2010

Дзьен Добри Ровнез :) Я не уверен, но вы упускаете тот факт, что вы можете легко сохранить и идентификатор и значение в выпадающем списке?

И полный оффтоп, но ваше соглашение об именах для элементов управления только что вызвало большой смех здесь, минуту назад. Спасибо вам за это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...