我有一个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
的DataSource。我试过this.BindingContext[DataGridView dgv.DataSource].EndCurrentEdit()
无济于事。
最后,我使用的是Microsoft Visual C#2008 Express Edition和Microsoft SQL Server 2008。
答案 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而不是保持其先前的值。