Autor Beitrag
yndaso
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 108



BeitragVerfasst: Do 21.07.11 08:48 
Hallo,
ich habe die Aufgabe ein vorhandenes Projekt zu erweitern.

Es wird mit einem DataGridView direkt gearbeitet und beim Speichern des grids die Zeilen
in einer Schleife gelesen und letztendlich in einer Textdatei gespeichert.

Da mir das zu umständlich ist, würde ich nun den DGV Inhalt in einer xml Datei speichern.
Die DataSet oder DataTable Klasse bieten ja entsprechende Methoden.

Um das DGV in eine DataTable zu bekommen, muss ich wirklich das ganze Zeilenweise "umkopieren",
oder gibt es elegantere Wege.


Analog dazu würde ich auch das Lesen ändern. Dazu werde ich, wie hier bereits beschrieben mit einer BindingSource
vorgehen.
Ich möchte halt nicht zu viel ändern, da das vorhandene Projekt wirklich sehr komplex mit sehr sehr vielen
Codezeilen ist, daher würde ich gerne nur lokal an den einzelnen Stellen veränderungen vornehmen und nichts mehr
grundsätzliches ändern...

Danke für Tips
Christoph1972
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: Do 21.07.11 09:35 
Es wird mit einem DataGridView direkt gearbeitet und beim Speichern des grids die Zeilen
in einer Schleife gelesen und letztendlich in einer Textdatei gespeichert.


Das solltest du ändern, das ist unglücklich gelöst! Ein DataGrid wird immer an eine DataTable oder View gebunden. Dann kannst du alle gebotenen Möglichkeiten der Table und Views ausschöpfen. Z.B. Wirte/ReadXML, Select usw.

Du solltest mit der Umstrukturierung dort anfangen, wo das DataGridView mit Daten gefüllt wird, hier müssen die Daten in einem DataTable oder View landen. Wo kommen die Daten denn her, werden sie schon in einer Tabelle gehalten? (dann hat deine Vorgänger keine Ahnung gehabt)

_________________
Gruß
Christoph
yndaso Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 108



BeitragVerfasst: Do 21.07.11 09:59 
Danke für die Antwort. Wenn es so einfach umzubauen würde ich es machen.
Aber die Anwendung ist eine historische Anwendung und wirklich rießengroß.
Ich habe auch schon mehrfach mit dem Kopfgeschüttelt. Es überstreckt sich über mehrere
Klassen. Die hauptklasse alleine beinhaltet über 15000 Codezeilen.

Angenommen ich würde hergehen und beim Einlesen über eine BindingSource das DGV füllen.
Normalerweise arbeitet man ja dann direkt mit dem DataSet und dann nicht mehr mit dem DGV direkt, oder?
Würde es eine Rolle spielen wenn im weiteren Verlauf weiterhin direkt mit dem DGV gearbeitet wird?
yndaso Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 108



BeitragVerfasst: Do 21.07.11 10:01 
user profile iconChristoph1972 hat folgendes geschrieben Zum zitierten Posting springen:

Wo kommen die Daten denn her, werden sie schon in einer Tabelle gehalten? (dann hat deine Vorgänger keine Ahnung gehabt)


Die Daten kommen entweder aus einer bereits vorhandenen ConfigDatei (Besagte Textdatei) oder werden anhand
diverser ini files im Programm generiert, oder werden direkt vom Benutzer eingegeben...
Christoph1972
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 690
Erhaltene Danke: 16


VS2015 Pro / C# & VB.Net
BeitragVerfasst: Do 21.07.11 10:33 
user profile iconyndaso hat folgendes geschrieben Zum zitierten Posting springen:

Würde es eine Rolle spielen wenn im weiteren Verlauf weiterhin direkt mit dem DGV gearbeitet wird?


Das geht nicht da ja eine Bindung besteht. Du müsstest alle Aktionen die am Grid durchgeführt werden auf das Table/View anwenden.

_________________
Gruß
Christoph
yndaso Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 108



BeitragVerfasst: Do 21.07.11 10:53 
user profile iconChristoph1972 hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconyndaso hat folgendes geschrieben Zum zitierten Posting springen:

Würde es eine Rolle spielen wenn im weiteren Verlauf weiterhin direkt mit dem DGV gearbeitet wird?


Das geht nicht da ja eine Bindung besteht. Du müsstest alle Aktionen die am Grid durchgeführt werden auf das Table/View anwenden.


Ja habs gemerkt. Sobald man direkt mit dem DGV operiert "kracht" es...

Naja gut, werde nun mal in zwei schritten vorgehen:
1. Lesen und Schreiben in Datei mit der DataTable.WriteXml Methode ersetzen.
und dann in einer Schleife Werte aus der DataTable ins DGV kopieren u. umgekehrt.

2. In einem zweiten Lauf auf Table/View umstellen...

Danke für die Tipps
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4795
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Do 21.07.11 10:54 
Hallo yndaso,

da kann man ja eigentlich nur sagen: "Mein Beileid". Das scheint ja ein wirkliches Horrorprojekt zu sein...

Am besten wird wohl sein, du führst die Umstellung auf "Data Binding" in mehreren Schritten durch:
- zuerst analysiere und filtere mal alle Methoden, welche direkt auf das DataGridView zugreifen
(evtl. kannst du diese einfach mal in eine andere Datei (mittels "partial class") auslagern)
- dann erstellst du eine Daten-/Modellklasse, welche die Funktionalität nachstellt (ohne Zugriff auf GUI-Komponenten!)
Evtl. mußt du dann einige Ereignisse dort definieren, falls in dem Originalcode auf andere GUI-Elemente zugegriffen wird (Entkopplung von GUI und Logik).
Diese Klasse kannst du dann entweder von DataSet/DataTable ableiten bzw. diese per Komposition einbinden.
- Als letztes erzeugst du nun in der Form-Klasse eine Instanz der Datenklasse (und abonnierst die benötigten Ereignisse) und bindest diese (bzw. bei Komposition über eine DataTable-Eigenschaft) an das DataGridView per DataSource-Eigenschaft
(reine GUI-Funktionalitäten der DataGridView-Methoden wie z.B. Zeichnen oder Farbänderungen etc. sollten selbstverständlich in der Form-Klasse bleiben)

Ich selber hatte auch mal so ein Riesen-Projekt, wo sämtliche GUI (mehrere Tabpages mit Hunderten von Controls) in einer einzigen Formklasse codiert worden war. Das hat dann auch einige Wochen gedauert, daraus dann einzelne UserControls zu extrahieren und die Hauptform zu "entschlacken".

Evtl. wäre das auch für dein Projekt interessant, einzelne GUI-Komponenten als UserControls auszulagern, so daß die eigentliche MainForm nur noch aus wenigen Komponenten besteht (meistens ist es ja so, daß nicht alle GUI-Elemente mit allen anderen GUI-Elementen in Verbindung stehen, so daß man auch hier eine logische Aufteilung vornehmen kann).

Viel Erfolg und gib dann mal Rückmeldung wie es geklappt hat (bzw. stelle Fragen, falls du nicht genau weißt, wie du etwas umsetzen sollst).
yndaso Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 108



BeitragVerfasst: Do 21.07.11 13:32 
Vielen Dank an euch. Ich werde berichten. Doch wie das bei solch Projekten immer ist.
Die Zeit ist zu kurz. Werde nun mal versuchen die Funktionalität so herzustellen und anschließend, wenn
die zeit nicht mehr so drängt, in einer weiteren Phase deine Vorschläge umzusetzen.
Das hat sich sehr gut angehört!