IBindingList Interface
Provides the features required to support both complex and simple scenarios when binding to a data source.
Assembly: System (in System.dll)
The IBindingList type exposes the following members.
| Name | Description | |
|---|---|---|
![]() ![]() | AllowEdit | Gets whether you can update items in the list. |
![]() ![]() | AllowNew | Gets whether you can add items to the list using AddNew. |
![]() ![]() | AllowRemove | Gets whether you can remove items from the list, using Remove or RemoveAt. |
![]() ![]() | Count | Gets the number of elements contained in the ICollection. (Inherited from ICollection.) |
![]() ![]() | IsFixedSize | Gets a value indicating whether the IList has a fixed size. (Inherited from IList.) |
![]() ![]() | IsReadOnly | Gets a value indicating whether the IList is read-only. (Inherited from IList.) |
![]() ![]() | IsSorted | Gets whether the items in the list are sorted. |
![]() ![]() | IsSynchronized | Gets a value indicating whether access to the ICollection is synchronized (thread safe). (Inherited from ICollection.) |
![]() ![]() | Item | Gets or sets the element at the specified index. (Inherited from IList.) |
![]() ![]() | SortDirection | Gets the direction of the sort. |
![]() ![]() | SortProperty | Gets the PropertyDescriptor that is being used for sorting. |
![]() ![]() | SupportsChangeNotification | Gets whether a ListChanged event is raised when the list changes or an item in the list changes. |
![]() ![]() | SupportsSearching | Gets whether the list supports searching using the Find method. |
![]() ![]() | SupportsSorting | Gets whether the list supports sorting. |
![]() ![]() | SyncRoot | Gets an object that can be used to synchronize access to the ICollection. (Inherited from ICollection.) |
| Name | Description | |
|---|---|---|
![]() ![]() | Add | Adds an item to the IList. (Inherited from IList.) |
![]() ![]() | AddIndex | Adds the PropertyDescriptor to the indexes used for searching. |
![]() ![]() | AddNew | Adds a new item to the list. |
![]() ![]() | ApplySort | Sorts the list based on a PropertyDescriptor and a ListSortDirection. |
![]() ![]() | Clear | Removes all items from the IList. (Inherited from IList.) |
![]() ![]() | Contains | Determines whether the IList contains a specific value. (Inherited from IList.) |
![]() ![]() | CopyTo | Copies the elements of the ICollection to an Array, starting at a particular Array index. (Inherited from ICollection.) |
![]() ![]() | Find | Returns the index of the row that has the given PropertyDescriptor. |
![]() ![]() | GetEnumerator | Returns an enumerator that iterates through a collection. (Inherited from IEnumerable.) |
![]() ![]() | IndexOf | Determines the index of a specific item in the IList. (Inherited from IList.) |
![]() ![]() | Insert | Inserts an item to the IList at the specified index. (Inherited from IList.) |
![]() ![]() | Remove | Removes the first occurrence of a specific object from the IList. (Inherited from IList.) |
![]() ![]() | RemoveAt | Removes the IList item at the specified index. (Inherited from IList.) |
![]() ![]() | RemoveIndex | Removes the PropertyDescriptor from the indexes used for searching. |
![]() ![]() | RemoveSort | Removes any sort applied using ApplySort. |
| Name | Description | |
|---|---|---|
![]() | AsParallel | Enables parallelization of a query. (Defined by ParallelEnumerable.) |
![]() | AsQueryable | Converts an IEnumerable to an IQueryable. (Defined by Queryable.) |
![]() ![]() | Cast(Of TResult) | Casts the elements of an IEnumerable to the specified type. (Defined by Enumerable.) |
![]() ![]() | OfType(Of TResult) | Filters the elements of an IEnumerable based on a specified type. (Defined by Enumerable.) |
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 SP1 or later, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2
The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.




