isxaker
@isxaker

Как установить значение в DataGridViewComboBoxColumn?

Хочу отображать информацию из таблицы в DataGridView, причем в одну из колонок подтягивать связанную таблицу и отображать в виде DropDown листа.

List<columns> columns = DataLoader.GetColumns();
List<tables> tables = DataLoader.GetTables();

editingDataGridView.DataSource = columns; // my dataGridView
DataGridViewComboBoxColumn comboBoxColumn = new DataGridViewComboBoxColumn(); //my combobox column

comboBoxColumn.DisplayMember = "Table_Name";
comboBoxColumn.ValueMember = "Table_ID";
comboBoxColumn.DataSource = tables;

//add combobox column in dataGrid
this.editingDataGridView.Columns.Add(comboBoxColumn);

int index = this.editingDataGridView.Columns.IndexOf(comboBoxColumn);

//AND this i want set value
for (int i = 0; i < columns.Count; i++)
{
     //do not work; not set value from columns
      this.editingDataGridView.Rows[i].Cells[index].Value = columns[i].Table_ID;
}


В DropDown данные приходят корректно
DropDown.png

Но никакого значения не устанавливается:
DDList.png
  • Вопрос задан
  • 7631 просмотр
Решения вопроса 1
isxaker
@isxaker Автор вопроса
Вот где был ключевой момент

comboBoxColumn.DataPropertyName = "Table_ID";

Здесь мы явно задаем имя свойству, покоторому будет происходить привязка comboBox и dataGridView.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
kin9pin
@kin9pin
int index = this.editingDataGridView.Columns.IndexOf(comboBoxColumn);

можно заменить на

int index = comboBoxColumn.Index;


Чтобы установить значение, надо сделать вот так вот:

(this.editingDataGridView.Rows[i].Cells[index] as DataGridViewComboBoxCell).Value = tables.FirstOrDefault(c =>c.Table_ID == columns[i].Table_ID);

при условии, что в свойстве Value устанавливается объект, который имеет публичные свойства «Table_Name» и «Table_ID»
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы