2010-04-29 2 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

Вам не нужно перебирать (Еогеасп) по всем строкам DataGrid, чтобы получить только первый SelectedRow. Цикл foreach - пустая трата времени здесь. –

ответ

23

DataGridView.MultiSelect = false и DataGridView.SelectionMode = FullRowSelect. Это позволит сделать так, чтобы пользователь мог выбирать только одну строку за раз.

+2

Мне пришлось использовать dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; – mack

1

SelectedRows возвращает строки только в том случае, если выбрана вся строка (вы можете включить RowSelect в datagridview, если хотите). Лучший вариант пойти с 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 вы захватить первое значение, если выбрано несколько строк.


Вы можете заблокировать пользователю выбрать только одну строку, установив MultiSelect свойство на DataGridView. В качестве альтернативы вы делаете CellClick событие выполнения:

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

вы можете также использовать .BoundItem

Смежные вопросы