我使用我从实体框架获得的列表在DataGridView
中显示一些数据。在此网格中,我将一些数据库列(如id
设置为不可见。
当用户点击gridview时,我需要知道哪个对象被点击了进一步的步骤,问题我无法通过id
列获得:
datagridview1.CurrentRow.Cells[0].Value // here I get only visible cells
也不是:
datagridview1.CurrentRow.DataBoundItem
似乎通过将某些列设置为不可见,附加的对象具有匿名类型
有什么想法吗?
谢谢
答案 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();