6

我正在DataGridView使用从实体框架获得的列表中显示一些数据。在这个网格中,我将一些数据库列设置id为不可见。

当用户单击gridview时,我需要知道单击了哪个对象以进行进一步的步骤,问题是我无法获得该id列,也无法通过:

datagridview1.CurrentRow.Cells[0].Value // here I get only visible cells

也不通过:

datagridview1.CurrentRow.DataBoundItem 

似乎通过将某些列设置为不可见,附加的对象具有匿名类型

有任何想法吗?

谢谢

4

5 回答 5

5

我刚试过这个:

private void dataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    var value = dataGridView.Rows[e.RowIndex].Cells[0].Value;
}

它奏效了。

在我的示例中,第 0 列是隐藏列,其中包含要提取的 id 属性。

于 2012-08-09T19:40:38.400 回答
2

对我来说,取columnName而不是index是可行的。

因此,如果您的列具有名称“id”,您可以使用:

datagridview1.CurrentRow.Cells["id"].Value
于 2013-10-09T11:02:20.890 回答
0

您可以使用我们的数据密钥。

列出隐藏字段的数据键。

然后,您可以使用以下代码访问这些值。

GridName.DataKeys[row.RowIndex][Index of key in datakey list].ToString()

例如。假设您的网格名为 myGrid。

您已设置以下数据键:

  • 地址
  • 城市
  • 状态
  • 邮政编码

您访问地址的代码是:

myGrid.DataKeys[row.RowIndex[0].ToString();
于 2014-05-02T22:26:28.617 回答
0

我看到Jakub Kaleta's answer这被认为是最好的解决方案。经过我的测试,似乎有问题,YOU SHOULD CLICK ON TEXT DATAGIDVIEW CELL VALUE 而且它不是一个很好的解决方案!
我用下面的解决方案来做,你可以点击单元格的每个地方!

 private void dataGridView_SelectionChanged(object sender, EventArgs e)
        {
            if (dataGridView.SelectedCells.Count > 0)
            {
                int selectedrowindex = dataGridView.SelectedCells[0].RowIndex;
                DataGridViewRow selectedRow = dataGridView.Rows[selectedrowindex];
                _RoleID = int.Parse(Convert.ToString(selectedRow.Cells[1].Value));
                _RoleName = Convert.ToString(selectedRow.Cells[2].Value);

            }
        }

它对我很有效;

于 2015-12-18T20:09:18.590 回答
0

您可以添加扩展名:

public static Int32 ToInt32(this object value)
    {
        try
        {
            return Convert.ToInt32(value);
        }
        catch (Exception)
        {
            return 0;
        }
    }

public static object Get(this DataGridViewRow row,string columnName)
    {
        foreach (DataGridViewCell item in row.Cells)
        {
            if (item.OwningColumn.DataPropertyName.Equals(columnName))
            {
                return item.Value;
            }
        }

        return null;
    }

并致电:

int id = gc.CurrentRow.Get("Id").ToInt32();
于 2019-09-28T13:26:40.307 回答