获取 DatagridviewComboBoxCell 的 SelectedIndex
Get DatagridviewComboBoxCell's SelectedIndex
我有一个 Winforms
应用程序,它有一个 DataGridView
。
DataGridView
未绑定到数据源。我正在读取一个文本文件,并根据文件中的每一行,将每一行的值放入数据网格。
我的网格中有一列是 ComboBoxColumn
。它有一个项目集合。
我的目标是将单元格中显示的项目的索引保存到文件中。
但是,似乎 ComboBoxCell
没有像 ComboBox
.
这样的 SelectedIndex
属性
值得一提的是,我需要知道仅当用户点击 "Save" 选项时显示的项目的索引,所以我不认为 editingControlShowing 事件是我的方式。
好吧,你几乎是对的:为了找到选择的索引,你做需要编码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..
}
注意这只是一个最小的例子。如果您的用户在按下 'Save' 按钮之前将编辑多个列和行,您将需要存储 ComboBoxes
,或者更便宜的 SelectedIndex
,可能在 CellEndEdit
每个单元格的事件。 Cells 的 Tag
是明显的存储位置:
void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
if (combo != null)
dataGridView1[e.ColumnIndex, e.RowIndex].Tag = combo.SelectedIndex;
}
在此版本中,您显然将从 Tag
中检索索引,而不是从组合中检索索引..
当然你也可以从Value
中找到一个Item
,像这样:
DataGridViewComboBoxCell dcc =
(DataGridViewComboBoxCell)dataGridView1[yourColumn, yourRow];
int index = dcc.Items.IndexOf(dcc.Value);
但这只会得到第一个拟合指数,而不是实际选择的指数..
int cmbindex =0;
for(int i=0;i<datagridview1;i++)
{
cmbindex = convert.toint32(datagridview1["cmbboxcellname",i].value;
}
我有一个 Winforms
应用程序,它有一个 DataGridView
。
DataGridView
未绑定到数据源。我正在读取一个文本文件,并根据文件中的每一行,将每一行的值放入数据网格。
我的网格中有一列是 ComboBoxColumn
。它有一个项目集合。
我的目标是将单元格中显示的项目的索引保存到文件中。
但是,似乎 ComboBoxCell
没有像 ComboBox
.
SelectedIndex
属性
值得一提的是,我需要知道仅当用户点击 "Save" 选项时显示的项目的索引,所以我不认为 editingControlShowing 事件是我的方式。
好吧,你几乎是对的:为了找到选择的索引,你做需要编码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..
}
注意这只是一个最小的例子。如果您的用户在按下 'Save' 按钮之前将编辑多个列和行,您将需要存储 ComboBoxes
,或者更便宜的 SelectedIndex
,可能在 CellEndEdit
每个单元格的事件。 Cells 的 Tag
是明显的存储位置:
void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
if (combo != null)
dataGridView1[e.ColumnIndex, e.RowIndex].Tag = combo.SelectedIndex;
}
在此版本中,您显然将从 Tag
中检索索引,而不是从组合中检索索引..
当然你也可以从Value
中找到一个Item
,像这样:
DataGridViewComboBoxCell dcc =
(DataGridViewComboBoxCell)dataGridView1[yourColumn, yourRow];
int index = dcc.Items.IndexOf(dcc.Value);
但这只会得到第一个拟合指数,而不是实际选择的指数..
int cmbindex =0;
for(int i=0;i<datagridview1;i++)
{
cmbindex = convert.toint32(datagridview1["cmbboxcellname",i].value;
}