Узнать свойства 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);
но это будет просто получить первый подходящий индекс, а не тот, который был фактически выбран..