Was muß GetList zurückgeben?

06/04/2009 - 16:29 von Andreas Geide | Report spam
hallo ng,
ich habe generische listen, die jeweils zu bindende klassen enthalten. mein
ziel ist, eine klasse 'meinedaten' zu erstellen, die die gen. listen
auflistet (wie das dataset die tabellen). dazu habe IListSource
implementiert mit den subs:
ContainsListCollection() --> Return True 'weil es ja eine Liste mit IList
ist

Public Function GetList() As System.Collections.IList Implements
System.ComponentModel.IListSource.GetList
?????
End Function

wenn in GetList ein dataset seine liste zurückgibt mit
Variante1:
Return DirectCast(Me.dataSet, IListSource).GetList() --> dann gehts
wenn aber in GetList folgendes steht:
Variante2:
GetList = New Generic.List(Of DataTable)
For i% = 0 To Me.dataSet.Tables.Count - 1
GetList.Add(Me.dataSet.Tables(i))
Next
ContainsListCollection=false (also die eigenschaften von generic.list kommen
dann)
meine gen. listen müßte ich aber analog var2 zurückgeben.

warum geht var2 nicht, obwohl das ergebnis doch IList implementiert?

vielen dank
viele grüße von andreas
 

Lesen sie die antworten

#1 Armin Zingler
06/04/2009 - 16:46 | Warnen spam
Andreas Geide wrote:
hallo ng,
ich habe generische listen, die jeweils zu bindende klassen
enthalten. mein ziel ist, eine klasse 'meinedaten' zu erstellen, die
die gen. listen auflistet (wie das dataset die tabellen). dazu habe
IListSource implementiert mit den subs:
ContainsListCollection() --> Return True 'weil es ja eine Liste mit
IList ist

Public Function GetList() As System.Collections.IList Implements
System.ComponentModel.IListSource.GetList
?????
End Function

wenn in GetList ein dataset seine liste zurückgibt mit
Variante1:
Return DirectCast(Me.dataSet, IListSource).GetList() --> dann gehts
wenn aber in GetList folgendes steht:
Variante2:
GetList = New Generic.List(Of DataTable)
For i% = 0 To Me.dataSet.Tables.Count - 1
GetList.Add(Me.dataSet.Tables(i))
Next
ContainsListCollection=false (also die eigenschaften von generic.list
kommen dann)
meine gen. listen müßte ich aber analog var2 zurückgeben.

warum geht var2 nicht, obwohl das ergebnis doch IList implementiert?




Kann ich nicht nachvollziehen, d.h. bei mir geht's. Wie überprüfst du das
Ergebnis? Hab's so getestet:

Imports System.ComponentModel

Public Class Class1
Implements IListSource

Public ReadOnly Property ContainsListCollection() _
As Boolean _
Implements IListSource.ContainsListCollection
Get
Return True
End Get
End Property

Public Function GetList() _
As System.Collections.IList _
Implements IListSource.GetList

Dim result As New List(Of DataTable)

Dim dt1 As New DataTable
Dim dt2 As New DataTable

result.Add(dt1)
result.Add(dt2)

Return result

End Function
End Class

Client code:
Dim c As New Class1
Dim o = DirectCast(c, System.ComponentModel.IListSource).GetList()
For Each item In o
Debug.Print(item.GetType.Name)
Next


Da kommt erwartungsgemàß 2 x "DataTable"


Armin

Ähnliche fragen