Добавьте 2 или более поля к значению члена C # кодирования - PullRequest
0 голосов
/ 22 марта 2012

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

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

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

Спасибо.

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

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

Ответы [ 4 ]

3 голосов
/ 22 марта 2012

Вы можете использовать свойство 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

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

1 голос
/ 27 ноября 2014
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());
.....
0 голосов
/ 22 марта 2012

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

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());
}
0 голосов
/ 22 марта 2012

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

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

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

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

yourTextBox.Text = youComboBox.Text;

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

...