2013-07-16 8 views
5

ich nur die Hintergrundfarbe von bestimmten Zeilenköpfen will die kühlen Standard-Windows-Stile, ohne zu verlieren zu ändern, die mit Datagridview kommen:ändern RowHeader Hintergrundfarbe auf Datagridview ohne Standard-Styles zu verlieren

Grid.EnableHeadersVisualStyles = false; 
for(int i=0; i<Grid.Rows.Count; i++) 
{ 
    if (/*I want to change this row */) 
    { 
     DataGridViewCellStyle rowStyle = Grid.RowHeadersDefaultCellStyle; 
     rowStyle.BackColor = Color.Wheat; 
     Grid.Rows[i].HeaderCell.Style = rowStyle; 
    } 
} 

Sobald ich dies tun Ich verliere den blauen MouseOver-Effekt für die Spalten, und der Sortierpfeil in den Spalten ist grau. Ich habe versucht, die Spaltenüberschriften auf den StandardColHeaderStyle ohne Erfolg zu setzen. Der Zeilenkopf ändert sich in die gewünschte Farbe, die Spaltenüberschriften verlieren ihren glatten Windows-Stil. Irgendeine Hilfe?

Grid.EnableHeadersVisualStyles = true

Grid.EnableHeadersVisualStyles = false

Antwort

5

Der Standardstil für den Zeilenkopf bereits festgelegt werden sollten, wenn Sie Ihre DataGridView bauen. So würde ich verwenden:

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

So können Sie Ihre rowStyle mit dem vordefinierten Stil füllen und dann nur den Teil, den Sie ändern möchten ändern. Sehen Sie, ob dies Ihr Problem löst.

// BEARBEITEN Da Sie die anderen Stylings des Standard-Windows DataGridView beibehalten möchten, müssten Sie auch mehr der anderen Parameter des Stils festlegen. Siehe this post.

Oder versuchen Sie es. Wenn initialiazing:

 dataGridView1.CellPainting += 
    new DataGridViewCellPaintingEventHandler (dataGridView_CellPainting); 

dann wie die Handler-Funktion mit etwas schaffen:

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

wurde auf this post. Dieser Code basiert Sie würden nur dann brauchen, um mehr Farbe Bedingungen für Mouseover- und ausgewählten Zustand zu erstellen. Aber das sollte für Sie funktionieren.

Vergessen Sie nicht, zu entfernen: Grid.EnableHeadersVisualStyles = false; oder erzwingen Sie es: Grid.EnableHeadersVisualStyles = true;.

+0

Das Problem besteht darin, Grid.EnableHeadersVisualStyles auf false zu setzen. Die Zeilenköpfe ändern sich in die Farbe, aber die Spaltenüberschriften sind flach und sehen nicht so aus wie bei Grid.EnableHeadersVisualStyles auf true. Ich habe versucht, Ihre Idee für die Spalten (Holen und Zurücksetzen des Stils), aber es funktioniert nicht ... Ich werde Bilder von dem, was ich spreche – Tizz

+0

Ich verstehe besser, was Sie sprechen jetzt mit den Bildern. Hmm. Dies ist möglicherweise nicht möglich. – CaptainBli

+0

Sie können eine einzelne Zeile mit dem 'paint'-Handler ändern. – CaptainBli

Verwandte Themen