C#: Выберите строку из DataGridView

У меня есть форма с 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. Кроме того, как я удостоверяюсь, что пользователь выбирает только одну строку и не несколько строк? Этот код выглядит правильным?

6
задан Guillermo Gutiérrez 2 June 2013 в 21:19
поделиться

6 ответов

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

23
ответ дан 8 December 2019 в 04:07
поделиться

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
ответ дан 8 December 2019 в 04:07
поделиться

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

0
ответ дан 8 December 2019 в 04:07
поделиться

Что ж, вам не нужно одновременно перебирать все строки в вашей сетке и получать доступ к коллекции SelectedRows. Если вы пропустите повторение и используете коллекцию SelectedRows, то ваша проблема, вероятно, заключается в неправильном SelectionMode:

Для свойства SelectionMode необходимо установить значение FullRowSelect или RowHeaderSelect , чтобы свойство SelectedRows было {{ 1}} заполняется выбранными строками.

(из MSDN )

1
ответ дан 8 December 2019 в 04:07
поделиться

SelectedRows.Count возвращает количество целых строк, выбранных в данный момент. Вероятно, вы захотите использовать SelectedCells.Count .

0
ответ дан 8 December 2019 в 04:07
поделиться

Вы можете ссылаться на сетку подобно массиву:

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

Выбирая индексы из первого индекса коллекции SelectedRowsCollection и SelectedColumnsCollection, вы будете захватывать первое значение, если выбрано несколько строк.


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

ProductsGrid.ClearSelection();
ProductsGrid.Rows[e.RowIndex].Selected = true;
1
ответ дан 8 December 2019 в 04:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: