2010-05-29 5 views
2

У меня есть элемент управления DataGridView, привязанный к таблице базы данных. Я хочу, чтобы один из столбцов в gridview имел тип combobox. Компоновка должна содержать список жестко закодированных строк, что одинаково для всех строк в datagridview. Одно из полей в моей таблице базы данных - это индекс для этого списка жестко заданных строк.Комбинирование в связанном DataGridView

Я программно добавил новый столбец в gridview типа «DataGridViewComboBoxColumn», который успешно создает столбец со списками в нем. Однако это не связано с полем индекса в моей таблице DB.

Поле индекса в моей таблице БД фактически привязано к столбцу с помощью метода DataAdapter :: Fill. Я установил этот столбец скрытым, поэтому он скрыт для пользователя.

Очевидно, что перед обновлением адаптера данных я могу программно зафиксировать скрытый столбец в моем datatable с помощью SelectedIndex из моей combobox. Просто интересно, есть ли лучший способ сделать это?


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

Благодарим за помощь,
Dan.

ответ

5

Если вам нужна SelectedValue из ComboBox быть индексом, а не строку, заполнить ComboBox со списком пользовательских объектов Rathen чем список строк:

dgvComboColumn.DataSource = new [] 
{ 
    new { Index = 1, Text = "Foo" }, 
    new { Index = 2, Text = "Bar" }, 
    new { Index = 3, Text = "Baz" } 
}; 
dgvComboColumn.DisplayMember = "Text"; 
dgvComboColumn.ValueMember = "Index"; 
dgvComboColumn.DataPropertyName = "(the DB column that stores the index)"; 
+0

Fantastic! Я уже использовал пользовательский объект и установил свойства DisplayMember и ValueMember, однако я не знал о DataPropertyName! Это просто решено в одной строке, и мне потребовались часы, чтобы взломать! ;-) Я знал, что, должно быть, был более простой способ. Спасибо! – Dan

Смежные вопросы