c# - 获取 DatagridviewComboBoxCell 的 SelectedIndex

标签 c# winforms datagridview datagridcomboboxcolumn

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

我的网格中有一列是 ComboBoxColumn。它有一个项目集合。

我的目标是将单元格中显示的项目的索引保存到文件中。 但是,ComboBoxCell 似乎没有 ComboBox 那样的 SelectedIndex 属性。

值得一提的是,我需要知道只有当用户点击“保存”选项时显示的项目的索引,所以我不认为 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..
}

请注意,这只是一个最小的示例。如果您的用户在按下“保存”按钮之前要编辑多个列和行,您将需要存储 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);

但这只会得到第一个拟合指数,而不是实际选择的指数..

关于c# - 获取 DatagridviewComboBoxCell 的 SelectedIndex,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30157239/

相关文章:

c# - 如何将 TabControl 选项卡设置为不可见

c# - 如何在 webbrowser 控件中调用 javascript 函数?

c# - LINQ 查询未检索保存的数据

c# - 在 datagridview 列中包含的按钮上添加一个事件

c# - 无法生成正确的类

c# - UWP:如何启动位于特定目录中的 exe 文件?

c# - 使用加速度计环顾四周 - Unity3D C#

c# - 另一个使用 StreamWriter 的进程正在使用的文件

c# - 如何知道对话框是否完全关闭?

c# - 如何在C#中控制datagridview光标移动