Datagridview - vorhandene Spalten befüllen

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

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Datagridview - vorhandene Spalten befüllen

    Hallo.
    Ich bin zwar Anfänger auf dem Gebiet vb.net , will aber trotzdem mein Programm ohne Assistenten erstellen.
    Dabei habe ich nun folgendes Problem:

    Ich habe ein Formular erstellt mit einem ungebundenen Datagridview1.
    Für das Datagridview habe ich mit dem Designer 5 ungebundene Spalten erstellt. (3x Combobox und 2x Textbox)

    Ich möchte nun dass diese 5 Spalten mit Daten aus einer DataTable (dt) befüllt werden.
    Im folgend gezeigten Beispiel werden aber zusätzlich 5 Spalten im DGV erzeugt wo dann die Daten angezeigt werden.

    VB.NET-Quellcode

    1. Imports System.Data.OleDb
    2. Public Class Form1
    3. Private conn As New OleDbConnection
    4. Dim da As OleDbDataAdapter = Nothing
    5. Private dt As DataTable = Nothing
    6. Private dv As DataView = Nothing
    7. Private drv As DataRowView = Nothing
    8. Dim lokPfad As String
    9. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    10. 'Datenzugriff
    11. lokPfad = My.Settings.DbPfad
    12. 'Datenverbindung
    13. conn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & lokPfad & "\KPlanung_Daten.accdb")
    14. 'DatenAdapter
    15. da = New OleDbDataAdapter("SELECT TransArt, Kategorie, Einrichtung, Umsatz, Konto FROM tbl_VorgabeFixk ORDER BY Kategorie, Einrichtung", conn)
    16. 'CommandBuilder
    17. Dim cb As New OleDbCommandBuilder(da)
    18. 'DataTable
    19. dt = New DataTable("Vorgaben")
    20. 'DataView
    21. dv = New DataView(dt)
    22. 'BindingSource
    23. Dim bs As New BindingSource()
    24. bs.DataSource = dv
    25. DataGridView1.DataSource = bs
    26. conn.Open()
    27. da.Fill(dt)
    28. conn.Close()
    29. End Sub
    30. End Class


    Geht das überhaupt?

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Hallo,

    wenn du die DataSource property verwendest, dann generiert dein DataGridView die Spalten von alleine.
    Das kann man abschalten, aber wozu?

    Einzelne Spalten einer DataGridView kann man glaube ich nicht binden.

    Wenn du jede Spalte einzeln befüllen willst,
    musst du eine Anzahl x an DataGridViewRows erstellen und deren ItemArray selber befüllen.

    ComboBox Spalten können nicht per DataGridView.DataSource befüllt werden.

    DataGridViewComboBoxColumn Objekte sind zudem auf eine bestimmte Anzahl an Elementen gebunden, soweit ich weiß.
    Du müsstest also selber Code schreiben um in deinem DataGridView eine richtige ComboBox hosten zu können.

    Da DataGridViews bekannt sind langsam zu sein, solltest du deren DoubleBuffered Property auf true setzen.
    (Die ist bei den Views nicht public, daher entweder Reflection verwenden oder eine Custom DataGridView erstellen)
    Hier in C# mit Reflection:

    C#-Quellcode

    1. private void EnableDoubleBuffer(Control ctl)
    2. {
    3. if (SystemInformation.TerminalServerSession) return;
    4. var cType = ctl.GetType();
    5. var piInfo = cType.GetProperty("DoubleBuffered",
    6. BindingFlags.Instance | BindingFlags.NonPublic
    7. );
    8. if (piInfo != null)
    9. piInfo.SetValue(ctl,
    10. true,
    11. null
    12. );
    13. }