Добавьте 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());
}