Узнать свойства selectedIndex DatagridviewComboBoxCell по

у меня есть Winforms приложением DataGridView. The DataGridView не привязан к источнику данных. Я читаю текстовый файл и в соответствии с каждой строкой в файле я помещаю значения каждой строки в datagrid.

у меня есть столбец в моей сетке, что является ComboBoxColumn. В нем есть коллекция предметов.

моя цель-сохранить в файл индекса элемента, который отображается в ячейке. Однако, похоже, что ComboBoxCell нет SelectedIndex собственность, как ComboBox.

важно отметить, что мне нужно знать индекс элемента, отображаемого только тогда, когда пользователь нажимает опцию "Сохранить", поэтому я не считаю, что событие editingControlShowing-это мой путь.

1 ответов


Ну, ты понял почти правильно: для того, чтобы найти выбранного индекса вы do нужно код EditingControlShowing событие, просто не забудьте сохранить ссылку на ComboBox, который используется во время редактирования:

  // hook up the event somwhere:
   dataGridView1.EditingControlShowing += dataGridView1_EditingControlShowing;

 // keep a reference to the editing comtrol:
 ComboBox combo = null;

 // fill the reference, once it is valid:
 void dataGridView1_EditingControlShowing(object sender, 
                                          DataGridViewEditingControlShowingEventArgs e)
 {
     combo = e.Control as ComboBox;
 }

теперь вы можете использовать его:

private void Save_Click(object sender, EventArgs e)
{
        int index = -1;
        if (combo != null) index = combo.SelectedIndex;
        // now do what you want..
}

Примечание что это всего лишь минимальный пример. Если ваши пользователи будут редактировать несколько столбцов и строк перед нажатием кнопки "Сохранить", вам нужно будет сохранить ComboBoxes, или, менее дорогие,SelectedIndex, может быть CellEndEdit событие на основе каждой ячейки. Клетки"Tag очевидные места хранения:

void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
   if (combo != null) 
       dataGridView1[e.ColumnIndex, e.RowIndex].Tag = combo.SelectedIndex;
}

в этой версии вы, очевидно, получите индекс от Tag, а не от комбо..

конечно, вы также можете найти Item С Value такой:

DataGridViewComboBoxCell dcc = 
                        (DataGridViewComboBoxCell)dataGridView1[yourColumn, yourRow];
int index = dcc.Items.IndexOf(dcc.Value);

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