Spalten ausblenden in DatagridView

  • VB.NET

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

    Spalten ausblenden in DatagridView

    Hallo Zusammen,
    ich stehe hier vor einem Problem und komme nicht weiter. Bin dabei eine DB-Anwendung zu Programmieren und es scheitert aktuell daran, dass ich die angezeigten Spalten im Datagridview auf Benutzerebene ausblenden möchte.
    Am liebsten werden die angezeigten Spalten in eine Variable gespeichert, die ich zur Laufzeit ändern kann.

    Habt ihr eine Idee?

    ferro schrieb:

    Habt ihr eine Idee?

    Du kannst folgendermaßen vorgehen:
    • schalte das automatische Erzeugen der Spalten in Deinem DataGridView aus mit AutoGenerateColumns = false
    • lege Deine Spalten per Code an, benenne sie, gebe ihnen den richtigen Typ
    • lege fest, welche Spalten Deiner DataTable an welche Spalten des DataGridView gebunden werden DeinDataGridView.Columns[0].DataPropertyName = "DeinDataTableFeld" usw. usw.
    • Binde dann Deine DataTable an das DataGridView DeinDataGridView.DataSource = DeineDataTable

    Du kannst dann natürlich zur Laufzeit jederzeit die Spaltenzuordnung ändern und neu binden!


    LG,
    Bruno
    Hallo Leute,
    ich habe mich mittlerweile damit anbefunden die Daten programmatisch zu Selektieren und nichts mit dem Designer zu machen (naja bis auf Positionieren und Ausrichtungen usw).

    Der Code sieht wie folgt aus:

    Quellcode

    1. initDataGridPosData("SELECT " + getColumnsPosdata() + " FROM tblPositionsdaten WHERE vstel='" + My.Settings.Versandstelle + "'")


    Quellcode

    1. Me.dbBindingSource = New BindingSource()
    2. Me.setDataSet(sqlCommand, "dgvPosdata")
    3. Me.dbBindingSource.DataSource = Me.dbDataSet.Tables("dgvPosdata")
    4. dgvPosData.DataSource = Me.dbBindingSource

    Der String sqlCommand wird vorher generiert. Hierbei lese ich dieferse Parameter aus My.Settings und Concatiere ist zu einem SQL-Befehl.
    Ich benötige die Daten in My.Settings, da diese Benutzerabhängig angepasst werden sollen.

    ....

    Quellcode

    1. Private Function getColumnsPosdata() As String
    2. Dim spalten As String
    3. For i = 0 To My.Settings.UsedColumnsPosdata.Count - 1
    4. If (i = 0) Then
    5. spalten += My.Settings.UsedColumnsPosdata.Item(i).ToString
    6. Else
    7. spalten += ", " + My.Settings.UsedColumnsPosdata.Item(i).ToString
    8. End If
    9. Next
    10. If (String.IsNullOrEmpty(spalten)) Then
    11. Return "*"
    12. Exit Function
    13. End If
    14. Return spalten
    15. End Function
    16. Private Sub getDataSet(ByVal sqlCommand As String, ByVal datasetName As String)
    17. Try
    18. Me.dbDataAdapter = New MySqlDataAdapter(sqlCommand, My.Settings.DatabaseConnectionString)
    19. Me.dbDataSet = New DataSet()
    20. Me.dbDataAdapter.Fill(Me.dbDataSet, datasetName)
    21. Catch ex As Exception
    22. MsgBox("FEHLER 'GET_DATA-SET:" + datasetName + "' :" + vbCrLf + ex.Message, MsgBoxStyle.Critical)
    23. End Try
    24. End Sub

    ferro schrieb:

    dass ich die angezeigten Spalten im Datagridview auf Benutzerebene ausblenden möchte.
    Aber nicht alle, oder?
    Und wo war das Problem? Jede DatagridViewColumn hat eine Visible-Eigenschaft. Also im Designer das DGV komplett gestalten, und mw. zum Startup halt nach Belieben bestimmte Spalten ausblenden.

    ferro schrieb:

    Am liebsten werden die angezeigten Spalten in eine Variable gespeichert, die ich zur Laufzeit ändern kann.
    mehrere Spalten kann man normal nicht in einer Variable speichern. Man nähme dazu ein Array, oder eine List(of T).
    Aber es ist unnötig, die DatagridViewColumns mit .Visible=False extra zu speichern. Die sind doch im DGV drinne, braucht man doch nur (auf Invisiblität gefiltert) abzurufen.

    Aber du hast dich ja nu ganz vom Designer abgewandt - das ist der ganz mühsame, unsichere und ineffiziente Weg.
    Also falls du mal davon die Nase voll hast, schau mal in vier Views-Videos rein, wie einfach das alles sein kann, und wie mächtig das ist.