C#:从DataGridView中选择行

时间:2010-04-29 22:01:41

标签: c# winforms datagridview

我有一个带有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.另外,我如何确保用户只选择一行而不是多行? 这段代码看起来不错吗?

6 个答案:

答案 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