0

我有一个DataGridView用户选择一个行,然后按下一个按钮,该按钮根据所选行进行操作。

目前,我正在尝试使用以下方法获取所选行的 ID (第一列) :

int id = (int) DataGrid_Contact.SelectedRow[0].Cells[0].Value;

我尝试过其他方法,例如dgv.CurrentRow,dgv.SelectedCells等。一切总是指向第一行或第一单元格(0, 0)。无论我的选择如何,我都无法改变这一点。

的显着特性DataGridView是:

MultiSelect = false;
ReadOnly = true;
SelectMode = FullRowSelect;

其他一切要么与选择无关和/或设置为它们的默认值。

万一这很重要,我将使用 SQL 命令填充 DataGridView,并设置DataGridView. 我试过this.BindingContext[DataGridView dgv.DataSource].EndCurrentEdit()无济于事。

最后,我使用的是 Microsoft Visual C# 2008 Express Edition 和 Microsoft SQL Server 2008。

4

3 回答 3

1

分析您的代码后,我从您的代码中观察到以下错误:

1.您直接将对象值转换为 int :解决方案:这里您需要显式转换。

2.您正在尝试使用以下语句获取选定的行项目:

DataGrid_Contact.SelectedRow[0].Cells[0].Value;

实际上上面的语句不会被编译,因为没有SelectedRow[int]集合。
而不是你应该使用SelectedRows[int] Collection如下:

DataGrid_Contact.SelectedRows[0].Cells[0].Value;

3.从您的属性很明显您已禁用,MultiRowSelect因此没有必要从多行获取数据。

最终解决方案:

替换这个:

int id = (int) DataGrid_Contact.SelectedRow[0].Cells[0].Value;

有以下内容:

int id = Convert.ToInt32(DataGrid_Contact.SelectedRows[0].Cells[0].Value.ToString().Trim());
于 2013-11-11T18:46:28.313 回答
0

您应该能够提取所选行的索引,然后使用原始结构来获取正确的元素。

     objList[yourGrid.SelectedIndex]
于 2013-11-11T18:47:33.407 回答
0

我想通了这一切。

首先,有一个错字。SelectedRow 应该是 SelectedRows。

另外,我的演员工作得很好。

最后,问题是我在抓取我选择的数据之前将菜单设置为不可见。无论出于何种原因,当窗口不可见时,选择默认为 0, 0 而不是保持其先前的值。

于 2013-12-04T22:26:38.180 回答