DataGridView - Frozen Rows, Sortierung bzw. mehere Header zeilen

FwDonnerbalken

Erfahrenes Mitglied
Hallo zusammen,

nach längerer Abwesenheit muss ich mal wieder eine paar Fragen stellen.

Zur Zeit verwende ich ein DataGridView (nachfolgend DGV genannt) für die Darstellung meiner Daten. Das DGV erstelle ich manuell ohne Datenbindung.

Da mir der Header des DGV nicht ausreicht habe ich ein paar zusätzliche Headerinformationen in die ersten Zeilen des DGV geschrieben. Über die Frozen-Eigeschaft der Row wird zwar effektiv das wegscrollen verhindert, jedoch nicht, dass diese Zeile mit sortiert wird.

1. Frage: Kann man, und wie kann man, verhindern, dass bestimmte Zeilen nicht mit in die Sortierung einbezogen werden. Ich suche hier mehr nach einer Lösung ala "setze Eigenschaft auf false und gut ist". Eine angedachte Möglichkeit hier wäre zum Beispiel, die Zeile zu löschen und nach dem Sortieren wieder oben einzufügen(finde ich aber extrem "uncool").

dies führt mich zu einer weiteren Frage:

2. Frage: Kann das DGV mehr als eine Headerzeile? Wenn dem nämlich so wäre, hätte sich Frage 1 erübrigt.

und nun meine letzte Frage:

3. Frage: Ich habe mal ein wenig in die Richtung gegoogelt, leider nicht gefunden. Unterstützt das DGV Formeln in der Art von Excel? Quasi, Zelle[0, 0] + Zelle [0, 1] oder eben Summe(Zelle[0, 0], Zelle[100,0]).

Danke Euch!

Aso, ich hätte prinzipiell noch ein Infragistics UltraGrid in der Schublade, habe damit bisher nie gearbeitet. Gibts jemanden hier, der sich damit auskennt? Hier wäre ich über eine PM sehr erfreut.
 
Hallo FWDonnerbalken,

Zur Zeit verwende ich ein DataGridView (nachfolgend DGV genannt) für die Darstellung meiner Daten. Das DGV erstelle ich manuell ohne Datenbindung.

ich verwende das DGV auch sehr oft, habe mir allerdings ein viel mächtigeres Control davon abgleitet, welches viel anspruchsvoller aussieht und diverse Zusatzfunktionen
(z.B.Sortierung nach mehreren Spalten) hat.

1. Frage: Kann man, und wie kann man, verhindern, dass bestimmte Zeilen nicht mit in die Sortierung einbezogen werden. Ich suche hier mehr nach einer Lösung ala "setze Eigenschaft auf false und gut ist". Eine angedachte Möglichkeit hier wäre zum Beispiel, die Zeile zu löschen und nach dem Sortieren wieder oben einzufügen(finde ich aber extrem "uncool").

Das kann ich auf Anhieb nicht sagen, prüfe es aber später nochmal.

2. Frage: Kann das DGV mehr als eine Headerzeile? Wenn dem nämlich so wäre, hätte sich Frage 1 erübrigt.

IMHO Standardmässig nicht.
Allerdings kann man Problemlos ein Usercontrol erstellen und über den Headern
weitere Header selber zeichnen.
Ich zeichne in meinem DGV die Header komplett selbst (darüber).
Heute Abend kann ich mal ein Bild davon einfügen.


3. Frage: Ich habe mal ein wenig in die Richtung gegoogelt, leider nicht gefunden. Unterstützt das DGV Formeln in der Art von Excel? Quasi, Zelle[0, 0] + Zelle [0, 1] oder eben Summe(Zelle[0, 0], Zelle[100,0]).

Standardmässig geht das ebenfalls nicht.
Man kann aber die Rows und Cells durchlaufen und das selbst programmieren.

Gruß
Jens
 
über DataGridView.Sort eigenen IComparer übergeben.
Habs aber noch nie in Verbindung mit DataGridView probiert.
 
Moin Spyke,

ich denke die Implementierung eines eigenen Comparers wird hier nicht weiterhelfen. Die Compare Methode vergleicht ja entsprechend zwei Werte vom Typ Object.
Je nachdem wie ich Compare implementiere gibt die Methode größer, kleiner oder gleich zurück. Damit kann ich aber die Sortierung selbst nicht beeinflussen.
Ich denke das ist nicht der Weg den man gehen sollte... obwohl man bestimmt was maggeln könnte.

Ich suche ja unter anderem nach einer Methode, bzw, Einstellung, die es mir ermöglich z.B. die Zeile die Frozen=true sind, nicht mit in die Sortierung einzubeziehen.

Edit:
@Jens, darfst mich auch gerne Sebastian nennen ;)
Kannst du mir mal deine DGV-Klasse zur Verfügung stellen? Würde sie mir gerne mal ansehen.
 
kannst doch problem los mit Comparer Sortieren

wenn( a == Frozen b == Frozen ) return 0
sonst wenn( a == Frozen und b != Frozen) return -1
sonst wenn(a != Frozen und b == Frozen) return 1
sonst return a.CompareTo(b)

Sollte die Frozen Zeilen immer oben halten und die restlichen normal Sortieren.
(P.S.: 1 und -1 könnte auch vertauscht sein, hab da immer so probleme :rolleyes:)

Das was du noch übergeben müsstest ist ob aufsteigend oder Absteigend Sortieren.
Und jenachdem einfach a und b vertauschen.
 
Nur noch ergänzend zu meinem 1. Posting.

Ich würde, wenn es sich machen lässt immer eigene oder .NET Controls
vorziehen, da ich hier die volle Kontrolle habe und nicht auf 3. Anbieter
angewiesen bin. -> soviel zu Infragistics
Schaue dir mal das jpg an. Das ist ein DataGridview von mir. Da ist fast alles
selbst gezeichnet. Das soll keine Werbung sein. Ich biete das Teil eh nicht
kommerziell an. Das soll nur mal zeigen was alles geht mit NET Bordmitteln.
Das DGV hat u.A. folgende Features
- alle Spaltenbreiten und die Sortierung merkt es sich
- die Farben der Columnhaeder und Zeilen kann geändert werden
- Sortierung nach mehreren Spalten
- Im Virtual Mode ist das Ding auch bei zig Tausend Datensätzen rasent
schnell
- Es gibt links Buttons zu einem Excel Export, zur Suche in Spalten und HTML
Export

Ich habe zwar für dein Problem keine Lösung auf die Schnelle parat, würde dir aber raten es mit dem DGV zu veruschen, es gibt mit Sicherheit eine Lösung.

Das was bspw. wirklich nicht damit geht, sind Relationen darzustellen, aber das geht dann eben mit zusätzlichen Controls.

Jens
 

Anhänge

  • dgv.jpg
    dgv.jpg
    84 KB · Aufrufe: 526
@Spyke:
Diesen Gedanken hatte ich auch... das meinte ich mit "maggeln". Werde das mal ausprobieren.

@Jens:
Dir auch noch mal Danke für deine Mühe, wir hören voneinander.
 
@Spyke:
Diesen Gedanken hatte ich auch... das meinte ich mit "maggeln". Werde das mal ausprobieren.
Aso, hab das Wort maggeln vorher noch nie gehört :rolleyes:

da ich hier die volle Kontrolle habe und nicht auf 3. Anbieter
angewiesen bin. -> soviel zu Infragistics
Infragistics ist doch noch in Ordnung, das gibts den kompletten Source mit beim kauf.
Da würde eher von ComponenteOne abraten (wobei mir da das FlexGrid besser gefällt :rolleyes: )
Ansonsten find ich allgemein 3. Anbieter nicht verkehrt :D
 
Hallo Spyke,

das war vielleicht etwas übertrieben ausgedrückt von mir...
Ich möchte jetzt nicht alle Drittanbieter schlecht machen, aber
man muss eben immer abwägen was man braucht und selber
machen kann (in einem gewissen Rahmen).
Ich entwickle lieber nach der Philosphie -> was geht selber machen
und unabhängig sein, wenn es die Zeit für das Projekt hergibt.
Seit dotnet hat man da ja hervorragende Möglichkeiten.

Das wusste ich im Übrigen noch gar nicht das Infragistics
den Source mit ausliefert...
Ich nehme an das der Preis dann aber auch entsprechend
hoch ist und nicht jeder kann sich das leisten sowas zu kaufen.
Außerdem gibt es die Eierlegende Wollmilchsau unter den Grids
auch noch nicht :)
Ist der Code von denen denn Managed NET ?

Gruß
Jens
 
Moin,

bei Infragistics kannst du entscheiden die Variante mit oder ohne Source zu kaufen. Unser Unternehmen hat leider nur die Variante ohne Source gekauft.

Und Ja, alles in .NET 2.0 geschrieben, haben außerdem WPF Controls im Angebot und die gesamte Palette der WinForms Controls auf für ASP.NET (ob wirklich alles keine Ahnung)

Warum dann diese Fragen von mir? Weil ich eigentlich ebenfalls der Meinung bin soviel wie möglich im Standard oder eben selbst auf dem Standard basierend zu entwickeln. Leider ist dies in der heutigen Welt nicht möglich, da die Ressourcen eines Projekt bekanntlich extrem begrenzt sind... (jeder der was anderes erlebt hat einfach Glück oder zuviel Geld ;-)). Also... letztlich muss man ab und an dritt Anbieter hinzuziehen.
 

Neue Beiträge

Zurück