【问题标题】:C# DataGridView: Selected Row always returns First Row (Regardless of Selection)C# DataGridView:选定行始终返回第一行(无论选择如何)
【发布时间】:2013-11-11 18:17:58
【问题描述】:

我有一个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。

【问题讨论】:

  • 请显示完整代码。
  • 我用它来获取被选中的行 private void DataViewBox1_CellClick(object sender, DataGridViewCellEventArgs e) { int ri = e.RowIndex;
  • 您使用什么事件来获取 selectedRow 值?
  • 又一个奇怪的问题。您应该确保您所说的一切都是真的,尤其是关于您如何知道所选行始终是第一行。
  • 可能想要验证您实际上为每个文本/值项对存储了不同的值。

标签: c# sql winforms datagridview selection


【解决方案1】:

分析您的代码后,我发现您的代码有以下错误:

1.您直接将对象值转换为 int : 解决方案:这里你需要一个明确的演员表。

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

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

实际上上面的语句不会被编译,因为没有SelectedRow[int] Collection。
你应该使用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());

【讨论】:

  • #2 可能是他的错字,否则他应该谈论另一种例外。
  • 像 OP 所做的那样进行转换没有错,如果 Value 是一个对象装箱一些 int,它应该仍然有效。
  • 这里他正在从 object 到 int 进行拆箱,object 应该是一个已经装箱的 object。
  • 看来你连自己都没有尝试过。只需用一个 int 列创建一个DataGridView,尝试添加一些具有该列的 int 值的行,然后自己做。只有当 Cell 值是 "3" 这样的字符串而不是 int 3 时,您的代码才会有所不同。
  • 是的,它正在使用 int 列,我正在尝试使用字符串,谢谢。
【解决方案2】:

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

     objList[yourGrid.SelectedIndex]

【讨论】:

    【解决方案3】:

    这一切我都想通了。

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

    另外,我的演员阵容也很好。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-21
      • 1970-01-01
      • 2015-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多