访问Datagridview中的不可见列(WinForms)

时间:2012-06-26 06:42:30

标签: c# winforms visual-studio-2010 .net-4.0 datagridview

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

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

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

也不是:

datagridview1.CurrentRow.DataBoundItem 

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

有什么想法吗?

谢谢

5 个答案:

答案 0 :(得分:4)

我刚试过这个:

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

它有效。

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

答案 1 :(得分:2)

对我而言,它可以采用 columnName 而非索引

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

datagridview1.CurrentRow.Cells["id"].Value

答案 2 :(得分:0)

你可以使用我们的数据键。

列出隐藏字段的数据键。

然后使用以下代码访问值。

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

例如。让我们说你的网格名为myGrid。

您已设置以下数据键:

  • 地址
  • 城市
  • 国家
  • 邮政编码

访问地址的代码是:

myGrid.DataKeys[row.RowIndex[0].ToString();

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

            }
        }

它非常适合我;

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