Добавьте 2 или более поля к значению члена C# кодирования

У меня есть таблица с 4 полями первичного ключа. Я загружаю это в раскрывающийся список в моем приложении WinForm, созданном с использованием C#.

В выпадающем списке TextChanged у меня есть определенный TextBox, и я хочу заполнить информацию, полученную таблицей, для определенного поля, выбранного в раскрывающемся списке.

Итак, как я уже сказал, в таблице 4 поля. Могу ли я получить все эти 4 поля в элемент value из набора данных или подскажите, возможно ли это?

Спасибо.

Datatable dt=dba.getName(); cmb_name.ValueMember="id"; cmb_name.DisplayMember="name"; cmb_name.DataSource=dt;

это нормальный формат.. но у меня есть больше ключевых полей.. поэтому мне нужно добавить больше ключевых полей..

4 ответа

Решение

Вы можете использовать свойство DataSource, чтобы связать ваши исходные данные с ComboBox (например, Список сущностей или DataTable и т. Д.), А затем установить DisplayMember Свойство ComboBox для (строки) имени поля, которое вы хотите отобразить.

После того, как пользователь выбрал предмет, вы можете разыграть SelectedItem вернитесь к исходному типу данных строки (Entity, DataRow и т. д. - он по-прежнему будет того же типа, что и вы), а затем вы можете получить свои 4 составных ключа для исходного элемента.

Таким образом, вы избегаете SelectedValue проблема полностью.

Редактировать:

Заполните следующим образом:

cmb_name.DisplayMember = "name";
cmb_name.DataSource = dt;

// Ignore ValueMember and Selected Value entirely

Когда вы хотите получить выбранный элемент

var selectedRow = (cmb_name.SelectedItem as DataRowView );

Теперь вы можете получить 4 значения вашего ПК, например, selectedRow["field1"], selectedRow["field2"], selectedRow["field3"] etc

Если, однако, вы имеете в виду, что вы хотите отобразить 4 столбца для пользователя (то есть не иметь ничего общего с вашим ключом таблицы), то смотрите здесь Как связать ComboBox, чтобы отображаемый элемент соответствовал 2 полям источника данных, доступным для данных?

cmb_name.DisplayMember = "name";
cmb_name.DataSource = dt;
DataRowView selectedRow = (cmb_name.SelectedItem as DataRowView );

Результат будет здесь:

MessageBox.Show(selectedRow.Row[0].ToString());
MessageBox.Show(selectedRow.Row[1].ToString());
MessageBox.Show(selectedRow.Row[2].ToString());
MessageBox.Show(selectedRow.Row[3].ToString());
.....

Если вы хотите получить некоторые данные из ComboBox в List Вы можете использовать что-то вроде этого

List<string> ListOfComboData = new List<string>();
ListOfComboData = yourComboBox.Items.OfType<string>().ToList<string>();

Я понятия не имею, если это то, что вы имеете в виду, так как вопрос очень плохо структурирован. Надеюсь, это поможет...

Редактировать: Поместить выбранный текст в некоторые TextBox использование

yourTextBox.Text = youComboBox.Text;

в SelectedIndexChanged событие вашего ComboBox,

Вы можете следовать подходу здесь со следующим классом:

public class ComboBoxItem
{
   public string Text { get; set; }
   public object[] PrimaryKey { get; set; }
}

private void Test()
{
    ComboboxItem item = new ComboboxItem();
    item.Text = "Item text1";
    item.PrimaryKey = new object[] { primaryKey1, primaryKey2, primaryKey3, primaryKey4};

    comboBox1.Items.Add(item);

    comboBox1.SelectedIndex = 0;

    MessageBox.Show((comboBox1.SelectedItem as ComboboxItem).Value.ToString());
}
Другие вопросы по тегам