it-swarm-ja.tech

データグリッドビューでセルの強調表示を無効にする

データグリッドビューでセルの強調表示を無効にする方法、セルをクリックしても強調表示は発生しません。

何か考えてください

41
Ramji

強調表示を「無効にする」ことがわかった唯一の方法は、SelectionBackColorSelectionForeColorDefaultCellStyleBackColorと同じに設定することです。それぞれForeColor。フォームのLoadイベントでおそらくプログラムでこれを実行できますが、デザイナーでも実行しました。

このようなもの:

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

ForeColor/BackColorクラッジは、私にとってはうまくいきませんでした。異なる色のセルがあったからです。そのため、同じ場所にいる人なら誰でも、実際に機能を無効にすることに似た解決策を見つけました。

SelectionChangedイベントを設定して、ClearSelectionを実行するメソッドを呼び出します

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

Datagridviewの選択を選択不可にし、この(Webページ)ヒットを取得する方法を見つけるために、簡単なWeb検索を行いました。

SelectionChangedでClearSelectionを呼び出すと、少なくともSelectionChangedイベントが二重に発生する可能性があります。

最初のイベントは、セル/行が選択され、もちろんSelectionChangedイベントが発生したときです。 2回目の起動は、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;
}
5
KCromm

vBで話す:

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

イベントをリファイアする必要なく、異なる色のセルを処理する最も簡単な方法は、次のようなことです。

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

}
複数の選択を許可する場合は、イテレータを配置する必要があります

(編集)

実際には、これはデータの投入時に行う必要があります。 on selection changedメソッドでは機能しないようです。そのため、テーブルにデータを入力した後、セルを反復処理し、選択した背景を通常の背景に一致するように変更する必要があります。次のようなものです(構文は少しずれている可能性があります。VBコードから変換しています)。

foreach (datarow r in dgv.rows)
{
  foreach (datacell c in r.cells)
  {
     c.Style.SelectionBackColor = c.Style.BackColor
  }
}
2
LairdPleng
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
1
LowLevel

セルがクリックされたときに2列目のセルの背景色のみを変更したいので、混乱してこれも機能します:

        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
1
Data
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
0
DrSerhat