Export (0) Print
Expand All

IBindingList Interface

Provides the features required to support both complex and simple scenarios when binding to a data source.

Namespace:  System.ComponentModel
Assembly:  System (in System.dll)

'Declaration
Public Interface IBindingList _
	Inherits IList, ICollection, IEnumerable
'Usage
Dim instance As IBindingList

This interface is implemented by the DataView class. Implementation of a method should exhibit the same behavior as the implementation of that method in the DataView class.

When you call the ApplySort or RemoveSort methods, you should raise a ListChanged event with the Reset enumeration.

When you call the AddNew method, you should raise a ListChanged event with the ItemAdded enumeration carrying the appropriate index. The added row is in a state where pressing the ESC on a DataGridView control can remove the new row. Raising the ListChanged event with the ItemAdded enumeration a second time on this row indicates that the item is now a row not in the "new" state.

When you remove an item or call the CancelEdit method on a new row (if that row implements IEditableObject), you should raise a ListChanged event with the ItemDeleted enumeration carrying the appropriate index.

The following example provides a simple implementation of the IBindingList interface. The CustomerList class stores customer information in a list. This example assumes that you have used the Customer class that can be found in the example in the IEditableObject class.

Public Class CustomersList
    Inherits CollectionBase
    Implements IBindingList 

    Private resetEvent As New ListChangedEventArgs(ListChangedType.Reset, -1)
    Private onListChanged1 As ListChangedEventHandler


    Public Sub LoadCustomers()
        Dim l As IList = CType(Me, IList)
        l.Add(ReadCustomer1())
        l.Add(ReadCustomer2())
        OnListChanged(resetEvent)
    End Sub 


    Default Public Property Item(ByVal index As Integer) As Customer
        Get 
            Return CType(List(index), Customer)
        End Get 
        Set(ByVal Value As Customer)
            List(index) = Value
        End Set 
    End Property 


    Public Function Add(ByVal value As Customer) As Integer 
        Return List.Add(value)
    End Function  


    Public Function AddNew2() As Customer
        Return CType(CType(Me, IBindingList).AddNew(), Customer)
    End Function  


    Public Sub Remove(ByVal value As Customer)
        List.Remove(value)
    End Sub  



    Protected Overridable Sub OnListChanged(ByVal ev As ListChangedEventArgs)
        If (onListChanged1 IsNot Nothing) Then
            onListChanged1(Me, ev)
        End If 
    End Sub  



    Protected Overrides Sub OnClear()
        Dim c As Customer
        For Each c In List
            c.parent = Nothing 
        Next c
    End Sub  


    Protected Overrides Sub OnClearComplete()
        OnListChanged(resetEvent)
    End Sub  


    Protected Overrides Sub OnInsertComplete(ByVal index As Integer, ByVal value As Object)
        Dim c As Customer = CType(value, Customer)
        c.parent = Me
        OnListChanged(New ListChangedEventArgs(ListChangedType.ItemAdded, index))
    End Sub  


    Protected Overrides Sub OnRemoveComplete(ByVal index As Integer, ByVal value As Object)
        Dim c As Customer = CType(value, Customer)
        c.parent = Me
        OnListChanged(New ListChangedEventArgs(ListChangedType.ItemDeleted, index))
    End Sub  


    Protected Overrides Sub OnSetComplete(ByVal index As Integer, ByVal oldValue As Object, ByVal newValue As Object)
        If oldValue <> newValue Then 

            Dim oldcust As Customer = CType(oldValue, Customer)
            Dim newcust As Customer = CType(newValue, Customer)

            oldcust.parent = Nothing
            newcust.parent = Me

            OnListChanged(New ListChangedEventArgs(ListChangedType.ItemAdded, index))
        End If 
    End Sub  


    ' Called by Customer when it changes. 
    Friend Sub CustomerChanged(ByVal cust As Customer)
        Dim index As Integer = List.IndexOf(cust)
        OnListChanged(New ListChangedEventArgs(ListChangedType.ItemChanged, index))
    End Sub  


    ' Implements IBindingList. 

    ReadOnly Property AllowEdit() As Boolean Implements IBindingList.AllowEdit
        Get 
            Return True 
        End Get 
    End Property 

    ReadOnly Property AllowNew() As Boolean Implements IBindingList.AllowNew
        Get 
            Return True 
        End Get 
    End Property 

    ReadOnly Property AllowRemove() As Boolean Implements IBindingList.AllowRemove
        Get 
            Return True 
        End Get 
    End Property 

    ReadOnly Property SupportsChangeNotification() As Boolean Implements IBindingList.SupportsChangeNotification
        Get 
            Return True 
        End Get 
    End Property 

    ReadOnly Property SupportsSearching() As Boolean Implements IBindingList.SupportsSearching
        Get 
            Return False 
        End Get 
    End Property 

    ReadOnly Property SupportsSorting() As Boolean Implements IBindingList.SupportsSorting
        Get 
            Return False 
        End Get 
    End Property 

    ' Events. 
    Public Event ListChanged As ListChangedEventHandler Implements IBindingList.ListChanged


    ' Methods. 
    Function AddNew() As Object Implements IBindingList.AddNew
        Dim c As New Customer(Me.Count.ToString())
        List.Add(c)
        Return c
    End Function  


    ' Unsupported properties. 

    ReadOnly Property IsSorted() As Boolean Implements IBindingList.IsSorted
        Get 
            Throw New NotSupportedException()
        End Get 
    End Property 

    ReadOnly Property SortDirection() As ListSortDirection Implements IBindingList.SortDirection
        Get 
            Throw New NotSupportedException()
        End Get 
    End Property 


    ReadOnly Property SortProperty() As PropertyDescriptor Implements IBindingList.SortProperty
        Get 
            Throw New NotSupportedException()
        End Get 
    End Property 


    ' Unsupported Methods. 
    Sub AddIndex(ByVal prop As PropertyDescriptor) Implements IBindingList.AddIndex
        Throw New NotSupportedException()
    End Sub  


    Sub ApplySort(ByVal prop As PropertyDescriptor, ByVal direction As ListSortDirection) Implements IBindingList.ApplySort
        Throw New NotSupportedException()
    End Sub  


    Function Find(ByVal prop As PropertyDescriptor, ByVal key As Object) As Integer Implements IBindingList.Find
        Throw New NotSupportedException()
    End Function  


    Sub RemoveIndex(ByVal prop As PropertyDescriptor) Implements IBindingList.RemoveIndex
        Throw New NotSupportedException()
    End Sub  


    Sub RemoveSort() Implements IBindingList.RemoveSort
        Throw New NotSupportedException()
    End Sub  


    ' Worker functions to populate the list with data. 
    Private Shared Function ReadCustomer1() As Customer
        Dim cust As New Customer("536-45-1245")
        cust.FirstName = "Jo"
        cust.LastName = "Brown" 
        Return cust
    End Function  


    Private Shared Function ReadCustomer2() As Customer
        Dim cust As New Customer("246-12-5645")
        cust.FirstName = "Robert"
        cust.LastName = "Brown" 
        Return cust
    End Function  
End Class

Windows 7, Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2008 R2, Windows Server 2008, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile for Smartphone, Windows Mobile for Pocket PC, Xbox 360, Zune

The .NET Framework and .NET Compact Framework do not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.

.NET Framework

Supported in: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Supported in: 3.5, 2.0, 1.0

XNA Framework

Supported in: 3.0, 2.0, 1.0

Community Additions

ADD
Show:
© 2014 Microsoft