Autor Beitrag
DJHousemeister
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 01.08.13 00:09 
Hallo Zusammen.
Zu meinem Problem gibt es zwar schon jede Menge Stoff zum googeln, aber bisher konnte mir leider nichts weiterhelfen.
Ihr hingegen aber schon!

Ich hab in meiner c# Anwendung in VisualStudio 2010 ein DataGridView angelegt. Wenn ich auf einen Column-Header klicke sortiert er ja automatisch die Zeilen Ascending oder Descending. Zur besseren übersicht würde ich aber gerne den Column-Header einfärben, um zu visualisieren, dass nach dieser Spalte sortiert ist.

Okay, daraus ergeben sich mir zwei Fragen:

1.
In welchem Ereigniss würdet ihr das machen? Denn unter den Ereignissen "ColumnHeaderMouseClick" und "Sorted" muss ich ja erst unterscheiden auf welche Spalte ich geklickt hab und ich weis nicht wie ich das mache...

2.
Die Einfärbung eines einzelnen ColumnHeaders mag mir nicht gelingen. Im Form Load siehts bisher folgendermaßen aus:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
dgvDataGridView.EnableHeadersVisualStyles = false;
dgvDataGridView.DefaultCellStyle.BackColor = Color.Black;
dgvDataGridView.DefaultCellStyle.ForeColor = Color.LightGray;
dgvDataGridView.ColumnHeadersDefaultCellStyle.SelectionBackColor = Color.DarkOrange;
dgvDataGridView.ColumnHeadersDefaultCellStyle.SelectionForeColor = Color.White;

Wie aber färbe ich dann gezielt nur eine ein? Das Selection Back und Fore-Color bewirkt irgendwie gar nichts.

Danke für Eure Hilfe!

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 01.08.13 11:11 
Hallo und :welcome:

im ColumnHeaderMouseClick-Ereignis steht in den EventArgs der ColumnIndex.

Und damit kannst du dann auf die HeaderCell zugreifen und dessen Farben ändern:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
void DataGridView_ColumnHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
  DataGridView dataGridView = sender as dataGridView;
  int index = e.ColumnIndex;

  if (dataGridView != null  && index >= 0)
  {
    dataGridView.Columns[index].HeaderCell.InheritedStyle.BackColor = Color.DarkOrange;
    dataGridView.Columns[index].HeaderCell.InheritedStyle.ForeColor = Color.White;
  }
}

Du solltest dir zusätzlich den aktuellen Index in einer Membervariablen merken, damit du dann bei Click die vorherige Spalte wieder auf die Standardfarben setzen kannst.

Für diesen Beitrag haben gedankt: DJHousemeister
DJHousemeister Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 01.08.13 13:26 
Hallo Th69,

dankeschön für deine Antwort. Die richtige Spalte wird jetzt identifiziert. Wenn man weis wie es geht is es gar nicht so schwer :D


Aber das ändern der Farben über

ausblenden Quelltext
1:
2:
dataGridView.Columns[index].HeaderCell.InheritedStyle.BackColor = Color.DarkOrange;
dataGridView.Columns[index].HeaderCell.InheritedStyle.ForeColor = Color.White;


klappt nicht. Es bleiben die im Designer eingestellten Farben vorhanden.

Im Designer ist natürlich
EneableHeadersVisualStyle = false.
und bei ColumnHeadersDefaultCellStyle hab ich einstellungen gemacht.
ColumnHeadersBorderStyle = Single. Sollte sich aber darauf nicht auswirken!?

Ich wäre sehr dankbar für weitere Hilfestellung!

Gruß

Daniel
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 01.08.13 15:57 
Hallo,

probiere mal Style (anstatt InheritedStyle) oder DefaultCellStyle (anstatt HeaderCell.InheritedStyle).

Für diesen Beitrag haben gedankt: DJHousemeister
DJHousemeister Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Fr 02.08.13 02:32 
ausblenden Quelltext
1:
dgvDataGridView.Columns[index].HeaderCell.Style.BackColor = Color.White;					


macht was es soll!

Vielen lieben Dank für die schnelle und tolle Hilfe!
Ich dachte eigentlich ich hätte das auch mal ausprobiert... egal!

Super Forum und Super Moderatoren :D

Problem gelöst!

Gruß Daniel