Что ж, вы поняли почти правильно: чтобы найти выбранный индекс, который вам нужен, нужно закодировать событие 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);
Но это просто даст первый подходящий индекс, а не тот, который был фактически выбран.
person
TaW
schedule
10.05.2015