Page 1 of 1

Grid und Visual Studio und Beispieldownload

Posted: 17.04.2007, 15:14
by eoe
Hallo,

ich wollte mir soeben das PPsGrid anschauen, da mir vor allem die Outline Funktion recht interessant erscheint. Folgendes Problem: Ich ziehe ein Grid auf mein Control und möchte neue Column’s hinzufügen. Das funktioniert aber nur bedingt. Ich schaffe es nicht, dass die Spaltenköpfe angezeigt werden. Es ändert sich auch nichts, wenn ich die Column’s direkt im Code hinzufüge.

Dann noch eine Anmerkung zu den Beispielen. Ich finde es toll, wenn eine ausführliche Sammlung an kleinen Codebeispielen existiert. Allerdings lässt sich die in dem zur Verfügung gestellten Beispiel zwar starten, erzeugt dann aber bei der Auswahl eines Menüpunkts einen Fehler. Das Kompilieren war auch nicht ohne weiteres möglich, da eine Abhängigkeit auf eine Projektmappe bestand, die nicht existiert. Fügt man die DLL hinzu, erzeugt man eine Reihe von Kompilierungsfehlern, da einige Eigenschaften nicht definiert sind.

Erik

Posted: 19.04.2007, 08:42
by torsten
Hallo Erik
Folgendes Problem: Ich ziehe ein Grid auf mein Control und möchte neue Column’s hinzufügen. Das funktioniert aber nur bedingt. Ich schaffe es nicht, dass die Spaltenköpfe angezeigt werden. Es ändert sich auch nichts, wenn ich die Column’s direkt im Code hinzufüge.
Neue Spalten erscheinen erst, wenn mindestens eine Zeile vorhanden ist (bzw. umgekehrt)...
Dann noch eine Anmerkung zu den Beispielen. Ich finde es toll, wenn eine ausführliche Sammlung an kleinen Codebeispielen existiert. Allerdings lässt sich die in dem zur Verfügung gestellten Beispiel zwar starten, erzeugt dann aber bei der Auswahl eines Menüpunkts einen Fehler.
Mmmh. Projekt erfolgreich übersetzt ?
Das Kompilieren war auch nicht ohne weiteres möglich, da eine Abhängigkeit auf eine Projektmappe bestand, die nicht existiert. Fügt man die DLL hinzu, erzeugt man eine Reihe von Kompilierungsfehlern, da einige Eigenschaften nicht definiert sind.
Stimmt (Schäm). Die Demos sind erwas älter und passen nicht mehr 100 %ig zur DLL.

Also: Die folgenden Fehler beseitigen und komplett übersetzen. Dann sollte alles funktionieren

1. Projekt "ppsGrid" entfernen
2. Im Projekt "WinDemo" eine Referenz auf die heruntergeladene ppsGrid.dll hinzufügen
3. Projekt komplett neu übersetzen
4. den Fehler

Code: Select all

col.WidthType=eWidthType.... 
ersetzen durch

Code: Select all

col.AutoWidth=eWidthType....
5. den Fehler

Code: Select all

grdDispEdit.ControlEditInfo.KeyEditBegin.Modifier=Keys.Shift;
grdDispEdit.ControlEditInfo.KeyEditBegin.Key=Keys.F3;
ersetzen durch

Code: Select all

grdDispEdit.ControlEditInfo.KeyEditBegin=(Keys.Shift|Keys.F3);
6. den Fehler

Code: Select all

this.grid.OutlineSmooth = true;
ersatzlos streichen
7. Die Resource-Dateien "frmSort.resX" und "frmCtrlControl.resX"
ersatzlos löschen"

Das wars. Damit sollten sich die Demos vollständig kompilieren und starten lassen. Ansonsten einfach nochmal melden.
Gruß Torsten

Posted: 24.04.2007, 16:51
by eoe
Hallo Torsten,

Sorry für die späte Antwort. Vielen Dank für die ausführlichen Tipps. Die Sache mit den Reihen hatte ich gleich nach meinem Eintrag in das Forum hier herausgefunden. Da war ich noch zu sehr auf Listviews fixiert. Die anderen Punkte konnte ich auch mit der Hilfedatei klären (die aber am Anfang komischerweise nicht funktioniert hatte...)

Nachdem ich einiges mit dem Control ausprobiert habe, kann ich nur sagen: Respekt. Klasse was alles möglich ist, vor allem in der Darstellung von Baumstrukturen. Alles was das Herz begehrt :D

Derzeit sind noch zwei Fragen offen:

1. Gibt es eine Clear() Methode des Grids, die alle fixierten Spalten (die Header) stehen lässt, oder muss ich diese immer wieder neu einfügen? (Ich habe es derzeit in eine Methode gekapselt…)
2. Besteht die Möglichkeit, das Grid nach mehreren Spalten zu sortieren?

Grüße

Erik

Posted: 25.04.2007, 07:41
by torsten
Hallo Erik
Nachdem ich einiges mit dem Control ausprobiert habe, kann ich nur sagen: Respekt. Klasse was alles möglich ist, vor allem in der Darstellung von Baumstrukturen. Alles was das Herz begehrt Very Happy
Danke für die Blumen. Dann kannst du das Grid ja guten Gewissen weiterempfehlen :-)
Gibt es eine Clear() Methode des Grids, die alle fixierten Spalten (die Header) stehen lässt, oder muss ich diese immer wieder neu einfügen? (Ich habe es derzeit in eine Methode gekapselt…)
Noch nicht. Ist aber ja auch "nur" ein Zweizeiler:

Code: Select all

while (!grid.Rows[grid.Rows.Count-1].Fixed)
  grid.Rows.RemoveAt(grid.Rows.Count-1);
Besteht die Möglichkeit, das Grid nach mehreren Spalten zu sortieren?
Einfach die Sort-Methode mehrfach aufrufen:

Code: Select all

grid.BeginUpdate();
grid.Cols[0].Sort(eSortDirection.Ascending);
grid.Cols[1].Sort(eSortDirection.Ascending);
grid.EndUpdate();
sortiert erst nach Spalte 0 (zum Beispiel Vorname) und dann nach Spalte 1 (zum Beispiel Nachname). Das Ergebnis ist eine nach Nachnamen sortierte Liste, die bei Namensgleichheit nach Vornamen sortiert ist. Sowas suchst du doch, oder?

Gruß Torsten

Posted: 19.06.2007, 09:28
by eoe
Hallo Torsten,

sorry für die späte antwort, aber ich hatte in den letzten Wochen keine Zeit, mich mit dem Grid zu beschäftigen. Danke für die Antworten. Ist es auch möglich, das sortieren mehrer Spalten über den Header darzustellen. Ich würde da an eine unterschiedliche Anzahl von Pfeilen denken. Dh. Die erste Spalte einen Pfeil, dann für die 2. sortierte Spalte zwei Pfeile. Ist so etwas denkbar?

Dann ist mir noch ein Problem mit UserControls als Zelleninhalt aufgefallen. Immer wenn ich eine Zeile, Spalte oder einen Zelleninhalt löschen möchte, erhalte ich anschließend eine AfterCellEdit Exception. Der Fehler tritt nur dann auf, wenn sich das Control gerade im Edit Modus befindet. Kann ich das auf irgendeine Art und Weise umgehen. Ich habe versucht die Zelle zu deselktieren, allerdings verschwindet dann der Fokus nicht von der Zelle.

Erik

Posted: 19.06.2007, 09:57
by torsten
Hallo Erik
Ist es auch möglich, das sortieren mehrer Spalten über den Header darzustellen. Ich würde da an eine unterschiedliche Anzahl von Pfeilen denken. Dh. Die erste Spalte einen Pfeil, dann für die 2. sortierte Spalte zwei Pfeile. Ist so etwas denkbar?
Mhhh... ich kenne kein Grid, Listcontrol, Spreatsheet oder ähnliches, das mehr als eine Spalte kennzeichnet. Es scheint auch ein prinzipielles Problem zu geben: Beim ersten Klick hat die Spalte einen Pfeil, beim zweiten Klick auf eine andere Spalte zwei Pfeile und bei der sechsten Spalte sechs Pfeile ? Wo beginnt es (klar, bei einem Pfeil :-)) und wo hört es auf ?
Vorschlag: Der Windows-Explorer stellt die sortierte Spalte in einer anderen Hintergrundfarbe dar. Vielleicht kannst du die sortierten Spalten auch so kennzeichnen:
- Alle unsortierten Spalten mit weißer Hintergrund
- Die aktuelle sortierte Spalte mit grauen Hintergrund
- Ältere, sortierte Spalten werden je nach (sortier-)Priorität heller (weißer)...
Nur so 'ne Idee...

Dann ist mir noch ein Problem mit UserControls als Zelleninhalt aufgefallen...
Kann ich erst Donnerstag abend abchecken. Ich melde mich dann.
Gruß Torsten

Posted: 21.06.2007, 15:16
by eoe
Hallo Torsten,
Mhhh... ich kenne kein Grid, Listcontrol, Spreatsheet oder ähnliches, das mehr als eine Spalte kennzeichnet. Es scheint auch ein prinzipielles Problem zu geben: Beim ersten Klick hat die Spalte einen Pfeil, beim zweiten Klick auf eine andere Spalte zwei Pfeile und bei der sechsten Spalte sechs Pfeile ? Wo beginnt es (klar, bei einem Pfeil) und wo hört es auf ?
das wäre ja gerade die Herausforderung und ein weiteres tolles Alleinstellungsmerkmal des PPSGrids. Der Mensch braucht ja Ziele :D

Noch eine Sache zu der Fehlermeldung. An besten kannst du Sie in der folgenden Art und Weise erzeugen. Erstellung eines Grids mit einer Textbox als Anzeige und Edit Control. Dann ein weiterer Button, mit dessen Hilfe eine Zeile des Grids gelöscht werden kann. Die Textbox in den Editmodus bringen und dann die Zeile löschen. Danach geht im Grid nix mehr und es hilft nur noch der Neustart der Applikation. Habe zuerst gedacht es liegt an meinen komplexeren Controls, aber bei einer Textbox passiert es leider auch.

Grüße

Erik

Posted: 21.06.2007, 19:29
by torsten
Hallo Erik


An besten kannst du Sie in der folgenden Art und Weise erzeugen. Erstellung eines Grids mit einer Textbox als Anzeige und Edit Control. Dann ein weiterer Button, mit dessen Hilfe eine Zeile des Grids gelöscht werden kann. Die Textbox in den Editmodus bringen und dann die Zeile löschen
Also... Ich habe das Demo "frmCtrlTextbox.cs" um eine Schaltfläche erweitert. Bei Klick wird folgendes ausgeführt:


Code: Select all

private void button1_Click(object sender, System.EventArgs e) {

		grdEdit.Rows.RemoveAt(grdEdit.FocusCell.Y);

}
Und, was soll ich sagen...alles funktioniert, wie es soll. Die Zeile mit dem Fokus (spr. mit der Textbox) wird gelöscht.

Wenn der Fokus an die Schaltfläche geht und das Grid den Fokus verliert, wird dadurch der Edit-Modus beendet und die Zeile kann gelöscht werden, was auch ohne Probleme funktioniert.

Aber dann... Was ist, wenn das Grid den Fokus nicht verliert? Genau das meinst du wohl, oder? Wenn die Schaltfläche ebenfalls ein "embedded Control" ist. Also, gleich ausprobiert, und tatsächlich ein Exception. Das Steuerelement zieht sich selbst den Boden unter den Füßen weg (sprichwörtlich). Der "Fehler" war dann schnell behoben...



Danke für den Feedback

Gruß Torsten

Posted: 22.06.2007, 10:27
by eoe
Hallo Torsten,

stellst du einen Fix bereit, der den Fehler behebt? In einem Workaround kann ich den Focus von Grid nehmen, damit ich um den Fehler herum komme. Allerdings arbeite ich sehr viel mit Logik, die von den Inhalten der selektierten Zeile im Grid abhängig ist, und da wäre es schon etwas nervig, wenn man immer wieder den Focus verliert und dann erst die Zeile neu Selektieren muss.

Danke für die Unterstützung!

Erik

Posted: 22.06.2007, 10:50
by torsten
Hallo Erik
Ich habe dir die Beta-Version vom ppsGrid per Mail zugeschickt. Die Mailadresse ist im Forum hinterlegt.
Gruß Torsten

Posted: 22.06.2007, 11:27
by eoe
Hallo Torsten,

danke für die Testversion. Allerdings scheint es jetzt ein Problem beim löschen von Outline Knoten zu geben. Wenn ich eine im Grid dargestellte Struktur mit einem expandierten Outline Knoten löschen möchte, bekomme ich die gleiche AfterCellEdit Exception

System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
at ppsGrid.GridCell.AfterEdit(Boolean committ)
at ppsGrid.GridRowCollection.OnRemove(Int32 index, Object value)
at System.Collections.CollectionBase.RemoveAt(Int32 index)

Irgend eine Idee?

Erik

Posted: 22.06.2007, 11:48
by torsten
Hallo Erik
Irgend eine Idee?
Bestimmt. Ich melde mich heute abend...
Gruß Torsten

Posted: 25.06.2007, 09:06
by eoe
Hallo Torsten,

zunächst die gute Nachricht. Das Problem beim Löschen eines DS des Grids mit expandiertem Offline Knoten ist behoben...

Allerdings gibt es (zumindest bei mir) ein weiteres kleines Problem. Ich teste dein Grid gerade für die Darstellung von Stücklisten. Wenn ich eine bestehende Stückliste aus der DB Lade, stimmt die Struktur nicht mehr mit der alten Struktur überein. Habe anschließend die letzte offizielle Release Version des PPSGrids genommen, und da sah wieder alles i.o. aus. Meine Algorithmen zur Darstellung habe ich nicht geändert. Demnach muss sich irgendetwas bei der Handhabung von Outline Knoten im PPS Grid geändert haben.

Erik

Treeview geändert...

Posted: 25.06.2007, 09:37
by torsten
Hallo Erik
Demnach muss sich irgendetwas bei der Handhabung von Outline Knoten im PPS Grid geändert haben.
Ja, das stimmt. Ich habe (bereits vor längerem) den Treeview etwas erweitert. Allerdings sollte dies kompatibel sein zur Vorgänger-Version. Die folgenden Möglichkeiten sind zur Beta hinzugekommen:

- Beim Erzeugen neuer "Childs" wird die Sichtbarkeit anders berechnet
- Neue "Child's können auch mittendrin eingefügt werden
- Als "Return"-Wert bei "AddChilds" gibt's einen Int-Wert als Index zurück

Probiere vielleicht beide Versionen von "AddChild":
- int AddChilds(int count,int startRow)
und
- int AddChilds(int count)


Mich würde interessieren, was da nicht kompatibel ist.
Gruß Torsten

Posted: 26.06.2007, 07:39
by eoe
Hallo Torsten,

ich habe dir eine kleine Demo Applikation erstellt, mit der du den Fehler nachvollziehen kannst. Anbei noch eine kleine Anleitung, wie du den Fehler provozieren kannst. Er tritt nach meinem Erkenntnisstand immer dann auf, das letzte Kind (Y) eines Knotens X selber Kinder enthält, und dann zu X ein weiteres Kind (Z) hinzugefügt wird. Die Kinder von Y werden dann unter Z gehängt, und dann geht mit meinem Code auch nichts mehr im Bezug der Sichtbarkeit der Elemente.

Nun das Vorgehen:

1. Erzeuge einen Wurzelknoten
2. Selektiere Wurzelknoten und erzeuge neues Kind (Pos 20)
3. Selektiere Pos 20 und erzeuge neues Kind (Pos 30)
4. Selektiere Wurzelknoten und erzeuge neues Kind (Pos 40)


Wenn du eine Idee hast, lass es mich bitte wissen. Vielleicht habe ich ja nur einen katastrophalen Fehler im Code.

Über das Sichtbarkeitsverhalten unterhalten wir uns dann ein andermal.

Vielen Dank für deine Unterstützung

Erik

Posted: 30.06.2007, 17:24
by torsten
Hallo Erik
Ich habe ein paar Experimente mit dem Treeview gemacht und konnte nichts (??) ungewöhnliches feststellen. Egal, ob mittendrin oder am Ende neue Childs eingefügt bzw. angehängt werden, klappt alles wie gewünscht...

Schick' doch mal den betreffenden (Auszug vom) Quelltext, vielleicht werde ich dann schlauer :-)
Gruß Torsten

PS.:

Code: Select all

grid.PreferredColWidth=200;
grid.AddCols(3);
grid.AddRows(3);
grid.Cols[0].OutlineMode=true;
for(int rw=0;rw<3;rw++)
	grid[0,rw].Value="Row "+rw.ToString();

grid.Rows[2].Outline.AddChilds(1);
grid[0,3].Value="Row 2.1";

grid.Rows[2].Outline.AddChilds(1);
grid[0,4].Value="Row 2.2";

grid.Rows[3].Outline.AddChilds(1);
grid[0,4].Value="Row 2.1.1";

Posted: 02.07.2007, 07:51
by eoe
Hallo Torsten,

ich war der Meinung, das ich dir ein gesamtes VS Projekt via Mail geschickt hatte, dass auch den kompletten Code enthält. In der Gridklasse sollte alles ersichtlich sein. Wenn du die Mail nicht erhalten hast, sage mir bitte Bescheid.

Wenn ich deinen Code richtig deute, umgeht er auch gekonnt das Problem. Eine Hierarchie im letzten Knoten aufzubauen funktioniert bei mir auch. Das Problem kommt erst dann, wenn ich noch einen Knoten auf der Top Ebene anhänge. Also bei dir müsste noch ein abschließendes AddRows(1) angefügt werden.

Erik

Posted: 16.07.2007, 12:38
by eoe
Hallo Torsten,

bist du noch an dem Thema dran? Es wäre schön ein kurzes Feedback zu erhalten.

Grüße

Erik

Posted: 17.07.2007, 09:14
by torsten
Hallo Erik
ich war der Meinung, das ich dir ein gesamtes VS Projekt via Mail geschickt hatte, dass auch den kompletten Code enthält. In der Gridklasse sollte alles ersichtlich sein. Wenn du die Mail nicht erhalten hast, sage mir bitte Bescheid.
Wie bereits beschrieben konnte ich den Fehler nicht so richtig nachvollziehen. Die "neue Beta"-Version läuft meiner Menung nach einwandfrei. Deshalb die Frage nach neuen, anderen Quelltext.
Ich habe nochmals das Grid gecheckt, deinen Quelltext verwendet und zwei Screenshots gemacht: Einen mit der ppsGrid-Download-Version 1.3.2.1 und einen mit der beta-Version 1.3.3. Beide Screenshots sind identisch. Ich schicke dir die Bilder per Mail.

(OT: Weiß jemand, wie man im phpBB die Erlaubnis zum Bilder einfügen einstellt?[Geht das überhaupt?)

Gruß Torsten

Posted: 14.09.2007, 14:35
by eoe
Hallo Torsten,

sorry das ich mich so lange nicht gemeldet habe. Aber ich war die letzten Monate Land unter, so das ich es nur ein- oder zweimal telefonisch versucht habe, dich zu erreichen. Ich kämpfe immer noch mit dem Problem meiner Stücklisten. Wenn ich deine neue Version verwende, funktionieren die embedded controls, wenn ich die alte Version nehme, funktioniert die Stücklistendarstellung. Du hattest mir ja Bilder von dem Demoprogamm zugeschickt. Finde ich dieses Control auch in der offiziell verfügbaren Demoversion? Kann Sie leider nicht finden.. Falls nicht, kannst du mir die entsprechende Demo oder den von dir verwendeten Ccode zur Verfügung stellen?

Grüße und ein schönes WE

Erik

Posted: 14.09.2007, 16:45
by torsten
Hallo Erik
Wenn ich deine neue Version verwende, funktionieren die embedded controls, wenn ich die alte Version nehme, funktioniert die Stücklistendarstellung.
Wie bereits geschrieben: Ich konnte keine Unterschiede beim TreeView zwischen der alten und der neuen Version feststellen. Am besten, du schickst mir den (gekürzten) Quelltext (kein komplettes Projekt, nur die Erzeugung der Zeilen und die Ausgabe der Daten).
Finde ich dieses Control auch in der offiziell verfügbaren Demoversion? Kann Sie leider nicht finden.
No. Die Bilder bzw. der Quelltext war ja nur ein Mini-Demo für dein Problem. Hast du den Quelltext vom 30.06.2007 probiert?

Gruß Torsten

PS.: Bin mit ziemlicher Sicherheit den Rest des heutigen Abends zuhause...

Posted: 17.09.2007, 15:42
by eoe
Hi Torsten,

also dein Code funktioniert, geht aber nicht auf mein Problem ein. Habe folgende einfache Zeilen Quelltext verwendet, um das Problem nachzustellen. Das Vorgehen entspricht dabei dem bereits in diesem Thread beschriebenen Verfahren.

Code: Select all

//Wurzelknoten
AddRows(1);
//Darunter 2 Kinder
Rows[1].Outline.AddChilds(2);
//dem zuvor erzeugten 2 Kind ein weiteres Kind anhängen
Rows[3].Outline.AddChilds(1);
//Dem Wurzelknoten ein 3. Kind zuordnen
Rows[1].Outline.AddChilds(1);
Wenn ich diese Sache ausführe, sehe ich eine Header Zeile (die habe ich mir zuvor definiert) und die 5 Detailzeilen. Allerdings ist das Ergebnis anders als erwartet, da der Kindknoten mit dem zusätzlichen Kind jetzt an letzter Stelle und nicht in der Mitte steht. Mit der alten Version des ppsGrids kommt das richtige Ergebnis raus...

Erik

Posted: 29.10.2007, 15:47
by eoe
Hallo Torsten,

wie es aussieht, scheint jetzt auf den ersten Blick alles zu passen. Meine Stücklisten sehen aus wie Stücklisten und die integrierten Controls scheinen auch wunderbar zu funktionieren.

Tolle Arbeit!

Wenn es noch irgendetwas auffälliges gibt, werde ich mich wieder melden.

Grüße

Erik