我有一个带有DataGridView(3列)和Button的表单。每次用户点击按钮时,我都希望获取存储在该行第1列中的值。
这是我的代码:
private void myButton_Click(object sender, EventArgs e)
{
foreach (DataGridViewRow row in ProductsGrid.Rows)
{
if (this.ProductsGrid.SelectedRows.Count == 1)
{
// get information of 1st column from the row
string value = this.ProductsGrid.SelectedRows[0].Cells[0].ToString();
}
}
}
但是,当我点击myButton时,this.ProductsGrid.SelectedRows.Count为0.另外,我如何确保用户只选择一行而不是多行? 这段代码看起来不错吗?
答案 0 :(得分:23)
设置DataGridView.MultiSelect = false和DataGridView.SelectionMode = FullRowSelect。这样就可以让用户一次只能选择一行。
答案 1 :(得分:1)
如果选择整行,SelectedRows仅返回行(如果需要,可以在datagridview上打开RowSelect)。更好的选择是使用SelectedCells
private void myButton_Click(object sender, EventArgs e)
{
var cell = this.ProductsGrid.SelectedCells[0];
var row = this.ProductsGrid.Rows[cell.RowIndex];
string value = row.Cells[0].Value.ToString();
}
答案 2 :(得分:1)
好吧,您不需要遍历网格中的所有行并访问SelectedRows的集合。如果你跳过iteratating并使用SelectedRows集合,那么你的问题可能是一个不正确的SelectionMode:
必须设置SelectionMode属性 到FullRowSelect或RowHeaderSelect 对于SelectedRows属性 填充选定的行。
(来自MSDN)
答案 3 :(得分:1)
您可以引用类似于数组的网格:
ProductsGrid[ProductsGrid.SelectedColumns[0].Index, ProductsGrid.SelectedRows[0].Index].Value;
通过从SelectedRowsCollection和SelectedColumnsCollection的第一个索引中选择索引,如果选择了多行,您将获取第一个值。
通过在DataGridView上设置MultiSelect
属性,可以锁定用户只选择一行。或者,您可以执行CellClick
事件:
ProductsGrid.ClearSelection();
ProductsGrid.Rows[e.RowIndex].Selected = true;
答案 4 :(得分:0)
SelectedRows.Count
返回当前选中的整行数。您可能想要使用SelectedCells.Count
。
答案 5 :(得分:0)
您也可以使用.BoundItem