Подтвердить что ты не робот

Отключить выделение ячеек в datagridview

Как отключить выделение ячеек в datagridview, Выделение не должно происходить, даже если я нажимаю на ячейку.

Любые мысли, пожалуйста,

4b9b3361

Ответ 1

Единственный способ, которым я нашел выделение "отключить", - установить SelectionBackColor и SelectionForeColor в DefaultCellStyle так же, как и BackColor и ForeColor, соответственно. Возможно, вы могли бы сделать это программно в событии формы Load, но я также сделал это в дизайнере.

Что-то вроде этого:

Me.DataGridView1.DefaultCellStyle.SelectionBackColor = Me.DataGridView1.DefaultCellStyle.BackColor
Me.DataGridView1.DefaultCellStyle.SelectionForeColor = Me.DataGridView1.DefaultCellStyle.ForeColor

Ответ 2

Ключ ForeColor/BackColor не работал у меня, потому что у меня были ячейки разных цветов. Поэтому для тех, кто находится в одном и том же месте, я нашел решение, более похожее на фактическое отключение этой возможности.

Задайте событие SelectionChanged для вызова метода, который запускает ClearSelection

private void datagridview_SelectionChanged(object sender, EventArgs e)
{
    this.datagridview.ClearSelection();
}

Ответ 3

Был ли быстрый поиск в Интернете, чтобы узнать, как сделать выбор datagridview неизменным и получить эту (веб-страницу).

Вызов ClearSelection на SelectionChanged может и вызывает двойное срабатывание события SelectionChanged, как минимум.

Первое событие - это когда выбрана ячейка/строка и, конечно, вызывается событие SelectionChanged. Вторая стрельба - это когда ClearSelection вызывается по мере того, как он вызывает (и логически так!) Выбор datagridview для (снова) изменен (без выбора), тем самым загоняя SelectionChanged.

Если у вас больше кода, чем просто очистка ClearSelection, как таковая, я хочу, чтобы вы подавили это событие, пока ваш код не будет выполнен. Вот пример:

 private void dgvMyControl_SelectionChanged(object sender, EventArgs e)
{
  //suppresss the SelectionChanged event
  this.dgvMyControl.SelectionChanged -= dgvMyControl_SelectionChanged;

  //grab the selectedIndex, if needed, for use in your custom code
  // do your custom code here

  // finally, clear the selection & resume (reenable) the SelectionChanged event 
  this.dgvMyControl.ClearSelection();
  this.dgvMyControl.SelectionChanged += dgvMyControl_SelectionChanged;
}

Ответ 4

в VB говорят:

Private Sub datagridview1_SelectionChanged(sender As Object, e As EventArgs) Handles datagridview1.SelectionChanged
        datagridview1.ClearSelection()
End Sub

Ответ 5

Самый быстрый способ сделать это для обработки ячеек с разными цветами, не требуя повторения каких-либо событий, - это сделать что-то вроде этого: Дел >

private void dgvMyControl_SelectionChanged(object sender, EventArgs e)
{
    dgvMyControl.SelectedCells(0).Style.DefaultCellStyle.SelectionBackColor = dgvMyControl.SelectedCells(0).Style.DefaultCellStyle.BackColor

}
Вам нужно будет поставить итератор, если вы разрешите несколько выборов Дел >

(РЕДАКТИРОВАТЬ)

на самом деле, это необходимо сделать в момент сбора данных. он, похоже, не работает в измененном методе выбора. Поэтому, после заполнения данных в таблице, вам необходимо выполнить итерацию по ячейкам и изменить выбранный фон в соответствии с их нормальным фоном. Что-то вроде этого (синтаксис может быть немного выключен, я конвертирую его из своего кода vb):

foreach (datarow r in dgv.rows)
{
  foreach (datacell c in r.cells)
  {
     c.Style.SelectionBackColor = c.Style.BackColor
  }
}

Ответ 6

Беседа, и это также работает, так как я хочу изменить цвет фона ячейки во втором столбце при нажатии на ячейку:

        Private Sub DataGridView1_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellClick

    Dim row As Integer = DataGridView1.CurrentCellAddress.Y
    Dim column As Integer = DataGridView1.CurrentCellAddress.X

    If column = 1 Then
        Me.DataGridView1.CurrentCell.Selected = False
        DataGridView1.Item(column, row).Style.BackColor = SelectColour()
    End If

End Sub

Ответ 7

Private Sub DataGridView1_SelectionChanged(sender As Object, e As System.EventArgs) Handles DataGridView1.SelectionChanged
    Me.DataGridView1.ClearSelection()
End Sub

Что это. Но если вы все еще хотите получить щелчок индекса строки/ячейки или для доступа к значениям:

Private Sub DataGridView1_MouseDown(sender As Object, e As System.Windows.Forms.MouseEventArgs) Handles DataGridView1.MouseDown
    Dim _ht As DataGridView.HitTestInfo = Me.DataGridView1.HitTest(e.X, e.Y)
    If _ht.Type = DataGridViewHitTestType.Cell Then
        Me.DataGridView1.Rows(_ht.RowIndex).Cells(_ht.ColumnIndex).Value = _
        "RowIndex = " & _ht.RowIndex & ", " & "ColumnIndex = " & _ht.ColumnIndex
    End If
End Sub

Ответ 8

Private Sub DGW2_DataBindingComplete(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewBindingCompleteEventArgs) Handles DGW2.DataBindingComplete
    Dim mygrid As DataGridView
    mygrid = CType(sender, DataGridView)
    mygrid.ClearSelection()
End Sub

Ответ 9

Ответы, которые я видел до сих пор, не дали мне именно то, что я искал, но они показали мне правильное направление. В моем случае после привязки к источнику данных DGV выбрал и выделил одну ячейку, которая мне не нужна. Я хотел выделить только в том случае, если пользователь выбрал полную строку.

Через некоторое время я нашел следующее решение, которое мне подходит:

private void datagridview_SelectionChanged(object sender, EventArgs e)
{       
    var dgv = (DataGridView)sender;
    if (dgv.SelectedCells.Count == 1)
    {   // hide selection for the single cell
        dgv.DefaultCellStyle.SelectionBackColor = dgv.DefaultCellStyle.BackColor;
        dgv.DefaultCellStyle.SelectionForeColor = dgv.DefaultCellStyle.ForeColor;
    }
    else
    {   // show the selected cells
        dgv.DefaultCellStyle.SelectionBackColor = dgv.RowsDefaultCellStyle.SelectionBackColor;
        dgv.DefaultCellStyle.SelectionForeColor = dgv.RowsDefaultCellStyle.SelectionForeColor;
    };
}

Примечание. В моем примере я установил свойства

.

MultiSelect = false, ReadOnly = true

потому что я использую DGV только для отображения результатов поиска.