Page 1 of 1
erben von ppsGrid.Grid
Posted: 21.02.2008, 17:13
by Lordas
hallo thorsten,
ich habe mir dein ppsGrid angesehen und bin wirklich fasziniert. tolle arbeit!!!
da mir allerdings irgendwie eine automatisierte methode zum befüllen des grids über eine DataTable gefehlt hat (oder habe ich die gar übersehen?), habe ich mir eine neue grid-klasse erstellt und von deiner vererbt.
funktioniert soweit auch alles gut, bis zu dem zeitpunkt, an welchem ich die sortierung der gefixten spalten mit aufnehmen wollte. sobald ich die fixierte zeile anklicke, erhalte ich nur noch einen fehler in der anzeige (ein schönes rotes X komplett über das grid + folgende ausnahme-exception:
---------------------------------------------------------
************** Ausnahmetext **************
System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
bei ppsGrid.GridCell.PaintCellImage(Graphics gfx, Int32 x, Int32 y, Int32 w, Int32 h)
bei ppsGrid.GridCell._Paint(Graphics gfx, Int32 x, Int32 y, Rectangle clpRct, Boolean alpha)
bei ppsGrid.Grid.PaintFixedRows(Graphics gfx, Int32 lft, Int32 pX, Rectangle clpRct)
bei ppsGrid.Grid.OnPaint(PaintEventArgs e)
bei System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer, Boolean disposeEventArgs)
bei System.Windows.Forms.Control.WmPaint(Message& m)
bei System.Windows.Forms.Control.WndProc(Message& m)
bei System.Windows.Forms.ScrollableControl.WndProc(Message& m)
bei System.Windows.Forms.ContainerControl.WndProc(Message& m)
bei System.Windows.Forms.UserControl.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
---------------------------------------------------------
das ganze passiert auch mit einer ganz normal abgeleiteten version von deinem grid, d.h. ohne weitere modifikationen:
using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using System.Windows.Forms;
using ppsGrid;
namespace TestApp
{
class Class1 : ppsGrid.Grid
{
public Class1() : base()
{
}
}
}
kannst du mir sagen was hier fehlt bzw. nicht stimmt?
danke
david
Posted: 21.02.2008, 17:29
by Lordas
ich nochmal,
ich glaube ich kann mir vorstellen wo das problem ist. kann es sein, dass du innerhalb der methode GridCell.PaintCellImage nochmal auf genau dein grid referenzierst?
Posted: 21.02.2008, 18:39
by torsten
Hallo Lordas
Erstmal danke für die Blumen.
Wegen dem Fehler: Gib mir 'ne halbe Stunde, ich melde mich gleich...
Gruß Torsten
Posted: 21.02.2008, 19:33
by torsten
Hallo Lordas
So, bin so weit...
Und du hast recht.
Der Fehler sind fehlende Resourcen, genauer die kleinen Icons, die die Sortierrichtung anzeigen sollen. Ich haben den Fehler behoben, so das die Sortierung jetzt funktioniert.
Allerdings werden die Resourcen am Start nicht gefunden und deshalb beim Sortieren nicht angezeigt...
Werde (hoffentlich) am Wochenende Zeit für das Problem haben.
Vorab kannst du ja die Beta-Verson prüfen...
Gruß Torsten
Posted: 21.02.2008, 22:01
by Lordas
hallo thorsten,
danke für die schnelle reaktion.
kannst du mir sagen wo ich die beta finde?
danke
david
Posted: 21.02.2008, 22:39
by Lordas
ach sorry, hab gesehen, dass du mir eine mail geschickt hast.
sortierung funktioniert jetzt - vielen dank. wäre super, wenn du dich einfach hier nochmal melden könntest bzgl. der fehlenden icons.
vielen dank nochmal für deine prompte reaktion - wirklich super!!!
Posted: 29.02.2008, 14:21
by Lordas
hallo thorsten,
wollte nochmal nachfragen ob du schon was tun hast können bzgl. der nicht mehr angezeigten ressourcen?
dann hätte ich noch eine allgemeine frage:
kann das grid editierbar gemacht werden auch ohne arbeiten mit einer textbox?
danke dir!
david
Posted: 03.03.2008, 08:14
by torsten
Hallo Lordas
Komme gerade aus 'nem Kurzurlaub wieder, deshalb hat's etwas gedauert!
wollte nochmal nachfragen ob du schon was tun hast können bzgl. der nicht mehr angezeigten ressourcen?
Ich hatt dir letztes Wochenende bereits eine neue Beta per Mail geschickt....(liest du deine Mails nicht ?)
Ich gehe davon aus, dass die Beta ok ist, will aber noch deine Reaktion bis zum nächsten Wochenende abwarten...
kann das grid editierbar gemacht werden auch ohne arbeiten mit einer textbox?
No, Eingaben funktionieren nur über die "Embedded Controls". Was ist daran schlecht?
Gruß Torsten
PS.: Torsten ohne "h"
![Smile :-)](./images/smilies/icon_smile.gif)
Posted: 03.03.2008, 21:39
by Lordas
hallo torsten
sorry für die falschschreibung.
hab soeben nochmal die mails gecheckt und sie war im spam-ordner gelandet (warum auch immer).
hab sie gerade getestet und für gut befunden.
die pfeile beim sortieren werden aber u.a. auch in den namen der spalte integriert, d.h. das überlagert sich. ist zwar nicht wirklich schlimm, weiß aber nicht ob du das nicht auch noch anders darstellen kannst.
die embedded controls sind super, nur wollte ich zuviel speicher vermeiden. d.h. wenn ich mal mir nichts dir nichts 20000, 50000 oder sogar 100000 zeilen zur anzeige bringen muss (manchmal geht es leider nicht anders), dann schlucken die ganzen controls ganz schön speicher. daher die nachfrage.
gruß
david (ohne lordas
![Laughing :lol:](./images/smilies/icon_lol.gif)
)
Posted: 04.03.2008, 12:11
by torsten
Hallo Lordas
die pfeile beim sortieren werden aber u.a. auch in den namen der spalte integriert, d.h. das überlagert sich. ist zwar nicht wirklich schlimm, weiß aber nicht ob du das nicht auch noch anders darstellen kannst.
Die Sortierrichtung kann ja nur in der obersten Zeile angezeigt werden, ist auch der Standard in anderen Grids bzw. Tabellen. Wenn die Spalte zu eng ist, gibt's natürlich Probleme. Einfach die Spalte etwas breiter machen; evtl. die Ausrichtung der obersten Zeile ändern (Zentriert braucht an den Seiten natürlich mehr Platz als links- oder rechtsbündig).
die embedded controls sind super, nur wollte ich zuviel speicher vermeiden. d.h. wenn ich mal mir nichts dir nichts 20000, 50000 oder sogar 100000 zeilen zur anzeige bringen muss [...] controls ganz schön speicher. daher die nachfrage.
Vorsicht!! Nicht den Fehler machen und jeder einzelnen Zelle (oder Zeile) ein eigenes Control zuweisen. Da wäre Wahnsinn. Wenn deine Tabelle 20.000 Zeilen bei 5 Spalten enthält, müsstest du 100.000 Steuerelemente erzeugen. Was für ein Wahnsinn
![Wink ;-)](./images/smilies/icon_wink.gif)
.
Ich gehe davon aus, dass der Datentyp einer Spalte in allen Zeilen stets gleich ist:
- Spalte 1="Name"=string, Spalte 2="Geboren"=DateTime, Spalte 3="PLZ"=integer usw.
Dann reicht es aus, wenn du für jede Spalte ein Control erzeugst (im Beispiel also gerade mal 5 Stück), und es der jeweiligen Spalte zuordnets. Das Ein- und Abschalten übernimmt dann das ppsGrid für Anzeige bzw. Eingabe selbst.
Wenn du das Control nur zur Eingabe benützt, kannst du natürlich auch auf "Knopfdruck" (zum Beisp. bei "F2") das "Embedded Control" erzeugen, der aktuellen Fokus-Zelle zuordnenanzeigst und in den Edit-Mode schaltest.
Ich glaube, dass das Erzeugen von mehr als zwei- bis dreihundert "Embedded Controls" problematisch werden könnte....(und sehr speicherintensiv- bzw. -abhängig).
Gruß Torsten
Posted: 04.03.2008, 23:14
by Lordas
hi torsten,
danke für die info.
wenn ich dich also richtig verstehe, dann nimmst du die eine für diese spalte erzeugte textbox und blendest es immer mit dem in der zelle hinterlegten text bei bedarf (wenn der user editieren möchte) ein.
hab ich das richtig verstanden?
dann ist mir alles klar - bzw. jetzt noch eine frage offen: wie stellst du den angezeigten text in der zelle dar?
danke dir für deine mühe und gedult.
gruß
david
Posted: 06.03.2008, 20:34
by torsten
Hallo Lordas
wenn ich dich also richtig verstehe, dann nimmst du die eine für diese spalte erzeugte textbox und blendest es immer mit dem in der zelle hinterlegten text bei bedarf (wenn der user editieren möchte) ein.
Ja, so ist es.
dann ist mir alles klar - bzw. jetzt noch eine frage offen: wie stellst du den angezeigten text in der zelle dar?
Mmmh, meinst du nun den angezeigten Text der Zelle zum Beispiel in einer Textbox, oder anderherum; den geänderten Text der Textbox zurück zur Zelle?
Gruß Torsten
Posted: 07.03.2008, 22:39
by Lordas
nee ich meine den text in einer zelle, wenn kein control zugeordnet ist.
gruß
david
Posted: 08.03.2008, 13:46
by torsten
Hallo David
nee ich meine den text in einer zelle, wenn kein control zugeordnet ist.
A) Also wie der Text von der Textbox in die Zelle kommt? Oder, Punkt B, komplett unabhängig von den "Embedded Controls"?
Zu Punkt A: Über die Eigenschaft ControlEditInfo werden zwei Eigenschaften gesetzt:
1. Das Steuerelement selbst, welches die Eingaben des Users entgegennehmen soll
2. Der Name der Eigenschaft, die die Eingaben zum Auslesen zur Verfügung stellt
Punkt zwei ist der ausschlaggebende Aspekt des Ganzens. Über "Reflection" und den Eigenschaftsnamen suche ich die Eigenschaft, lese die Daten aus, formatiere diese mit den hinterlegten Formatierungen der Zelle (4fach ambient) und zeige die entstandenen Texte an.
Und zu Punkt B: Die Darstellung aller Zellen, Zeilen, Spalten, Header, Rahmen, Trees, das gesamte Scrolling, das Verschieben, Größenänderungen, die Berechnung und Anzeige der Embedded Controls usw. wird komplett selbst berechnet und angezeigt. Das Basis-Steuerelement des ppsGrid's ist das UserControl; d.h., alles, was das UserControl nicht kann, wird selbst erledigt. Und das ist fast alles
![Smile :-)](./images/smilies/icon_smile.gif)
.
Alles nicht ganz einfach, und eigentlich auch alles nur Internas...
![Wink ;-)](./images/smilies/icon_wink.gif)
Wofür brauchst du die Infos?
Gruß Torsten
Posted: 08.03.2008, 21:55
by Lordas
Administrator wrote:Hallo David
A) Also wie der Text von der Textbox in die Zelle kommt?
nee das wollte ich nicht wissen - das ist mir auch selbst noch klar gewesen.
Administrator wrote:Oder, Punkt B, komplett unabhängig von den "Embedded Controls"?
ja genau das wollte ich wissen.
Administrator wrote:Alles nicht ganz einfach, und eigentlich auch alles nur Internas...
![Wink ;-)](./images/smilies/icon_wink.gif)
Wofür brauchst du die Infos?
Gruß Torsten
einfach reines interesse. das mit der einzelnen textbox für eine spalte habe ich ja längst kapiert, aber wenn du jetzt in jeder zelle einen text ohne zusätzliches control darstellst war bei mir die frage wie du das machst. hätte ja sein können, dass du da ein label hinterlegst od. ä. nur dann hätten wir ja wieder in jeder zelle ein label, das ziemlich speicherfressend wird mit steigender anzahl der zellen wäre.
vielleicht stell ich mir das auch nur ein wenig zu kompliziert vor...
oder "zeichnest" du dir den text direkt auf das usercontrol?
weiß auch das es natürlich dein quellcode ist, aber ich lerne halt gerne dazu
trotzdem danke für deine antworten.
gruß
david
Posted: 09.03.2008, 12:47
by torsten
Hallo David
einfach reines interesse. [...]aber wenn du jetzt in jeder zelle einen text ohne zusätzliches control darstellst war bei mir die frage wie du das machst. hätte ja sein können, dass du da ein label hinterlegst od. ä. nur dann hätten wir ja wieder in jeder zelle ein label, das ziemlich speicherfressend wird mit steigender anzahl der zellen wäre.
Nein, es wird auf keinen Fall (Ausnahme nur die "Embedded Controls") irgendwelche Steuerelemente zur Ausgabe der Daten benutzt . Jedwede Ausgabe wird durch das GDI+ erzeugt. Es wird dabei aus den Eigenschaften "Value" und "Format" ein String erzeugt, der mittels Graphics.DrawString(...) "gezeichnet" wird. Andere Dinge wie bsw. Bilder, Rahmen oder die Linien und Symbole im Outline-Tree werden entspr. mittels DrawRectangle(...), DrawLine(...) usw. gezeichnet. Die Verantwortung, dass Value und Format zusammenpassen, übernimmt dabei der Programmierer.
Schwierig war eigentlich nur, alle möglichen Kombinationen unter einen Hut zu bekommen, ohne dass dabei irgendwelcher grafischer Spagetti-Müll entsteht. Und bisher funktioniert das ganz gut, wie ich meine...
weiß auch das es natürlich dein quellcode ist, aber ich lerne halt gerne dazu
Kann ich verstehen. Problem dürfte nur die Komplexität des Quelltextes werden. Es dürfte schwierig werden, die für dich relevanten Dinge von den
unwichtigen Dinge herauszufiltern. Ich denke eher, dass du zum Lernen solcher Dinge lieber einfachere Beispiele im Internet suchen solltest (zum Beispiel unter "CodeProject").
Gruß Torsten
Posted: 10.03.2008, 10:33
by Lordas
Administrator wrote:Jedwede Ausgabe wird durch das GDI+ erzeugt. Es wird dabei aus den Eigenschaften "Value" und "Format" ein String erzeugt, der mittels Graphics.DrawString(...) "gezeichnet" wird. Andere Dinge wie bsw. Bilder, Rahmen oder die Linien und Symbole im Outline-Tree werden entspr. mittels DrawRectangle(...), DrawLine(...) usw. gezeichnet.
guten morgen torsten,
damit hat sich meine frage auch bereits erledigt. wie das dann gezeichnet wird ist erst mal sekundär, wichtig war mir zu wissen, dass du keine weiteren controls nutzt.
danke dir nochmal für deine mühe.
gruß
david
p.s.: wolltest du nicht die letzte version noch produktiv online stellen?
Posted: 10.03.2008, 11:45
by torsten
Hallo David
p.s.: wolltest du nicht die letzte version noch produktiv online stellen?
Wird auch noch, verzögert sich aber noch etwas. Wahrscheinlich nächstes Wochenende...
Gruß Torsten
Neue Verson 1.3.5
Posted: 16.03.2008, 14:03
by torsten
Hallo an alle
Habe eben die neue Version 1.3.5 hochgeladen.
Liste der Änderungen unter "
http://www.ppsgrid.de/history.html"
Download unter "
http://www.ppsgrid.de/download.html"
Gruß Torsten