sub*_*han 6 c# datagridview datagridcomboboxcolumn winforms
我有一个Winforms应用程序有一个DataGridView.它DataGridView不受数据源的约束.我正在读取一个文本文件,根据文件中的每一行,我将每行的值放在datagrid中.
我的网格中有一列是ComboBoxColumn.它有一系列的项目.
我的目标是将单元格中显示的项目的索引保存到文件中.但是,似乎ComboBoxCell没有SelectedIndex像这样的属性ComboBox.
重要的是要提到我需要知道只有当用户点击"保存"选项时显示的项目的索引,所以我不相信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;
}
Run Code Online (Sandbox Code Playgroud)
现在你可以使用它:
private void Save_Click(object sender, EventArgs e)
{
int index = -1;
if (combo != null) index = combo.SelectedIndex;
// now do what you want..
}
Run Code Online (Sandbox Code Playgroud)
请注意,这只是一个最小的例子.如果按"保存"布顿在你的用户将编辑多个列和行,你将需要存储要么ComboBoxes,或者更便宜的SelectedIndex,也许在CellEndEdit在每个小区的基础事件.细胞Tag是明显的储存场所:
void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
if (combo != null)
dataGridView1[e.ColumnIndex, e.RowIndex].Tag = combo.SelectedIndex;
}
Run Code Online (Sandbox Code Playgroud)
在这个版本中,你显然会从Tag,而不是从组合中检索索引.
当然,你也可以找到Item从Value这样的:
DataGridViewComboBoxCell dcc =
(DataGridViewComboBoxCell)dataGridView1[yourColumn, yourRow];
int index = dcc.Items.IndexOf(dcc.Value);
Run Code Online (Sandbox Code Playgroud)
但这只会得到第一个拟合指数,而不是实际选择的指数.
| 归档时间: |
|
| 查看次数: |
9288 次 |
| 最近记录: |