Hier mal ein einfaches Beispiel für eine Klasse, die eine Datatable
abschnittsweise an mehrere Datagrids binden kann - nur Readonly
und für die Anzeige. Die Funktions-Prototypen, die IBindingList-
Interface automatisch einfügt und die nicht benötigt werden, habe
ich im Code weggelassen. (Werden andere Schnittstellen-
Funktionen benötigt - z.B. Editieren, Sortieren - müssen weitere
Funktionen der IBindingList bzw. IList in der Klasse implementiert werden.)
Public Class clsTableBinder
Implements System.ComponentModel.IBindingList
Dim _dt As DataTable, _dv As DataView
Dim _ug, _og As Integer
Public Sub New(ByVal dt As DataTable, _
ByVal ug As Integer, ByVal og As Integer)
If dt Is Nothing Then Throw New ArgumentNullException
_dt = dt : _ug = ug : _og = og
If _ug < 0 Or _ug > _og Then Throw New ArgumentException
If _og => dt.Rows.Count Then Throw New ArgumentException
_dv = New DataView(dt)
End Sub
Public ReadOnly Property Count As Integer _
Implements System.Collections.ICollection.Count
Get
Return _og - _ug + 1
End Get
End Property
Default Public Property Item(ByVal index As Integer) As Object _
Implements System.Collections.IList.Item
Get
Return _dv(_ug + index)
End Get
Set(ByVal value As Object)
End Set
End Property
Public ReadOnly Property AllowEdit As Boolean _
Implements System.ComponentModel.IBindingList.AllowEdit
Get
Return False
End Get
End Property
Public ReadOnly Property AllowNew As Boolean _
Implements System.ComponentModel.IBindingList.AllowNew
Get
Return False
End Get
End Property
Public ReadOnly Property AllowRemove As Boolean _
Implements System.ComponentModel.IBindingList.AllowRemove
Get
Return False
End Get
End Property
Public ReadOnly Property SupportsSorting As Boolean _
Implements System.ComponentModel.IBindingList.SupportsSorting
Get
Return False
End Get
End Property
'Für die übrigen Schnittstellen-Funktionen wird
'kein Code benötigt - Rümpfe deshalb hier weggelassen
End Class Anwendungsbeispiel.
Eine Datatable wird an drei Datagridviews gebunden:
Public Class frmSplitGrid
Dim dt As New DataTable
Private Sub Form1_Load(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles MyBase.Load
dt.Columns.Add("Spalte", GetType(Integer))
dt.Columns.Add("Text", GetType(String))
For i As Integer = 0 To 99
Dim r As DataRow = dt.NewRow
r(0) = i : r(1) = "Zeile " + CStr(i)
dt.Rows.Add(r)
Next i
DataGridView1.DataSource = New clsTableBinder(dt, 0, 32)
DataGridView2.DataSource = New clsTableBinder(dt, 33, 65)
DataGridView3.DataSource = New clsTableBinder(dt, 66, 99)
End Sub
End Class
Beitrag wurde zuletzt am 09.11.10 um 06:41:35 editiert. |