Autor |
Beitrag |
Skiller-1988
      
Beiträge: 100
Win XP | Debian | Ubuntu
C# | PHP | VB.NET
|
Verfasst: Mo 29.09.08 07:26
Hi,
ich habe das Problem das ich ein DataGridView mit den Daten aus einer Datenbank füllen möchte allerdings liegen die Daten durch die Datenbankstruktur so vor das ich das nicht einfach füllen kann sondern ich müsste eigentlich Spaltenweise füllen können? Kann man das DataGridView Spaltenweise füllen? (Was ich bisher probiert habe kam ich immer nur zu den Ergebnis das ich Rows also Zeilen mit mehreren Spalten hinzufügen kann)
Momentan habe ich das ganze über ein 2 Dimensionales Array gelöst so dass ich die Daten erst Abrufe aus der Datenbank, dann in ein DataTable fülle, dann von der DataTable ins 2 Dimensionale Array übertrage (Spaltenweise so das hier meine "Formatierung" statt findet) und anschließend vom Array ins DataGridView.
Allerdings denke ich das es nicht die beste Lösung ist. Oder kann man ganz und gar die Zellen des DataGridView ähnlich wie ein 2 Dimensionales Array füllen?
Ich hoffe ihr versteht mein Problem und jemand hat einen Lösungsansatz.
_________________ ~ Wer Rechtschreibfehler findet darf sie behalten ~
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Mo 29.09.08 13:37
Wie sieht denn die DB-Struktur aus und wie formst du sie um? Und warum sieht sie überhaupt so aus, wie sie aussieht  ?
_________________ >λ=
|
|
Skiller-1988 
      
Beiträge: 100
Win XP | Debian | Ubuntu
C# | PHP | VB.NET
|
Verfasst: Mo 29.09.08 15:52
Hm,
also die in der Datenbank gibts eine Tabelle mit der ich eine art Stundenplan für eine woche realisieren möchte die Tabelle besitzt Felder wie Datum ( also der Tag ) und Stunde ( also die Unterrichtsstunde) und noch ein paar entsprechende Fremdschlüssel.
Alledings Wird jetzt bei der SQL Abfrage natürlich das Datum und die Stunden usw. Zeilenweise ausgegeben und nicht so wie ich es im GridView haben möchte, also in Form eines Stundenplans.
Hauptproblem ist eigentlich das Spaltenweise füllen der einzelnen Tage mit entsprechenden Sunden ( also die Fächer )
Momentan habe ich das halt mit einen 2 Dimensionalen Array gelöst wo es naturlich keine Probleme gibt das spaltenweise zu füllen.
Nur gibt es nicht eine bessere Lösung als diese? Hat einer ne Idee?
_________________ ~ Wer Rechtschreibfehler findet darf sie behalten ~
|
|
Skiller-1988 
      
Beiträge: 100
Win XP | Debian | Ubuntu
C# | PHP | VB.NET
|
Verfasst: Di 30.09.08 12:41
Ich will ja nicht nerver aber hat eventuell einer eine Idee?
Kann mir jemand sagen ob man das DataGridView ähnlich wie ein 2-Dimensionales Array befüllen kann also die Zellen einzeln ansprechen kann und nicht Zeilenweise füllen muss.
Es würde mir naturlich auch wass bringen wenn ich das Dataset bzw. die DataTable so füllen könnte ist ja klar weil ich soe ja dann als DataSource zuweisen könnte.
kann man Wert in eine DataTable bzw. DataSet so hinzufügen wie man z.B. dt.Rows[1][2]; abfragen kann also ähnlich wie ein 2 Dimensionales feld.
_________________ ~ Wer Rechtschreibfehler findet darf sie behalten ~
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Di 30.09.08 13:10
Vielleicht ist auch DataGridView.VirtualMode etwas für dich, damit kannst du die DGV-Felder direkt auf deine DataTable umbiegen. Denn wenn du die Daten manuell in ein Array/das DGV überträgst, müsstest du sie ja auch beim Speichern zurück übertragen.
_________________ >λ=
|
|
Skiller-1988 
      
Beiträge: 100
Win XP | Debian | Ubuntu
C# | PHP | VB.NET
|
Verfasst: Di 30.09.08 13:41
ne das was ich da gelesen habe hilft mir auch nicht direkt.
_________________ ~ Wer Rechtschreibfehler findet darf sie behalten ~
|
|
Skiller-1988 
      
Beiträge: 100
Win XP | Debian | Ubuntu
C# | PHP | VB.NET
|
Verfasst: Di 30.09.08 16:57
Ok jetzt habe ich das erstmal richtig verstanen mit den VirtualMode ja beim Speichern würde mir das dann ungemein helfen allerdings ist es leider trozdem keine Lösung für mein Ausgangsproblem.
_________________ ~ Wer Rechtschreibfehler findet darf sie behalten ~
|
|
Kha
      
Beiträge: 3803
Erhaltene Danke: 176
Arch Linux
Python, C, C++ (vim)
|
Verfasst: Di 30.09.08 19:14
Skiller-1988 hat folgendes geschrieben: | allerdings ist es leider trozdem keine Lösung für mein Ausgangsproblem. |
Über die EventArgs von CellValueNeeded bekommst du doch Zeile und Spalte, also Stunde und Tag. Und das kannst du dann z.B. an DataTable.Select schicken.
_________________ >λ=
|
|
Skiller-1988 
      
Beiträge: 100
Win XP | Debian | Ubuntu
C# | PHP | VB.NET
|
Verfasst: Do 02.10.08 13:09
Ich glaube ich stehe gerade ein bisschen auf den Schlauch, kannst du mir deine Idee mal ein bisschen ausführlicher erklären.
Ich habe inzwischen auch versucht andere Lösungen hinzubekommen und zwar habe ich es in Access aus der Abfrage ( die ja Unformatiert ist )eine PivotTabelle gemacht und genau so formatiert wie es sein sollte nun ist allerdings mein Problem ich finde keine anständige Lösung die jetzt in C# zu verwenden, es gibt zwar Selbstgeschriebene Klassen in denen ich aus einer DataTable eine Art Pivot Tabelle machen kann allerdings möchte ich die in meiner Lösung nicht unbedingt verwenden.
Andere Idee von mir ist die Daten innerhalb des Dataset bzw. DataTable zu gruppieren und formatieren. In wie weit ist das möglich? muss ich dazu erstmal LINQ lernen?
_________________ ~ Wer Rechtschreibfehler findet darf sie behalten ~
|
|
lilalaunebaer
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Do 02.10.08 23:45
hallo .. also das datagridview ist da einfach die falsche komponente fürs DIREKTE darstellen der queries, weil wie gesagt ja alles um "90 grad gedreht" aus der sql-abfrage kommt.
du kannst dir aber einen eigenen datentyp schreiben der als felder uhrzeit + die tage mo-fr enthält (also die tabellenstruktur des stundenplans) und diese dann in einer von CollectionBase abgeleiteten klasse unterbringen. dann instanz erzeugen, liste mit entsprechenden
items füllen und als datasource für eine bindingsource festlegen, an die das datagridview gebunden ist. dann bekommst du deinen stundenplan.
und wenn du im designer die columns schon festlegen willst, kannst du deine collectionbase auch IComponent implementieren lassen und dann IListSource implementieren, und schon kannst du eine komponente (erst rebuild!) auf die form ziehen und dann als datasource für die bindingsource festlegen ... ist zwar viel drum herum aber das ist die luxusvariante
grüße
|
|
Skiller-1988 
      
Beiträge: 100
Win XP | Debian | Ubuntu
C# | PHP | VB.NET
|
Verfasst: Fr 03.10.08 11:46
Ok danke für deine Antwort ich habe zwar gehofft das es ein bisschen einfacher also sprich mit weniger aufwand geht aber wie es aussieht nicht. Ich werde das mal Testen und die HAubtsache ist ja das es funktioniert.
_________________ ~ Wer Rechtschreibfehler findet darf sie behalten ~
|
|
Skiller-1988 
      
Beiträge: 100
Win XP | Debian | Ubuntu
C# | PHP | VB.NET
|
Verfasst: Sa 04.10.08 21:50
So ich habe jetzt doch selber eine Möglichkeit gefunden die ich für relativ optimal halte und zwar ist dies folgende.
Ich formatiere mir die Daten mit einer Kreuztabellenabfrage und lade dann das DataTable so formatiert wie ich es wollte. Allerdings fuktionieren innerhalb der abfrage keine SQL-Parameter mehr weis jemand woran das liegen kann? Es liegt aber definitiv an der Kreuztabellenabfrage weil ich die gleichen Parameter bereits aus test zwecken in einer "normalen" Abfrage ausprobiert habe un es hat funktioniert.
_________________ ~ Wer Rechtschreibfehler findet darf sie behalten ~
|
|