bestimmte DataGridviewCombobox füllen

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Marsianer.

    bestimmte DataGridviewCombobox füllen

    Hallo zusammen, dies ist mein erster Beitrag in diesem Forum.
    Also dann werde ich mir versuchen diesen ersten Beitrag ordentlich und verständlich zu verfassen :)

    Folgendes:

    Ich möchte ein DataGridView manuelle zur Laufzeit mit dynamischen Werten aus einer Datenbank erstellen.
    Folgendermaßen möchte es es realisieren:

    Zunächst hole ich aus einer Datenbank über eine Select distinct(..) Abfrage bestimmte Werte und lege sie in ein Dataset ab.
    Nun übergebe ich diese Werte in einer DataTable

    Mit Hilfe des DataRow lese ich die in einer For each Schleife aus und übergebe sich mit Rows.Add in der For each Schleife einem Datagridview.

    Gleichzeitig in dieser Schleife rufe ich mit diesen Werten mit einer Select Abfrage im where Zweig andere Werte auf.
    Bis hierhin funktioniert alles einwandfrei.
    Ab hier brauche ich eine Hilfestellung:
    Nun möchte ich die Werte aus der zweiten Select Abfrage innerhalb der Schleife die Daten in einer bestimmten DataGridViewComboBox ablegen.
    Wenn ich das über DataGridVeiwCombox. Datasource mache, bekommen alle ComboBoxen in dieser Spalte die gleichen Werte des letzten Durchlaufs der Schleife.
    Ich möchte aber, das jede comboxBox die Werte der entsprechenden Select Abfrage bekommt.
    Hier mein Code:


    VB.NET-Quellcode

    1. Sub test()
    2. Dim cmb As New DataGridViewComboBoxColumn
    3. Dim dr As DataRow
    4. Dim dt As DataTable
    5. Form1.dgv.Columns.Add("Zahl", "Zahl")
    6. Form1.dgv.Columns.Add(cmb)
    7. cmb.HeaderText = "Box Nr."
    8. cmb.DisplayMember = "Box_nr"
    9. dt = fillControl("Select distinct(Zahl) from Training where system = '" & getSystem() & "' and versuchsleiter='" & Form1.comboTechnican.Text & "' and session_date > sysdate - 28 and tier_nr < 9999 order by Zahl asc")
    10. For Each dr In dt.Rows
    11. Form1.dgv.Rows.Add(dr(0))
    12. ' Ab hier komme ich nicht weiter
    13. 'Wenn ich dieses Version versuche kommt ein Fehler
    14. 'fillControl ist eine Funktion die mir die entsprechenden Werte zurück gibt. Funktioniert.
    15. Form1.dgv.Rows.Add(cmb.Items.Add(fillControl("Select Box_nr from Training where session_date >= sysdate-4 and Zahl = " & dr(0) & " order by insert_id desc")))
    16. 'Und hier werden keine Werte geschrieben'fillControl ist eine Funktion die mir die entsprechenden Werte zurück gibt. Funktioniert.
    17. cmb.Items.Add(fillControl("Select box_nr from Training where session_date >= sysdate-4 and tier_nr = " & dr(0) & " order by insert_id desc"))
    18. 'Wenn ich es über die Data Datasource Methode mache, haben die ComboBoxen alle die gleichen Werte
    19. 'fillControl ist eine Funktion die mir die entsprechenden Werte zurück gibt. Funktioniert.
    20. cmb.DataSource = fillControl("Select box_nr from Training where session_date >= sysdate-4 and Zahl = " & dr(0) & " order by insert_id desc")
    21. Next
    22. End Sub



    Hat vielleicht jemand nen Tipp oder habe ich einen falschen Denkansatz?

    Gruß
    Markus

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Spiders0815“ ()

    Spiders0815 schrieb:

    habe ich einen falschen Denkansatz?

    IMO mehrere.

    erstmal VB-Tag richtig benutzen - es ist möglich ;)

    Dann arbeitest du mit String-Gefrickel statt mit DBParametern. Irgendwann scheitert das (vorzugsweise bei Datum-Werten), und man kanns wieder mühsam hinwursteln. Man kanns aber auch gleich richtig machen, dann wäre auch das SqlInjection-Problem vom Tisch.

    Dann schließt dein Ansatz von vornherein aus, eine Oberfläche mit Databinding zu gestalten.

    Dabei ist Databinding eminent praktisch zum Entwickeln von Oberflächen. Guggemol die Sachen aus DataExpressions durch, und überleg, wieviel Code du bräuchtest, um das ohne Databinding hinzubasteln.

    Edit: Erledigt? aber das ist ja ganz unstrukturiert, wo sind die Einrückungen? Muß man doch nur ausse IDE nochmal einpasten, und dann ists erledigt.
    Hi,
    danke für die Antwort.
    Also ich habe mir jetzt DataExpression angeschaut,aber das ist nicht das Ziel das ich erreichen möchte.
    Meine Idee ist es mit einem DataGridView zu realisieren,
    das ich mit dem DataGridView täglich Daten einlesen möchte die ich evtl. verändern kann und anschließend in einer andere DB Tabelle schreibe.


    Also es sind Parameter die täglich eingelesen werden. Und zwar Parameter der letzten vier Tage.

    Um es besser zu verstehen:

    Ich trainiere Tiere, die ein gewisses Verhalten lernen sollen und auch können.
    Dazu brauche ich ein tägliches Trainingsprogramm.
    Dieses Trainingsprogramm bezieht sich aus Parameter der Trainingsdaten der letzen 4 Tage.

    Also lese ich die Trainingsparameter der letzen vier Tage ein, bilde sie in einem DataGridview ab.
    Da ich aber evtl. die Parameter verändern möchte , möchte ich das DataGridview mit ComboBoxen oder Checkboxen ausstatten.

    Ich könnte ja einfach die Daten per Datasource in das DataGridView schreiben. Dann hätte ich die Daten der letzten vier Tage untereinander.

    Ich möchte mit der ersten Select Abfrage alle vorhandenen Tiere einlesen.

    Diese werden dann in der ersten Spalte eingetragen. In der 2. Spalte wird die Boxnummer in der die Tiere in den letzen 4 Tagen gesessen haben in einer ComboBox eingetragen. ( 2. Select Abfrage)

    Also in Reihe 1 in der ersten Spalte Tiernr1 in der 2 Spalte Boxnr. 1,1,1,2
    Reihe 2 Tiernr 2 Boxnr. 2,2,2,1

    So in etwa.
    naja, ist eine Frage des Datenmodells.
    Du willst also alle Tiere in Spalte 1 auf listen.

    Und die entsprechenden Boxen, wo sie in den letzten 4 Tagen gesessen sind sollen in Spalte 2.

    Was aber, wenn ein Tier vor 2 Tagen von Box2 nach Box1 verlegt wurde - was soll dann bei diesem Viech in Spalte 2?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Ich versteh noch nicht ganz, was du mit Parametern willst, bzw. was du damit genau meinst. Parameter sind für mich Werte, die ein User eingibt und die dann als Abfrage-Parameter(sic!) in ein SQL-Ding eingebaut werden, vorzugsweise bei WHERE-Klausel.

    Vielleicht hab ich das ja mißverstanden, aber was ich deinen Beschreibungen entnehme klingt für mich eher nach 1:n bzw. n:m-Beziehungen.
    Das ganze kreist doch um deine Tiere, also sind sie sozusagen die Haupttabelle (id, Name, Alter, Geschlecht, wasauchimmer). Und dann haste da noch Verhalten, das du an ihnen beobachten (willst). Also Tabelle "Verhalten" (id, Name, Beschreibung, wasauchimmer). Dieses Verhalten ordnest du über eine dritte Tabelle den Tieren zu (TierID, VerhaltenID, Datum(der Beobachtung), Erfolgreich (Ja/Nein), Bemerkungen). So und dann haste noch weitere Daten, die zB bei den Boxen, was nach n:m-Relation aussieht. Boxentabelle und dann Verknüpfungstabelle zu den Tieren (TierID, BoxID, Datum (wann Fido dieser speziellen Box war)). Ähnlich kann das auch noch mit anderen Dingen wie Futter, Trainingseinheiten usw. sein.

    Bisher sehe ich keine Parameter, sondern Tabellen, die Beziehungen zueinander haben und die ich in einem typisierten DataSet abbilden würde, aus welchem ich dann auch DataGridViews generieren kann. Größtenteils mit der Maus und ein wenig Handarbeit hinterher.

    Bitte korrigiere mich, wenn ich jetzt völlig falsch liege.
    Ich code nur 'just for fun'! Damit kann ich jeden Mist entschuldigen, den mein Interpreter verdauen muss :D