Lo stile di default per l'intestazione di riga dovrebbe già essere definiti quando si genera il DataGridView
. Quindi mi sento di usare:
if (/*I want to change this row */)
{
DataGridViewCellStyle rowStyle; // = Grid.RowHeadersDefaultCellStyle;
rowStyle = Grid.Rows[i].HeaderCell.Style;
rowStyle.BackColor = Color.Wheat;
Grid.Rows[i].HeaderCell.Style = rowStyle;
}
In questo modo si riempie la vostra rowStyle
con lo stile predefinito e quindi modificare solo la parte che si desidera modificare. Vedi se questo risolve il tuo problema.
// EDIT Come si desidera mantenere gli altri stili di Windows DataGridView predefinito, sarà inoltre necessario impostare altri parametri dello stile. Vedi this post.
Oppure prova questo. Quando initialiazing:
dataGridView1.CellPainting +=
new DataGridViewCellPaintingEventHandler (dataGridView_CellPainting);
quindi creare la funzione di gestore con qualcosa di simile:
void dataGridView_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
DataGridView dv = sender as DataGridView;
DataGridViewCellStyle rowStyle;// = dv.RowHeadersDefaultCellStyle;
if (e.ColumnIndex == -1)
{
e.PaintBackground(e.CellBounds, true);
e.Handled = true;
if (/*I want to change this row */)
{
rowStyle = dv.Rows[e.RowIndex].HeaderCell.Style;
rowStyle.BackColor = Color.Wheat;
dv.Rows[e.RowIndex].HeaderCell.Style = rowStyle;
using (Brush gridBrush = new SolidBrush(Color.Wheat))
{
using (Brush backColorBrush = new SolidBrush(e.CellStyle.BackColor))
{
using (Pen gridLinePen = new Pen(gridBrush))
{
// Clear cell
e.Graphics.FillRectangle(backColorBrush, e.CellBounds);
//Bottom line drawing
e.Graphics.DrawLine(gridLinePen, e.CellBounds.Left, e.CellBounds.Bottom - 1, e.CellBounds.Right, e.CellBounds.Bottom - 1);
// here you force paint of content
e.PaintContent(e.ClipBounds);
e.Handled = true;
}
}
}
}
}
}
Questo codice è basato su this post. Si avrebbe solo allora necessario creare condizioni più vernice per mouseover e stato selezionato. Ma questo dovrebbe funzionare per te.
Ricordare di rimuovere: Grid.EnableHeadersVisualStyles = false;
o forzarlo a: Grid.EnableHeadersVisualStyles = true;
.
Il problema è quando si gira Grid.EnableHeadersVisualStyles su false. Le intestazioni delle righe cambiano al colore, ma le intestazioni delle colonne sono piatte e non hanno l'aspetto di Grid.EnableHeadersVisualStyles su true. Ho provato la tua idea per le colonne (ottenendo e reimpostando lo stile) ma non funziona ... Pubblicherò foto di ciò di cui sto parlando – Tizz
Capisco meglio di cosa stai parlando ora, con le immagini. Hmm. Questo potrebbe non essere possibile. – CaptainBli
È possibile modificare una singola riga usando il gestore 'paint'. – CaptainBli