programing

데이터 그리드 보기에서 셀 강조 표시 사용 안 함

topblog 2023. 7. 7. 18:28
반응형

데이터 그리드 보기에서 셀 강조 표시 사용 안 함

데이터 그리드 보기에서 셀 강조 표시를 비활성화하는 방법, 셀을 클릭해도 강조 표시가 발생하지 않아야 합니다.

아무 생각이나 하세요.

포어컬러/백컬러 슬러지는 제게 효과가 없었습니다. 왜냐하면 저는 다른 색의 세포를 가지고 있었기 때문입니다.그래서 저는 같은 자리에 있는 사람이라면 누구나 실제로 그 능력을 무력화시키는 것과 더 비슷한 해결책을 찾았습니다.

설정SelectionChanged실행 중인 메서드를 호출하는 이벤트ClearSelection

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

강조 표시를 "비활성화"할 수 있는 유일한 방법은 다음을 설정하는 것입니다.SelectionBackColor그리고SelectionForeColor에서DefaultCellStyle마찬가지로BackColor그리고.ForeColor,각각 다음과 같다.양식에서 프로그래밍 방식으로 이 작업을 수행할 수 있습니다.Load이벤트, 하지만 저도 디자이너에서 해봤어요.

이와 같은 것:

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

데이터 그리드 보기 선택을 선택할 수 없도록 만드는 방법을 찾기 위해 빠른 웹 검색을 수행하여 이(웹 페이지) 히트를 기록했습니다.

SelectionChanged에서 ClearSelection을 호출하면 SelectionChanged 이벤트가 이중으로 발생할 수 있으며 최소한 발생합니다.

첫 번째 이벤트는 셀/행이 선택되고 당연히 SelectionChanged 이벤트가 실행되는 경우입니다.두 번째 실행은 ClearSelection이 호출될 때(논리적으로!) 데이터 그리드 보기의 선택이 (다시) 변경되어(선택 없음으로) 실행되는 경우입니다.

저처럼 단순한 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;
}

vb로 말하기:

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

이벤트를 다시 재생할 필요 없이 다른 색상의 셀을 처리하는 가장 빠른 방법은 다음과 같은 작업을 수행하는 것입니다.

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

}
다중 선택을 허용하는 경우 반복기를 삽입해야 합니다.

(편집)

사실, 이것은 데이터 수집을 위해 제 시간에 수행되어야 합니다.on selection 변경된 방법에서는 작동하지 않는 것 같습니다.따라서 데이터를 표에 채운 후 셀을 통해 반복하고 셀의 선택된 배경을 일반 배경과 일치하도록 변경해야 합니다.다음과 같은 것입니다( 구문이 조금 이상할 수 있습니다, 제 vb 코드에서 변환하고 있습니다).

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

셀을 클릭할 때 두 번째 열에서만 셀 배경색을 변경하고 싶기 때문에 이것도 작동합니다.

        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
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
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

제가 지금까지 본 답들은 제가 찾고 있는 것을 정확히 알려주지는 않았지만, 올바른 방향을 제시해 주었습니다.제 경우, 데이터 소스에 바인딩한 후 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를 사용하고 있기 때문입니다.

<DataGrid ItemsSource="{Binding Credits}" x:Name="Grid"
                          HorizontalAlignment="Left" RowBackground="Transparent">

언급URL : https://stackoverflow.com/questions/1745272/disable-cell-highlighting-in-a-datagridview

반응형