У меня есть форма с DataGridView (3 столбцов) и Кнопка. Каждый раз, когда пользователь нажимает на кнопку, я хочу получение значений, сохраненных в 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, это. ProductsGrid. SelectedRows. Количество 0. Кроме того, как я удостоверяюсь, что пользователь выбирает только одну строку и не несколько строк? Этот код выглядит правильным?
Установите DataGridView.MultiSelect=false и DataGridView.SelectionMode = FullRowSelect. Это сделает так, что пользователь сможет выбрать только один ряд за один раз.
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();
}
Что ж, вам не нужно одновременно перебирать все строки в вашей сетке и получать доступ к коллекции SelectedRows. Если вы пропустите повторение и используете коллекцию SelectedRows, то ваша проблема, вероятно, заключается в неправильном SelectionMode:
Для свойства SelectionMode необходимо установить значение FullRowSelect или RowHeaderSelect , чтобы свойство SelectedRows было {{ 1}} заполняется выбранными строками.
(из MSDN )
SelectedRows.Count
возвращает количество целых строк, выбранных в данный момент. Вероятно, вы захотите использовать SelectedCells.Count
.
Вы можете ссылаться на сетку подобно массиву:
ProductsGrid[ProductsGrid.SelectedColumns[0].Index, ProductsGrid.SelectedRows[0].Index].Value;
Выбирая индексы из первого индекса коллекции SelectedRowsCollection и SelectedColumnsCollection, вы будете захватывать первое значение, если выбрано несколько строк.
Вы можете запретить пользователю выбирать только один ряд, установив свойство MultiSelect
на DataGridView. В качестве альтернативы вы заставите событие CellClick
выполняться:
ProductsGrid.ClearSelection();
ProductsGrid.Rows[e.RowIndex].Selected = true;