DataGridView mit DataTable füllen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Hotdogxxxx.

    DataGridView mit DataTable füllen

    Hallo Ihr wissenden,

    ich habe ein DataGridview die als Quelle eine DataTable hat.
    Diesen Datatable wird mittels einer Funktion aus einer SQL-Datenbank gefüttert.
    Soweit funktioniert auch auch das befüllen.
    Aber nach dem befüllen möchte ich das Format des DataGridView ändern. Z.B. möchte ich eine Spalte aus dem Datengridview löschen Anzahl der Zeilen auslesen usw.
    Dies geht aber nicht, da die Spalten und die Daten nach dem befüllen noch nicht erkannt werden. erst wenn der Code durchgelaufen ist, kann ich durch einen getrennten Befehl über ein Button z.b. gewünchtes erreichen.
    Muss ich dazwischen irgendwas refeshen oder wie erreiche ich das die Daten gleich erkannt werden.

    Quellcode

    1. ...
    2. Dim SQL_Codeas String = "...."
    3. Dim Datentabelle As New DataTable
    4. Datentabelle = SQL_DB.Werte_ins_DATAGRID_Laden(SQL_Code) '<---- Ruft die Daten vom SQL-Server ab und gibt in Return die befüllte Datatable zurück
    5. With .dgv_Daten
    6. .DataSource = Datentabelle
    7. '--- Ab hier funktioniert es nicht da er die Daten (Zeilen, Spalten) noch nicht erkannt hat. Nehme ich diesen Teil raus funktioniert es wie gewollt
    8. '--- z.B. würde Datentabelle.rows.count() die richtige Anzahl der Zeilen auswerfen aber .rows.count() ergibt 0. Selibes mit den Spalten.
    9. .Height = .Rows.Count() * .Rows(0).Height + 2
    10. With .Columns(0)
    11. .Width = 100
    12. .HeaderText = "Period"
    13. End With
    14. With .Columns(1)
    15. .Width = 100
    16. .DefaultCellStyle.Format = "$ #,###"
    17. .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
    18. .DefaultCellStyle.NullValue = "n/a"
    19. End With
    20. With .Columns(2)
    21. .Visible = False
    22. End With
    23. end with
    Hiho,

    einmal bitte nicht den Code Tag, sondern den VB.Net Tag benutzen, damit das ganze mal etwas leserlicher wird. Und auch die unnötigen Tabs entfernen. Man hat ja kaum nen Überblick was da steht.

    PS: Man löscht bei einem gebundenen Datagrid nicht rum... Es ist schließlich gebunden! Aber wie ich das sehe löscht du nicht, sondern willst nur ne Spalte unsichtbar machen bzw. formatieren.

    Bitte mal ordentliche Errormeldungen posten. Ich möchte das ganze Konstrukt nicht selber nachbauen müssen.

    Zudem glaube ich dass da noch bisl was an Quellcode fehlt.
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D
    ich rate gänzlich von derlei untypisierter Programmierung ab.
    Bastel oder generiere dir ein typisiertes Dataset, und mach dann derlei Design-Sachen im Designer (dafür isser da).

    Das wird eine ganz neue Welt für dich sein, also den Einblick wie das dann am Ende läuft zeigt dir vlt. Film IX auf die vier Views auf Video

    Aber bis dahin ist noch einiges an Weg.
    Vor allem dein jetziges Projekt wird einen kompletten Rewrite benötigen, und zwar zunächst mal einen ohne Datenbank.

    So, jetzt biste abgeschreckt, aber guck dir spasseshalber trotzdem den Film an.
    Vielen Dank schonmal.
    Ich schaue mir das Video mal an aber alles neuschreiben... <X
    Stimmt an sich lösche ich nichts da ich nur die Daten einbinde die ich benötige. Die eine Spalte mache ich unsichtbar da, es um die Sortierung geht. Rest ist nur Formatierung bzw. ich möchte zum späteren Zeitpunkt die Position anderer Controls der Größe des DataGridviews anpassen.

    VB.NET-Quellcode

    1. Dim SQL_Codeas String = "...."
    2. Dim Datentabelle As New DataTable
    3. Datentabelle = SQL_DB.Werte_ins_DATAGRID_Laden(SQL_Code) '<---- Ruft die Daten vom SQL-Server ab und gibt in Return die befüllte Datatable zurück
    4. With Me.dgv_Daten '<-- = DataGridView Control
    5. .DataSource = Datentabelle
    6. '<<< Ab hier geht es nicht
    7. .Height = .Rows.Count() * .Rows(0).Height + 2
    8. With .Columns(0)
    9. .Width = 100
    10. .HeaderText = "Period"
    11. End With
    12. With .Columns(1)
    13. .Width = 100
    14. .DefaultCellStyle.Format = "$ #,###"
    15. .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
    16. .DefaultCellStyle.NullValue = "n/a"
    17. End With
    18. With .Columns(2)
    19. .Visible = False
    20. End With
    21. end with
    22. Public Shared Function Werte_ins_DATAGRID_Laden(ByVal SQL_Code As String) As DataTable
    23. Dim DatenTable As New DataTable
    24. Using SQL_Connection As New SqlConnection(SQL_DB.ConnectionString)
    25. Dim SQL_Adapter As New SqlDataAdapter(SQL_Code, SQL_Connection)
    26. SQL_Connection.Open()
    27. SQL_Adapter.Fill(DatenTable)
    28. SQL_Connection.Close()
    29. SQL_Adapter = Nothing
    30. End Using
    31. Return DatenTable
    32. End Function

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

    Versuch es halt mal so:

    VB.NET-Quellcode

    1. Dim SQL_Code As String = "...."
    2. Dim Datentabelle As New DataTable
    3. Datentabelle = SQL_DB.Werte_ins_DATAGRID_Laden(SQL_Code) '<---- Ruft die Daten vom SQL-Server ab und gibt in Return die befüllte Datatable zurück
    4. dgv_Daten.DataSource = Datentabelle '<-- = DataGridView Control
    5. dgv_Daten.Height = dgv_Daten.Rows.Count() * dgv_Daten.Rows(0).Height + 2
    6. With dgv_Daten.Columns(0)
    7. .Width = 100
    8. .HeaderText = "Period"
    9. End With
    10. With dgv_Daten.Columns(1)
    11. .Width = 100
    12. .DefaultCellStyle.Format = "$ #,###"
    13. .DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight
    14. .DefaultCellStyle.NullValue = "n/a"
    15. End With
    16. With dgv_Daten.Columns(2)
    17. .Visible = False
    18. End With
    19. End Sub

    @OMA: Vielen Dank für die Hilfe. Es führt aber zu dem selben Problem, dass versucht wird das Format des DataGridView zu ändern noch bevor es vollständig geladen wurde.

    Ich habe es aber wie folgt gelöst. Jetzt funktioniert es. Vielen Dank für eure mühen.

    VB.NET-Quellcode

    1. Private Sub Format_Des_Datengrid_Aendern(sender As Object, ByVal e As System.Windows.Forms.DataGridViewBindingCompleteEventArgs) _
    2. Handles FFAData.DataBindingComplete
    3. '.... Wenn ich hier den oben stehenden Code zum formatieren des DataGridView einsetzte funktioniert es wie gewünscht
    4. End Sub