C #: выберите строку из DataGridView - PullRequest
6 голосов
/ 30 апреля 2010

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

Ответы [ 6 ]

23 голосов
/ 30 апреля 2010

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

1 голос
/ 30 апреля 2010

Вы можете ссылаться на сетку, похожую на массив:

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

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


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

ProductsGrid.ClearSelection();
ProductsGrid.Rows[e.RowIndex].Selected = true;
1 голос
/ 30 апреля 2010

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

Должно быть установлено свойство SelectionMode в FullRowSelect или RowHeaderSelect для свойства SelectedRows быть заполняется выбранными строками.

(от MSDN )

1 голос
/ 30 апреля 2010

SelectedRows возвращает строки, только если выбрана вся строка (вы можете включить 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();
}
0 голосов
/ 30 апреля 2010

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

0 голосов
/ 30 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...