C#DataGridView:所选行总是返回第一行(无论选择)

时间:2013-11-11 18:17:58

标签: c# sql winforms datagridview selection

我有一个DataGridView用户选择一行,然后按下一个基于所选行行动的按钮。

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

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

我尝试了其他方法,例如dgv.CurrentRowdgv.SelectedCells等。所有内容始终指向第一行或第一个单元(0,0) 。无论我的选择如何,我都无法改变这一点。

DataGridView的显着属性是:

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

其他所有内容与选择无关和/或设置为默认值。

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

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

3 个答案:

答案 0 :(得分: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());

答案 1 :(得分:0)

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

     objList[yourGrid.SelectedIndex]

答案 2 :(得分:0)

我想出了所有这些。

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

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

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