Hi,

I use a customized Generic List (VB.NET 2.0) inherited from BindingList(Of
T).

I made some methods in this BindingList, to allow me to do some standard
functions on the BindingList-Items.
One of them is for instance SumItems, which returns me the sum of a given
Property of all the Items in the List.

e.g.: MyBindingList.SumItems("Price") returns me the sum of all the prices
of my articles in the list.

But I would like to be able to access directly the Property's of the T-class
of my BindingList. It woudl be much much nicer if I could directly type in
the code editor MyBindingList.SumItems.Price, and that I can, while coding,
see al the proeprty's of my T-class after typing
"MyBindingList.SumItems."...

Because I use Generics I somehow think this should be possible, although I
don't find how...

Anybody has any ideas? Any help would be really appreciated!

Thanks a lot in advance,

Pieter

PS: My current SumItems-method:

Public Function SumItems(ByVal ColumnName As String) As Decimal
Dim properties As PropertyDescriptorCollection
Dim myProperty As PropertyDescriptor
Dim decSum As Decimal = 0

Try
' Specify search columns
If (ColumnName Is Nothing) Then
Return Nothing
End If

' Get list to search
Dim lItems As List(Of T) = Me.Items

If Me.Count > 0 Then
properties =
TypeDescriptor.GetProperties(Me.Items(0).GetType)
myProperty = properties.Find(ColumnName, True)

If myProperty Is Nothing Then
Throw New ArgumentException("Invalid Property Name.",
ColumnName)
Return 0
Exit Function
End If

' Traverse list for value
For Each it As T In lItems
'Dim value As String = CStr(myProperty.GetValue(item))
decSum += CSng(myProperty.GetValue(it))
Next it
End If

Catch ex As Exception
Throw ex
End Try

Return decSum
End Function

RE: Generic BindingList.SumItems.MyProperty: howto? by CiaranODonnell

CiaranODonnell
Thu Feb 15 08:58:20 CST 2007

You would need to have the Price property declared in an Interface or base
class that you force T to implement or inherit from. Otherwise it isnt
possible.

--
Ciaran O''Donnell
http://wannabedeveloper.spaces.live.com


"Pieter" wrote:

> Hi,
>
> I use a customized Generic List (VB.NET 2.0) inherited from BindingList(Of
> T).
>
> I made some methods in this BindingList, to allow me to do some standard
> functions on the BindingList-Items.
> One of them is for instance SumItems, which returns me the sum of a given
> Property of all the Items in the List.
>
> e.g.: MyBindingList.SumItems("Price") returns me the sum of all the prices
> of my articles in the list.
>
> But I would like to be able to access directly the Property's of the T-class
> of my BindingList. It woudl be much much nicer if I could directly type in
> the code editor MyBindingList.SumItems.Price, and that I can, while coding,
> see al the proeprty's of my T-class after typing
> "MyBindingList.SumItems."...
>
> Because I use Generics I somehow think this should be possible, although I
> don't find how...
>
> Anybody has any ideas? Any help would be really appreciated!
>
> Thanks a lot in advance,
>
> Pieter
>
> PS: My current SumItems-method:
>
> Public Function SumItems(ByVal ColumnName As String) As Decimal
> Dim properties As PropertyDescriptorCollection
> Dim myProperty As PropertyDescriptor
> Dim decSum As Decimal = 0
>
> Try
> ' Specify search columns
> If (ColumnName Is Nothing) Then
> Return Nothing
> End If
>
> ' Get list to search
> Dim lItems As List(Of T) = Me.Items
>
> If Me.Count > 0 Then
> properties =
> TypeDescriptor.GetProperties(Me.Items(0).GetType)
> myProperty = properties.Find(ColumnName, True)
>
> If myProperty Is Nothing Then
> Throw New ArgumentException("Invalid Property Name.",
> ColumnName)
> Return 0
> Exit Function
> End If
>
> ' Traverse list for value
> For Each it As T In lItems
> 'Dim value As String = CStr(myProperty.GetValue(item))
> decSum += CSng(myProperty.GetValue(it))
> Next it
> End If
>
> Catch ex As Exception
> Throw ex
> End Try
>
> Return decSum
> End Function
>
>
>