Benutzer mit den meisten Antworten
Klasse mit List(of String()) in Datagridview anzeigen

Frage
-
Hallo Experten
Innerhalb einer Klasse habe ich
Dim Anhang as new List(of String())
über eine Klassen-Funktion kann ich der Liste Element hinzufügen
PublicSubMailAnhaenge_Add(ByValName AsString, ByValBetreff AsString, ByValPfad AsString, ByValdateiName AsString, ByValtyp AsString)
Anhang.Add({Name, Betreff, Pfad, dateiName, typ})
END SUB
Nun möchte ich einer Form, welche die Klasse benutzt, ein DGV an diese Liste (nicht an die Klasse) binden, wie geht das ???
vielen dank für eure Hilfe ... mfg eem monarch
Antworten
-
Servus Elmar,
wie immer hast du recht ... hab es jetzt wie folgt gemacht ... funzt und ist auch die saubere Lösung.
' 'Form ' Public Class DocMail Dim clMail As Mail 'Klasse Private Sub DocMail_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load '... 'dgvAnlagen binden dgvMailAnlagen.DataSource = clMail.MailAnhang End Sub end class ' 'Klasse Mail + MailAnhang ' Imports System.ComponentModel Public Class Mail Public MailAnhang As New List(Of MailAnhang) Public Sub MailAnhaenge_Add(ByVal Name As String, ByVal Betreff As String, ByVal Pfad As String, ByVal dateiName As String, ByVal typ As String) MailAnhang.Add(New MailAnhang(Name, Betreff, Pfad, dateiName, typ)) End Sub end class Public Class MailAnhang Dim _Name As String Dim _Betreff As String Dim _Pfad As String Dim _DateiName As String Dim _Typ As String Public Sub New(ByVal Name As String, ByVal Betreff As String, ByVal Pfad As String, ByVal dateiName As String, ByVal typ As String) _Name = Name _Betreff = Betreff _Pfad = Pfad _DateiName = dateiName _Typ = typ End Sub Public Property typ As String Get Return _Typ End Get Set(ByVal value As String) _Typ = value End Set End Property Public Property dateiName As String Get Return _DateiName End Get Set(ByVal value As String) _DateiName = value End Set End Property Public Property Pfad As String Get Return _Pfad End Get Set(ByVal value As String) _Pfad = value End Set End Property Public Property Betreff As String Get Return _Betreff End Get Set(ByVal value As String) _Betreff = value End Set End Property Public Property Name As String Get Return _Name End Get Set(ByVal value As String) _Name = value End Set End Property End Class
- Als Antwort markiert Monarch-Falter Donnerstag, 28. Juni 2012 14:57
Alle Antworten
-
Hallo Experten,
habe jetzt ma probiert, das ganze ohne Klasse zu machen, hat aber leider auch nicht funktioniert
Imports System.IO Imports System.ComponentModel Public Class DocMail Dim Listtest As New BindingList(Of String()) Private Sub DocMail_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load ... 'dgvAnlagen binden Listtest.Add({"A1", "A2"})
Listtest.Add({"AB1", "AB2"})
dgvMailAnlagen.DataSource = Listtest ... end sub
Im DGV stehen zwar Werte (Length, LongLength,Rank,SyncRoot, etc) drin, aber ich hätte gerne in Zeile1 A1,A2 und in Zeile2 "AB1","AB2" jemand eine Idee?
danke mfg eem Monarch
-
Hallo,
mit einer List(Of String()) funktioniert die Datenbindung nicht -
bzw. nur wenn man den virtuellen Modus (keine Bindung) nutzen würde.Die Datenbindung braucht nun mal Eigenschaften, hier um die DataProperty zu ermitteln,
die in den einzelnen Spalten angezeigt werden sollen. Deswegen klappen Arrays nicht.
Da Du oben eine Add-Methode mit konkreten Namen verwendest,
solltest Du den nächsten Schritt tun, und eine Klasse daraus machen.Dann noch eine BindingList(Of T) in Verbindung mit der INotifyPropertyChanged Schnittstelle
für die Eigenschaften und die Datenbindung funktioniert richtig.Gruß Elmar
-
Servus Elmar,
wie immer hast du recht ... hab es jetzt wie folgt gemacht ... funzt und ist auch die saubere Lösung.
' 'Form ' Public Class DocMail Dim clMail As Mail 'Klasse Private Sub DocMail_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load '... 'dgvAnlagen binden dgvMailAnlagen.DataSource = clMail.MailAnhang End Sub end class ' 'Klasse Mail + MailAnhang ' Imports System.ComponentModel Public Class Mail Public MailAnhang As New List(Of MailAnhang) Public Sub MailAnhaenge_Add(ByVal Name As String, ByVal Betreff As String, ByVal Pfad As String, ByVal dateiName As String, ByVal typ As String) MailAnhang.Add(New MailAnhang(Name, Betreff, Pfad, dateiName, typ)) End Sub end class Public Class MailAnhang Dim _Name As String Dim _Betreff As String Dim _Pfad As String Dim _DateiName As String Dim _Typ As String Public Sub New(ByVal Name As String, ByVal Betreff As String, ByVal Pfad As String, ByVal dateiName As String, ByVal typ As String) _Name = Name _Betreff = Betreff _Pfad = Pfad _DateiName = dateiName _Typ = typ End Sub Public Property typ As String Get Return _Typ End Get Set(ByVal value As String) _Typ = value End Set End Property Public Property dateiName As String Get Return _DateiName End Get Set(ByVal value As String) _DateiName = value End Set End Property Public Property Pfad As String Get Return _Pfad End Get Set(ByVal value As String) _Pfad = value End Set End Property Public Property Betreff As String Get Return _Betreff End Get Set(ByVal value As String) _Betreff = value End Set End Property Public Property Name As String Get Return _Name End Get Set(ByVal value As String) _Name = value End Set End Property End Class
- Als Antwort markiert Monarch-Falter Donnerstag, 28. Juni 2012 14:57
-
Hallo,
verpasse Deiner Klasse noch ein INotifyPropertyChanged wie oben vorgeschlagen,
exemplarisch für eine Eigenschaft - Rest äquivalent:Public Class MailAnhang Implements System.ComponentModel.INotifyPropertyChanged Public Event PropertyChanged(sender As Object, e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged Protected Overridable Sub OnPropertyChanged(propertyName As String) RaiseEvent PropertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName)) End Sub Private _typ As String Public Property Typ As String Get Return _Typ End Get Set(ByVal value As String) If _typ != value then _Typ = value OnPropertyChanged("Typ") End If End Set End Property End Class
Dann kannst Du eine BindingList einsetzen und das DataGridView bekommt Änderungen mit.
Gruß Elmar