Как отменить выбор всех выбранных строк в элементе управления DataGridView? - PullRequest
55 голосов
/ 30 ноября 2010

Я хочу отменить выбор всех выбранных строк в элементе управления DataGridView, когда пользователь нажимает на пустую (не строку) часть элемента управления.
Как это сделать?

Ответы [ 6 ]

107 голосов
/ 30 ноября 2010

Чтобы отменить выбор всех строк и ячеек в DataGridView, вы можете использовать метод ClearSelection :

myDataGridView.ClearSelection()

Если вы не хотите, чтобы даже первая строка / ячейка отображалась выделенной, вы можете установить для свойства CurrentCell значение Nothing / null, что временно скрыть прямоугольник фокуса, пока элемент управления снова не получит фокус:

myDataGridView.CurrentCell = Nothing

Чтобы определить, когда пользователь нажал на пустую часть DataGridView, вам нужно обработать его событие MouseUp. В этом случае вы можете HitTest щелкнуть и наблюдать за этим, чтобы указать HitTestInfo.Nowhere. Например:

Private Sub myDataGridView_MouseUp(ByVal sender as Object, ByVal e as System.Windows.Forms.MouseEventArgs)
    ''# See if the left mouse button was clicked
    If e.Button = MouseButtons.Left Then
        ''# Check the HitTest information for this click location
        If myDataGridView.HitTest(e.X, e.Y) = DataGridView.HitTestInfo.Nowhere Then
            myDataGridView.ClearSelection()
            myDataGridView.CurrentCell = Nothing
        End If
    End If
End Sub

Конечно, вы также можете создать подкласс существующего элемента управления DataGridView, чтобы объединить все эти функции в единый пользовательский элемент управления. Вам нужно переопределить его OnMouseUp метод аналогично тому, как показано выше. Я также хотел бы предоставить для удобства открытый метод DeselectAll, который вызывает метод ClearSelection и устанавливает для свойства CurrentCell значение Nothing.

(Образцы кода все произвольно в VB.NET, потому что вопрос не указывает язык - извинения, если это не ваш родной диалект.)

6 голосов
/ 30 ноября 2010

Спасибо, Коди, вот c # для ссылки:

if (e.Button == System.Windows.Forms.MouseButtons.Left)
        {
            DataGridView.HitTestInfo hit = dgv_track.HitTest(e.X, e.Y);
            if (hit.Type == DataGridViewHitTestType.None)
            {
                dgv_track.ClearSelection();
                dgv_track.CurrentCell = null;
            }
        }
1 голос
/ 22 июля 2013

Я выяснил, почему моя первая строка была выбрана по умолчанию, и выяснил, как не выбирать ее по умолчанию.

По умолчанию мое представление данных было объектом с первой точкой табуляции в моей форме окна.Если сначала остановить табуляцию на другом объекте (может быть, отключение табуляции для сетки данных вообще будет работать), отключите выбор первой строки

1 голос
/ 30 ноября 2010

Установить

dgv.CurrentCell = null;

, когда пользователь нажимает на пустую часть dgv.

0 голосов
/ 14 декабря 2014

В VB.net использовать для Sub:

    Private Sub dgv_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles dgv.MouseUp
    ' deselezionare se click su vuoto
    If e.Button = MouseButtons.Left Then
        ' Check the HitTest information for this click location
        If Equals(dgv.HitTest(e.X, e.Y), DataGridView.HitTestInfo.Nowhere) Then
            dgv.ClearSelection()
            dgv.CurrentCell = Nothing
        End If
    End If
End Sub
0 голосов
/ 20 июля 2013

Я столкнулся с той же проблемой и нашел решение (не полностью сам, но есть Интернет)

Color blue  = ColorTranslator.FromHtml("#CCFFFF");
Color red = ColorTranslator.FromHtml("#FFCCFF");
Color letters = Color.Black;

foreach (DataGridViewRow r in datagridIncome.Rows)
{
    if (r.Cells[5].Value.ToString().Contains("1")) { 
        r.DefaultCellStyle.BackColor = blue;
        r.DefaultCellStyle.SelectionBackColor = blue;
        r.DefaultCellStyle.SelectionForeColor = letters;
    }
    else { 
        r.DefaultCellStyle.BackColor = red;
        r.DefaultCellStyle.SelectionBackColor = red;
        r.DefaultCellStyle.SelectionForeColor = letters;
    }
}

Это небольшой трюк, единственный способ увидеть строку, выбранную, - это самый первый столбец (не столбец [0], а один из них, следовательно). Когда вы щелкнете по другой строке, вы больше не увидите выделение синим цветом, только стрелка указывает, какая строка выбрана. Как вы понимаете, я использую rowSelection в моем gridview.

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