2009-06-26 6 views
4

Wie kann ich den "Auswahlstil" auf einem DataGridView (winforms) ändern?DataGridView ausgewählten Zellenstil

+0

klärte meine Frage. Ich meinte: Ändern Sie die _whole_ sieht (Stil, Hintergrund enthalten) einer Zelle, die ausgewählt ist, _wenn_ es ausgewählt ist. Es hat keinen Sinn, den Stil zu ändern, wenn Sie die visuelle Veränderung nie sehen. Es tut mir sehr leid für das Missverständnis :-(. Mein armes Englisch schlägt wieder. Entschuldigung) -: –

Antwort

5

Sie können leicht die forecolor und Hintergrundfarbe von selcted Zellen ändern, indem Sie Werte in die SelectedBackColor und SelectedForeColor der Grid Default Zuordnung .

Wenn Sie weiter tun müssen, Styling, Sie brauchen, um das Selection Ereignis behandeln

Edit: (anderer Beispielcode Fehler hatte, mehrere ausgewählten Zellen Einstellung für [wie in FullRowSelect])

using System.Drawing.Font; 

private void dataGridView_SelectionChanged(object sender, EventArgs e) 
     { 

      foreach(DataGridViewCell cell in ((DataGridView)sender).SelectedCells) 
     { 
      cell.Style = new DataGridViewCellStyle() 
      { 
       BackColor = Color.White, 
       Font = new Font("Tahoma", 8F), 
       ForeColor = SystemColors.WindowText, 
       SelectionBackColor = Color.Red, 
       SelectionForeColor = SystemColors.HighlightText 
      }; 
     } 
     } 
+0

SelectedBackColor, SelectedForeColor OK. Es scheint, dass es keine Möglichkeit gibt, unterschiedliche Farben für unterschiedliche Zellen zu setzen. :-( –

+0

SelectedBackColor und SelectedForeColor, wenn sie für die DefaultCellStyle -Eigenschaft verwendet werden, gelten die gleichen Farben für jede ausgewählte Zelle. Wenn Sie einen Stil für verschiedene Zellen festlegen möchten, ist die Antwort noch das SelectionChanged-Ereignis und einige bedingte Zuweisung basierend auf der Zeile oder der Spalte der ausgewählten Zelle – Luis

+0

Danke !!!! genau das, was ich gesucht habe ... Es ist eine Schande, ich kann noch nicht stimmen !!! –

1

Verwenden Sie die SelectedCells property der GridView und die Style property der DataGridViewCell.

+0

nicht gut. Getestet mit einem Datagridview auf leeres Formular mit diesem Code (ändert nur die erste ausgewählte Zelle): private void dataGridView1_SelectionChanged (object sender, EventArgse) { dataGridView1.SelectedCells [0] = .Style.BackColor Color.Beige; } Der Stil ist nur sichtbar, nachdem die Auswahl in eine andere Zelle geändert wurde. –

1

Behandeln Sie das Selection Ereignis auf Ihrem Datagridview und fügen Sie Code, der etwa wie folgt aussieht:

private void dataGridView1_SelectionChanged(object sender, EventArgs e) 
    { 
     foreach (DataGridViewRow row in this.dataGridView1.Rows) 
     { 
      foreach (DataGridViewCell c in row.Cells) 
      { 
       c.Style = this.dataGridView1.DefaultCellStyle; 
      } 
     } 


     DataGridViewCellStyle style = new DataGridViewCellStyle(); 
     style.BackColor = Color.Red; 
     style.Font = new Font("Courier New", 14.4f, FontStyle.Bold); 
     foreach (DataGridViewCell cell in this.dataGridView1.SelectedCells) 
     { 
      cell.Style = style; 
     } 
    } 
+0

Getestet. Unvollständig. Der Hintergrund wird nicht angewendet, während die Schriftart ist. Weird –

+1

Der Hintergrund IS gilt, aber die Farbe der "Auswahl" überschreibt es. Wenn Sie zum Bearbeiten in die Zelle doppelklicken, sehen Sie die Hintergrundfarbe. – BFree

0

Sie können die Lösung versuchen, die in diesem topic bereitgestellt wird. Ich habe es getestet und genehmigt.

Hoffnung, die geholfen hat.

0

Mit diesem können Sie sogar einen farbigen Rahmen zu den ausgewählten Zellen zeichnen.

private void dataGridView_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) 
{ 
    if (e.RowIndex >= 0 && e.ColumnIndex >= 0) 
    { 
     if (dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Selected == true) 
     { 
      e.Paint(e.CellBounds, DataGridViewPaintParts.All & ~DataGridViewPaintParts.Border); 
      using (Pen p = new Pen(Color.Red, 1)) 
      { 
       Rectangle rect = e.CellBounds; 
       rect.Width -= 2; 
       rect.Height -= 2; 
       e.Graphics.DrawRectangle(p, rect); 
      } 
      e.Handled = true; 
     } 
    } 
} 
Verwandte Themen