我有一个
Winforms
应用程序,其中有一个 DataGridView
。
DataGridView
未绑定到数据源。我正在读取一个文本文件,并根据文件中的每一行,将每一行的值放置到数据网格中。
我的网格中有一个
ComboBoxColumn
列。它里面有一系列物品。
我的目标是将单元格中显示的项目的索引保存到文件中。 然而,似乎
ComboBoxCell
没有像SelectedIndex
那样的ComboBox
属性。
值得一提的是,我需要知道仅当用户点击“保存”选项时显示的项目的索引,所以我不相信editingControlShowing事件是我的方法。
好吧,你几乎是对的:为了找到选择的索引,你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);
但这只会得到first拟合索引,而不是实际选择的索引..
int cmbindex =0;
for(int i=0;i<datagridview1;i++)
{
cmbindex = convert.toint32(datagridview1["cmbboxcellname",i].value;
}
你可以得到
.Value
的DataGridViewComboBoxCell
,然后找到它的索引。
Dim Cell As DataGridViewComboBoxCell = 'Your ComboBoxCell here
Dim SelectedIndex = Cell.Items.Cast(Of Object)().ToList().IndexOf(Cell.Value)