2010-04-29 152 views
6

我有一个DataGridView(3列)和一个按钮的窗体。每次用户点击一个按钮时,我都希望获取存储在该行第一列中的值。C#:从DataGridView中选择行

这里是我的代码:

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。另,我怎么确保用户只选择一个行不是多行? 此代码是否正确?

+1

你并不需要遍历(的foreach)在DataGrid的所有行只得到第一个SelectedRow。 foreach循环在这里浪费时间。 – 2010-04-29 22:11:30

回答

1

如果选择整行(如果需要,可以在datagridview上打开RowSelect),SelectedRows仅返回行。更好的选择是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(); 
} 
1

去好了,你不需要两个遍历所有列在您的网格和访问SelectedRows的集合。如果跳过iteratating并使用SelectedRows集合,然后你的问题可能是一个不正确的SelectionMode:

SelectionMode属性必须设置 到FullRowSelect或RowHeaderSelect 为SelectedRows属性被 填入所选行。

(从MSDN

0

SelectedRows.Count返回当前选定整个的行数。您可能想要使用SelectedCells.Count

1

您可以参考类似数组电网:

ProductsGrid[ProductsGrid.SelectedColumns[0].Index, ProductsGrid.SelectedRows[0].Index].Value; 

通过从SelectedRowsCollection和SelectedColumnsCollection如果同时选择多行,你会抓住的第一个值的第一指标选择指标。


您可以将用户锁定到通过设置在DataGridView的MultiSelect属性选择只有一行。或者您做出CellClick事件进行:

ProductsGrid.ClearSelection(); 
ProductsGrid.Rows[e.RowIndex].Selected = true; 
0

,你也可以使用.BoundItem