DataGridView захватывает выбор строки пользователя - PullRequest
11 голосов
/ 22 июня 2009

У меня проблемы с обработкой выборок в DataGridView. Мой вид сетки содержит столбец суммы. В форме есть текстовое поле, которое должно отображать общее количество выбранных строк сетки. Следовательно, мне нужно захватывать события, когда пользователь выбирает / отменяет выбор строк сетки и рассчитывать (складывать / вычитать) сумму соответственно. Я нашел два способа сделать это:

  1. Использование событий RowEnter и RowLeave. Они прекрасно работают, когда пользователь выбирает / отменяет выбор одной строки. Однако, когда пользователь выбирает несколько строк за один раз, событие вызывается только для последней строки. Следовательно, из моей общей суммы добавляется / вычитается только сумма в последнем ряду. Таким образом, делая мой результат ошибочным.

  2. Использование события RowStateChanged. Это работает для нескольких строк. Тем не менее, событие получает срабатывание, если пользователь прокручивает сетку данных.

Кто-нибудь обрабатывал такой сценарий. Я хотел бы знать, какое событие сетки данных мне следует использовать, чтобы мой код выполнялся только тогда, когда пользователь выбирает / отменяет выбор строк, включая несколько строк.

Ответы [ 6 ]

21 голосов
/ 22 июня 2009

Нашел решение. Я могу использовать RowStateChanged и запускать свой код, только если StateChanged для строки Selected ...

private void dgridv_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e)
{
    // For any other operation except, StateChanged, do nothing
    if (e.StateChanged != DataGridViewElementStates.Selected) return;

    // Calculate amount code goes here
}
5 голосов
/ 23 ноября 2015

Я использую SelectionChanged событие или CellValueChanged событие:

        dtGrid.SelectionChanged += DataGridView_SelectionChanged;
        this.dtGrid.DataSource = GetListOfEntities;
        dtGrid.CellValueChanged += DataGridView_CellValueChanged;


    private void DataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
    {
        DataGridViewRow row = dtGrid.Rows[e.RowIndex];
        SetRowProperties(row);
    }

    private void DataGridView_SelectionChanged(object sender, EventArgs e)
    {
        var rowsCount = dtGrid.SelectedRows.Count;
        if (rowsCount == 0 || rowsCount > 1) return;

        var row = dtGrid.SelectedRows[0];
        if (row == null) return; 
        ResolveActionsForRow(row);
    }
3 голосов
/ 06 марта 2013

Я думаю, вы можете рассмотреть событие SelectionChanged:

private void DataGridView1_SelectionChanged(object sender, EventArgs e) {
  textbox1.Text = DataGridView1.SelectedRows.Count.ToString();
}
2 голосов
/ 27 июля 2012

Вы можете просто захватить это следующим образом, но это ограничено только выбором одной строки:

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
    MessageBox.Show("Selected row is=" + e.RowIndex);
    //  you can perform (any operation) delete action on selected row like

    dataGridView1.Rows.RemoveAt(e.RowIndex);
    dataGridView1.Refresh();
}
0 голосов
/ 26 июня 2018

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

    private void dataGridView1_SelectionChanged(object sender, EventArgs e)
    {
        if (dataGridView1.SelectedCells.Count > 0)
            Do_Something_With_It(dataGridView1.SelectedCells[0].RowIndex);
    }
0 голосов
/ 22 июня 2009

Вы можете использовать свой первый метод (строка ввода строки, оставить) вместе со свойством SelectedRows . Это означает, что когда вы обнаруживаете эти события и вам нужно вычислить, вместо того, чтобы использовать строку из аргументов события, переберите SelectedRows и получите ваш итог.

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