Mehrere Datagridviews über Schleife ansprechen

Maggo13

Grünschnabel
Hy,

ich habe ein Formular und auf diesem ein TableLayoutPanel.

In den einzelnen Zellen habe ich ein benutzerdefiniertes Steuerelement. In diesem ist oben ein Labelfeld und untendrunter ein datagridview.

Nun gehe ich über eine Schleife die einzelnen benutzerdefinierten Steuerelemente durch. Dabei ändere ich den Text im Label und will dann dem datagridview unteranderem den datasource zuweisen.

Beim Label klappt alles wunderbar. Nur beim datagrid bekomme ich die Fehlermeldung: "datasource" ist kein Member von "systems.windows.forms.control".

Hier der Code:

Code:
    Sub TageEintragen(ByVal vardate As Date, ByVal zaehler As Integer)

        Dim ctlName As String = "CtlMF" & zaehler
        Dim ctlName2 As String = "lblDatum"
        Dim ctlName3 As String = "DGVTermine"

        'Tageszahl füllen
        TableKalender.Controls(ctlName).Controls(ctlName2).Text = CStr(DateAndTime.Day(vardate))



        'Kalenderdaten füllen
        Dim strSQL As String
        strSQL = "SELECT format(t_von,'short time') as von, t_Text, datum, id FROM tbl_Termin " & _
                "where datum = " & fct_changeDateSQL(vardate) & " order by t_von"
        Dim con As DbConnection = New OleDbConnection
        con.ConnectionString = My.Settings.DatenConnectionString
        Dim cmd As DbCommand = New OleDbCommand
        cmd.CommandText = strSQL
        cmd.Connection = con
        Dim ds As New DataSet
        Dim da As DbDataAdapter = New OleDbDataAdapter

        da.SelectCommand = cmd
        da.Fill(ds, "Test")


        TableKalender.Controls(ctlName).Controls(ctlName3).datasource = ds

        'CtlMF1.DGVTermine.DataSource = ds
        'CtlMF1.DGVTermine.DataMember = "Test"
        'CtlMF1.DGVTermine.Columns(0).Width = 40
        'CtlMF1.DGVTermine.Columns(1).AutoSizeMode = DataGridViewAutoSizeColumnMode.DisplayedCells
        'CtlMF1.DGVTermine.Columns(2).Visible = False
        'CtlMF1.DGVTermine.Columns(3).Visible = False
    End Sub

Bei

TableKalender.Controls(ctlName).Controls(ctlName2).Text = CStr(DateAndTime.Day(vardate))

kein Problem.

Jedoch bei


TableKalender.Controls(ctlName).Controls(ctlName3).datasource = ds

Achso, DGVTermine = ctlName3 ist das Datagrid. ctlName2 das Labelfeld.

Kann mir jemand helfen?

Gruß
Marco
 
Zuletzt bearbeitet:
Text ist eine Standard Eigenschaft eines jeden Controls.
Datasource ist Control spezifisch, du müsstest als nach datagridview casten.
 
Text ist eine Standard Eigenschaft eines jeden Controls.
Datasource ist Control spezifisch, du müsstest als nach datagridview casten.

Danke für die schnelle Antwort. Doch leider kann ich wenig damit anfangen.

Was heißt nach datagridview casten?

Sorry, noch bin ich Anfänger.

Vielleicht ein Beispiel für meinen Code?

Gruß
Marco
 
Mit TableKalender.Controls(ctlName).Controls(ctlName3)
bekommst du erstmal nur ein objekt vom Typ Control, da alles Controls auf dieses Objekt aufbauen.

Code:
Dim cl As Control = TableKalender.Controls(ctlName).Controls(ctlName3)
If TypeOf cl Is DataGridView Then 'Prüfung ob Control DataGridVIew ist
  Dim grid As DataGridView = DirectCast(cl, DataGridView) 'casten, sprich wir fordern die Struktur des Original Objektes an
  'tu was mit grid
End If
 

Neue Beiträge

Zurück