Zum Inhalt springen

[VB.Net] Zeilenindex im Datagridview zurücksetzen/neu vergeben


Kaeyu

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

Vielleicht ist es veranschaulicht leichter zu verstehen:

unbenannt1du7.jpg

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 von Kaeyu
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :D

Bearbeitet von Kaeyu
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

...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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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).

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich danke euch, funktioniert jetzt alles prima :D

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^^

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...