Hallo zusammen,
ich habe meine Matrix komplett selbst gezeichnet. So war es relativ einfach möglich, dass anzupassen. (Siehe Anhang)
Allerdings ergibt sich das Problem, sobald eine Hohe Anzahl an Mitarbeiter (Spaltenanzahl) und daraus resultierend hohe Anzahl an Zeilen (Qualifikationen der Stellen) vorliegt.
Ein Scrollen ist fast unmöglich. Wenn man bedenkt, dass hinter jeder Stelle ca 50-60 Qualis hinterliegen und die pro Mitarbeiter dann auf der Form abgebildet werden.
Die Datenbankanfragen sind alle durchgeführt und es findet lediglich ein abgleich in Listen statt. Habt ihr Vorschläge wie ich die Laufzeit verbessern kann. Weil so ist es leider für Abteilungen wo mehr als 15 MA hinterlegt sich noch nicht ganz akzeptabel 😦
Ich hab schon gegoogelt, hier im Forum nach Lösungen gefunden aber nix, was mir wirklich weiterhilft. Am liebsten würde ich es so dynamisch gestalten, das er je nach Scrollposition die nötigen Zeilen neu zeichnet, oder aber, alles zu Beginn zeichnet, man munter scrollen kann ohne das es neu gezeichnet wird!
Danke für eure Tipps!! 😃
Ich würde sagen, dass Windows Forms dafür einfach nicht geeignet ist, es wird ja auch nicht mehr weiter entwickelt.
Guck dir mal das DataGridView (oder DataGridView) an
Ich glaube, wenn du versuchst, etwas selber zu zeichnen, fällst du mit Forms auf die Nase, das ist zu langsam. WPF ist da besser geeignet, weil es nicht erst Umwege gehen muss, sondern direkt auf DirectX aufsetzt.
Ansonsten, was genau macht denn das Programm?
Manche einfache Dinge mit Listen sind auch in Excel gut möglich. Ich hab mir letztens ein WorkSheet in Excel gebaut, das mit Bestellungen automatisch kalkuliert und aufbereitet, ich muss nur den aktuellen Stand eintragen.
NuGet Packages im Code auslesen
lock Alternative für async/await
Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.
Kann man denn mit WPF ebenfalls auf die Graphic Komponente zugreifen? Ich fand das so recht einfach zu handhaben. DataGridView habe ich auch probiert aber Probleme bei der Zuordnung der Spalten und Zeilen Beziehungen gesehen.
Programm läuft so ab, dass aus SAP Tabellen (CSV-Format) exportiert werden und in SQL-Tabellen importiert (Direktzugriff auf SAP macht die Perfomance ganz hinüber.
Dann werden Datenbankabfragen gemacht und die Informationen (Mitarbeiter, Stellen+Qualifikation) in Objekte und dann in Listen gepackt.
Und mit der Paint Methode werden diese dann abgearbeitet und dem User auf dem Bildschirm angezeigt.
Hinzu kommt, das bei mir unter Windows 7 keine WPF Anwendung vernünftig dargestellt wird! 😮
Ich würde sagen, dass Windows Forms dafür einfach nicht geeignet ist, es wird ja auch nicht mehr weiter entwickelt.
So ein Käse... wir setzen auch ein selber gezeichnetes Grid ein... Wenn man es richtig macht (und nur das zeichnet was auch sichtbar ist)... dann ist das mehr als nur genügend schnell.
Programmierhans
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Wenn man es richtig macht (und nur das zeichnet was auch sichtbar ist)... dann ist das mehr als nur genügend schnell.
Das ist genau das, was ich hören wollte. Ich habe dazu leider überhaupt kein passenden Ansatz!
Du brauchst Variablen für:
MaxVisibleLines berechnest Du aus ClientSize.Heigt und Zeilenhöhe
Im OnPaint zeichnest Du dann nur das was auch sichtbar ist
(mit einem For... von ScrolledLines für eine Anzahl von MaxVisibleLines)
Das selbe für die Columns
Das kriegst Du schon hin 😃
Programmierhans
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Ok, dann hab ich mich geirrt. Ich hatte bei Forms bisher gerne mal Probleme mit der Performance der Oberfläche.
NuGet Packages im Code auslesen
lock Alternative für async/await
Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.
Für die MaxVisibleLines habe ich mir nun eine Methode geschrieben. Das funktioniert soweit auch. Wie komme ich denn an die Scrolled Lines ran? Arbeite ich dort im Scroll Event oder bleibe ich im PaintEvent?
Und warum hast du das selber gemacht?
Es gibt doch vernünftige Grids die mit zigtausend Zeilen/Spalten zurechtkommen.
Unser Grid muss TouchScren-fähig sein... zudem Headers mehrsprachig und generell alles vom KUNDEN Customizebar (der Kunde kann SELBER definieren was erlaubt ist / Spaltenbreiten persistent speicherbar usw...)
Aber ev. meintest Du ja Fabian710 😃
Gruss
Programmierhans
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
@Fabian710
Ich zeichne sogar die Scrollbars selber (da z.B: die Breite der Scrollbars bei uns auch vom Kunden customizebar ist ) (Fette-Finger-Scrollbars)..
Daher weiss ich natürlich immer wie weit der User gescrollt hat.
Alles muss Touchscreen-fähig sein 😃
Gruss
programmierhans
Früher war ich unentschlossen, heute bin ich mir da nicht mehr so sicher...
Hi Fabian710,
in deinem Screenshot sehe ich kanpp 70 gezeichnete Zeichenketten und ein paar Linien. Wenn man es richtig macht, kann man das alles mehrmals pro Sekunde zeichnen, selbst auf schwachen Systemen. Von deinem Code zeigst du aber nichts, so daß man hier nur raten kann, was du anders machen solltest.
Am liebsten würde ich es so dynamisch gestalten, das er je nach Scrollposition die nötigen Zeilen neu zeichnet
Das wäre auf jeden Fall das erste, was man probieren sollte. Ist ja auch nicht schwer, nur die Bereiche zu zeichnen, die gerade sichtbar sind.
oder aber, alles zu Beginn zeichnet, man munter scrollen kann ohne das es neu gezeichnet wird!
Das wäre auch eine Möglichkeit, bei der du deinen Code nicht einmal groß umschreiben müßtest. Einfach alles in einem Bitmap zeichnen, so wie du jetzt auf die Form zeichnest, und dann nur noch das Bitmap an der richtigen Position darstellen. Allerdings verlierst du dann die Möglichkeiten zur Benutzer-Interaktion mit den Events der Steuerelemente. Falls bestimmte Bereiche klickbar oder "hover"-bar sind, mußt du das dann eben simulieren.
Christian
Weeks of programming can save you hours of planning
@Programmierhans:
Nicht nur ev.
Aber da es sowas schon für vergleichbar kleines Geld gibt ( was hat euch die Entwicklung gekostet?), würde ich mir das nicht selber antun.
z.b. http://www.telerik.com/products/winforms.aspx
Die bringen auch gleich MSAA mit ( ist bei einigen wichtig für UI Tests ).
Das was Fabian710 hier vor hat, kann ( zumindest bei dem bisschen was er hier zeigt ) jedes Grid, selbst das DGV.
Warum er da Probleme sieht, liegt wahrscheinlich eher an der unpassenden BusinessLogik.
In Suche Control für Matrixdarstellung mit hierarchischer Struktur hat Fabian710 bereits ein passendes Control gesucht und auch sinnvolle Vorschläge bekommen.
Insofern ist dieser Thread hier möglicherweise sogar vollkommen überflüssig. Auf jeden Fall ist er nicht zielführend, so vage wie die von Fabian710 Informationen waren, die hier bisher gegeben wurden.
Gerade bei einer tabellarischen Darstellung ist es mehr als einfach zu ermitteln, welche Zellen gerade sichtbar sind.
Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 1.1.1 und 5.