C# 获取DataGridView中特定列中的值

C# 获取DataGridView中特定列中的值,c#,winforms,datagridview,C#,Winforms,Datagridview,我的Winforms应用程序中有一个datagridview。 用户可以单击datagridview上的任意位置 然后单击按钮对该数据行执行操作 但是,为了做到这一点,我需要从该行恢复ID 现在请记住,用户可能没有单击ID列 因此,SelectedCell.Value在这里对我没有用处 我尝试了以下代码 DataGridViewRow row = dataIPs.SelectedRows[0]; DataGridViewCell cell = row.Cells[0]; string value

我的Winforms应用程序中有一个datagridview。 用户可以单击datagridview上的任意位置 然后单击按钮对该数据行执行操作 但是,为了做到这一点,我需要从该行恢复ID 现在请记住,用户可能没有单击ID列 因此,SelectedCell.Value在这里对我没有用处

我尝试了以下代码

DataGridViewRow row = dataIPs.SelectedRows[0];
DataGridViewCell cell = row.Cells[0];
string value = cell.Value.ToString();
但这会产生一个越界错误

如何从datagridview的特定列获取值,而不管用户实际选择的是哪一列

答复 最终对我有效的代码如下:

DataGridViewRow row = dataIPs.CurrentCell.OwningRow;
string value = row.Cells["IPID"].Value.ToString();

尝试从事件参数中获取值。

当未选择行时,您似乎正在尝试访问
SelectedRows
集合

DataGridView
的默认选择模式是
CellSelect
,在此模式下,当您单击单元格时,不会选择任何行

您需要更改选择模式或以其他方式获取所需的行

  • 您可以将选择模式更改为
    FullRowSelect
    ,这可以在设计器中或代码中完成:

    dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
    
  • 或者,您可以从以下位置访问选定的单元格和行:

    DataGridViewRow row = dataGridView1.Rows[dataGridView1.SelectedCells[0].RowIndex];
    
    或者像这样:

    DataGridViewRow row = dataGridView1.CurrentCell.OwningRow;
    

将SelectionMode属性设置为FullRowSelect。这是SelectedRow工作所必需的

您还可以尝试在datagridview中添加带有按钮的列。之后,您可以从datagridview捕获事件“CellContentClick”,该事件在eventargs中具有“RowIndex”和“ColumnIndex”属性。

在什么时候发生越界错误?是在
SelectedRows[0]
还是
Cells[0]
调用?这是一个按钮单击-这就是我遇到的问题-因此事件参数没有行索引、列索引等。事件参数的“值”将是突出显示的单元格中的值,而不一定是我想要的列中的值。例如,如果我的网格有4列,则无论实际选择了4列中的哪一列,我都希望所选行的第一列中的值。问题是在单元格上单击鼠标右键和双击会产生不同的事件。因此,我确实需要用户能够选择单个单元格。因此,我不能使用fullrow select。然后,我需要一种方法来恢复所选单元格的行索引,而不需要可用的mouseeventargs。@PJW请参见第二个选项-基于所选单元格选择行。除非您将鼠标单击位置存储在某个位置,否则您必须选择某个对象,因为当他们单击按钮时,鼠标显然不再位于网格上。@PJW并且sickunit始终建议引入按钮类型的列。