Come disabilitare l'evidenziazione della cella in una vista datagrid, L'evidenziazione non dovrebbe verificarsi anche se faccio clic sulla cella.Evidenziazione Evidenziazione cella in una vista datagrid
Ogni pensiero piacimento
Come disabilitare l'evidenziazione della cella in una vista datagrid, L'evidenziazione non dovrebbe verificarsi anche se faccio clic sulla cella.Evidenziazione Evidenziazione cella in una vista datagrid
Ogni pensiero piacimento
L'unico modo che ho trovato per l'evidenziazione "disable" è quello di impostare la SelectionBackColor
e la SelectionForeColor
nel DefaultCellStyle
per lo stesso del BackColor
e ForeColor
, rispettivamente. Probabilmente potresti farlo a livello di codice sull'evento Load
del modulo, ma l'ho fatto anche nel designer.
Qualcosa di simile a questo:
Me.DataGridView1.DefaultCellStyle.SelectionBackColor = Me.DataGridView1.DefaultCellStyle.BackColor
Me.DataGridView1.DefaultCellStyle.SelectionForeColor = Me.DataGridView1.DefaultCellStyle.ForeColor
Il ForeColor/BackColor kludge non funzionava per me, perché avevo le cellule di diversi colori. Quindi, per chiunque si trovi nello stesso punto, ho trovato una soluzione più simile alla disabilitazione effettiva dell'abilità.
impostare l'evento SelectionChanged
di chiamare un metodo che corre ClearSelection
private void datagridview_SelectionChanged(object sender, EventArgs e)
{
this.datagridview.ClearSelection();
}
La domanda è [tag: vb.net] – Lankymart
Piccole modifiche necessarie per vb.net ma questo funziona bene. Grazie. Non capisco perché non ci sia una semplice proprietà da accendere o spegnere sul controllo. –
Mi aspetto che "ClearSelection()" firmi di nuovo l'evento "SelectionChanged". ..... ma non è così. Strano. – boboes
fatto una rapida ricerca sul web per scoprire come fare una selezione datagridview non selezionabile & ottenuto questo (pagina web) colpo.
La chiamata a ClearSelection su SelectionChanged può provocare un doppio incendio dell'evento SelectionChanged, come minimo.
Il primo evento è quando viene selezionata la cella/riga e, ovviamente, viene attivato l'evento SelectionChanged. La seconda attivazione avviene quando ClearSelection viene chiamato in quanto causa (e logicamente!) La selezione della vista datagrid a (di nuovo) modificata (in nessuna selezione), attivando quindi SelectionChanged.
Se si dispone di più codice rispetto alla semplice ClearSelection in corso, come tale io, si desidera sopprimere questo evento fino a dopo aver terminato il codice. Ecco un esempio:
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;
}
Il modo più rapido per fare questo per gestire le cellule con colori diversi, senza la necessità di refire eventi, sarebbe quello di fare qualcosa di simile:
private void dgvMyControl_SelectionChanged(object sender, EventArgs e)
{
dgvMyControl.SelectedCells(0).Style.DefaultCellStyle.SelectionBackColor = dgvMyControl.SelectedCells(0).Style.DefaultCellStyle.BackColor
}
(EDIT)
in realtà, questo deve essere fatto in tempo per la popolazione di dati. non sembra funzionare nel metodo di selezione on modificato. Quindi, dopo aver inserito i dati nella tabella, è necessario scorrere le celle e modificare lo sfondo selezionato in modo che corrisponda allo sfondo normale.Qualcosa di simile a questo (sintassi può essere un po 'fuori, sto convertendolo da mio codice vb):
foreach (datarow r in dgv.rows)
{
foreach (datacell c in r.cells)
{
c.Style.SelectionBackColor = c.Style.BackColor
}
}
Nei guai e questo funziona anche, come ho solo voglia di cambiare il colore di sfondo della cella nella 2a colonna quando una cellula viene fatto clic:
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
Questo è tutto. Ma se si vuole ancora ottenere fila cliccato/indice cella oa valori di accesso:
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
in VB parlare:
Private Sub datagridview1_SelectionChanged(sender As Object, e As EventArgs) Handles datagridview1.SelectionChanged
datagridview1.ClearSelection()
End Sub
Questo non funziona se alcune cellule sono in diversi colori di default allora backcolor . – Jovica
Se si esegue il loop delle righe, impostando i colori, è possibile anche impostare i colori di selezione nello stesso ciclo. Quindi funziona bene. Più in generale, è possibile impostare i colori di selezione ogni volta che si impostano i colori normali. – clweeks