获取 DatagridviewComboBoxCell 的 SelectedIndex

Get DatagridviewComboBoxCell's SelectedIndex

我有一个 Winforms 应用程序,它有一个 DataGridViewDataGridView 未绑定到数据源。我正在读取一个文本文件,并根据文件中的每一行,将每一行的值放入数据网格。

我的网格中有一列是 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;

}