获取DatagridviewComboBoxCell的SelectedIndex

问题描述 投票:0回答:3

我有一个

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

我的网格中有一个

ComboBoxColumn
列。它里面有一系列物品。

我的目标是将单元格中显示的项目的索引保存到文件中。 然而,似乎

ComboBoxCell
没有像
SelectedIndex
那样的
ComboBox
属性。

值得一提的是,我需要知道仅当用户点击“保存”选项时显示的项目的索引,所以我不相信editingControlShowing事件是我的方法。

c# winforms datagridview datagridcomboboxcolumn
3个回答
8
投票

好吧,你几乎是对的:为了找到选择的索引,你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拟合索引,而不是实际选择的索引..


0
投票
int cmbindex =0;
for(int i=0;i<datagridview1;i++)
{
cmbindex = convert.toint32(datagridview1["cmbboxcellname",i].value;

}

0
投票

你可以得到

.Value
DataGridViewComboBoxCell
,然后找到它的索引。

Dim Cell As DataGridViewComboBoxCell = 'Your ComboBoxCell here
Dim SelectedIndex = Cell.Items.Cast(Of Object)().ToList().IndexOf(Cell.Value)
© www.soinside.com 2019 - 2024. All rights reserved.