Kaeyu Geschrieben 15. Januar 2009 Geschrieben 15. Januar 2009 Hallo allerseits! Hab da so ein Problemchen mit der Datagridview. Ich habe darin Daten reingeschrieben, welche ich anschließend im Programmcode sortieren lasse und verbiete es dem Benutzer, die Spalten später sortieren zu können. Die Daten sind erst dann "korrekt" nachdem sie von dem Programm sortiert wurden. Mit diesen Daten muss dann weitergearbeitet werden. Hier mein Problem. Die Indexe bleiben nach wie vor unverändert. Also hat beispielsweise die 1. Zelle in der 2. Zeile den Zeilenindex 15. Normalerweise sollte der ja 1 sein... Gibt es eine möglichkeit die Datagridview zu zwingen, die Indexe zurückzusetzen/neu zu errechnen? .resumeLayout hat nicht funktioniert^^ Gruß Raphael Zitieren
Argbeil Geschrieben 15. Januar 2009 Geschrieben 15. Januar 2009 Das Problem ist mir nicht klar. Hast du eine Spalte in der der Index stehst oder sprichst du vom Index deines Datasets in Relation zum Dgv ? Wenn du keine Index Spalte hast, wieso willst du sie überhaupt neu berechnen? Zitieren
Kaeyu Geschrieben 16. Januar 2009 Autor Geschrieben 16. Januar 2009 (bearbeitet) Vielleicht ist es veranschaulicht leichter zu verstehen: Links unsortiert, rechts sortiert. Die schwarzen Zahlen sind die Werte die in den Zellen stehen. Die roten Zahlen sollen den Index darstellen. Man sieht also, nach dem Sortieren kann man es vergessen weiter mit den Daten zu arbeiten, wenn man eine Berechnung durchführen will, die diese neue Reihenfolge beachten muss. Will ich die Zellen ansprechen, bekomme ich halt den Inhalt der Zelle mit dem entsprechenden Index - der jetzt ja aber falsch ist! Bitte dringenst um Hilfe^^ Edit: Achja, Quicksort, Bubblesort und Co. zum Sortieren bevor die Daten in die Tabelle geschrieben werden ist nicht zu gebrauchen. Da ich nicht nur in einer Spalte, sondern in bis zu 32 Spalten diverse Daten stehen habe, welche nach der 1. Spalte sortiert werden. Bearbeitet 16. Januar 2009 von Kaeyu Zitieren
TDM Geschrieben 16. Januar 2009 Geschrieben 16. Januar 2009 Wenn da einfach nur ein alter (unsortierter) Index drin steht, iterier doch einfach die Tabellenzeilen und schreib den Index-Wert neu... Zitieren
Argbeil Geschrieben 16. Januar 2009 Geschrieben 16. Januar 2009 Hi, ich glaube du hast da einen Designfehler, deswegen nochmal die Frage was du eigentlich vor hast. Prinzipiell erstmal: Man arbeitet nicht mit den Daten in einem Grid, deswegen heißt das Teil auch DataGridView . Du solltest die Daten in einer Datenquelle haben, z.B. ein Dataset oder ein Array. In dieser Quelle sind die Daten nach wie vor unsortiert vorhanden, egal was du in deinem DGV machst. Der Index ist in dem Fall eigentlich nur eine Denk-Hilfe. Deine DataGridViewRows haben ja Referenzen auf die Datenquelle, die immer noch genauso sortiert ist wie vor der Sortierung. Wenn du mir jetzt sagst was du machen willst kann ich dir bestimmt sagen wie de es auch ohne diese Index-Krücke machen kannst. Gruß, Manu Zitieren
Kaeyu Geschrieben 16. Januar 2009 Autor Geschrieben 16. Januar 2009 (bearbeitet) Hi, ich glaube du hast da einen Designfehler, deswegen nochmal die Frage was du eigentlich vor hast. Prinzipiell erstmal: Man arbeitet nicht mit den Daten in einem Grid, deswegen heißt das Teil auch DataGridView . Das DGV benutz ich um bestimmte Daten (wurden in ein Array eingelesen), welche von einem anderen Programm in ein Exceldokument geschrieben wurden, anzuzeigen. Diese Daten werden dann im DGV programmtechnisch sortiert und anschließend will ich sie, so wie sie sortiert wurden, in ein 2-Dimensionales Array einlesen. Darauf folgt dann eine mehr oder weniger komplexe Berechnung mit diesen Daten - was das für eine Berechnung ist und/oder wie diese aussieht kann ich dir nicht sagen, weil es eine Sache unseres Unternehmens ist (bin Azubi). Edit: Mir ist gerade eine Idee gekommen wie ich es evtl. hinbekommen könnte. Ich durchlaufe einfach alle Zeilen des DGV und überprüfe deren Header. Dann könnte ich die komplette Zeile einlesen (da ich den richtigen Zeilenindex habe) und weitermachen. Das ich nicht vorher darauf gekommen bin... Die Zeilenheader dienen dem User als kleine Übersichtshilfe. Werd ich am Dienstag direkt ausprobieren Bearbeitet 16. Januar 2009 von Kaeyu Zitieren
Argbeil Geschrieben 16. Januar 2009 Geschrieben 16. Januar 2009 Wozu müssen die Daten denn dann angezeigt werden, reicht es nicht anzugeben nach welcher Spalte sortiert werden soll? Der Workflow könnte ja nach deiner Beschreibung auch so sein das die Datei selektiert wird, eine Spalte gewählt wird und dann die Berechnung durchgeführt wird. Um wie viele Datensätze geht es denn? Im Prinzip bist doch aber jetzt schon fertig. Ermittle die Spalte nach der das DatagridView sortiert ist und sortiere dein Array nach der gleichen Spalte und starte deine Umkopieraktion. Zitieren
Kaeyu Geschrieben 17. Januar 2009 Autor Geschrieben 17. Januar 2009 ...reicht es nicht anzugeben nach welcher Spalte sortiert werden soll? Nein. Der Workflow könnte ja nach deiner Beschreibung auch so sein das die Datei selektiert wird, eine Spalte gewählt wird und dann die Berechnung durchgeführt wird. Nein, das ist nicht möglich. Jeder Datensatz bzw. Datensatzblock hat eine feste Zuordnung - man könnte auch von einem Primärschlüssel sprechen. Beispielsweise haben die ersten 4 Datensätze die ID 1234 und die nächsten 23 Datensätze die ID 4322. Außerdem leidet dadurch die Performance. Um wie viele Datensätze geht es denn? 1...* - alles ist möglich Ermittle die Spalte nach der das DatagridView sortiert ist Ich glaub du hast mich nicht richtig verstanden^^ Ich gebe im Programm selbst an wonach sortiert wird. Warum sollte ich das ermitteln? und sortiere dein Array nach der gleichen Spalte Um das zu machen müsste das erste Element in dem 2-Dimensionalen Array als eine Art Primärschlüssel fungieren, denn wenn nicht, hab ich zwar die "erste Spalte" in dem Array sortiert und den rest auch, doch die Daten sind dann komplett durcheinander. Wie soll so etwas gemacht werden? Zitieren
Argbeil Geschrieben 17. Januar 2009 Geschrieben 17. Januar 2009 Die Performance würde sich drastisch erhöhen weil du durch das DataGrid dein Speicherverbrauch ungefähr verdreifacht. Also: Du gibst im Programm an wonach sortiert wird, das ist aber keine Spalte sondern du verschiebst jede Zeile einzeln im DataGrid? Dann könntest du jetzt immer noch über alle Row-Elemente deines DGVs zurückliefern, über die Binding-Source an das zugrundeliegende Element kommen und diese Elemente in dein Ziel Array kopieren. Das sortieren ist übrigens kein Problem, du musst natürlich die komplette Zeile umsortieren und nicht nur eine Spalte, aber es müsste NACH dieser Spalte sortiert sein (wobei du ja nicht nach Spaten sortierst). Zitieren
xk4fu Geschrieben 19. Januar 2009 Geschrieben 19. Januar 2009 Das sortieren ist übrigens kein Problem, du musst natürlich die komplette Zeile umsortieren und nicht nur eine Spalte, aber es müsste NACH dieser Spalte sortiert sein (wobei du ja nicht nach Spaten sortierst). seh ich auch so^^ mach nen quicksort, der geht schnell und sollte kein problem darstellen Zitieren
Kaeyu Geschrieben 21. Januar 2009 Autor Geschrieben 21. Januar 2009 Ich danke euch, funktioniert jetzt alles prima Mir ist aufgefallen, dass das DGV so "blöd" wie Windows sortiert. Also würden Beispielsweise die Zahlen 12, 3, 50, 22 als 12, 22, 3, 50 sortiert. Ich hab es dann doch alles in ein Array schreiben lassen. Da wird es dann sortiert und anschließend werden die Werte dann in dem DGV angezeigt. Kann geclosed werden^^ Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.