【发布时间】:2016-12-27 17:13:20
【问题描述】:
我创建了一个由文本框和数据网格组成的用户控件。 (代码未包含在下面的示例中)。 我需要按特定列过滤数据网格的内容。 列的名称取决于对象属性的名称。 对象会有所不同,但每个控件都将绑定到特定对象。
我如何使用控件示例:
Public Class Form1
Private ObjectList As List(Of Object)
Sub New()
' This call is required by the designer.
InitializeComponent()
' Add any initialization after the InitializeComponent() call.
ObjectList = GenerateRandomData()
AddHandler Me.MyUserControl.SelectionStatusChanged, AddressOf UpdateForm
AddHandler Me.MyUserControl.TextChanged, AddressOf UpdateList
Me.MyUserControl.DataSource = ObjectList
End Sub
Private Sub UpdateList()
Dim FilteredList As IEnumerable(Of Object) = From obj As Item In ObjectList
Where obj.Prop_1.StartsWith(Me.MyUserControl.Text)
Select obj
Me.MyUserControl.DataSource = FilteredList.ToList
End Sub
Private Sub UpdateForm()
If Me.MyUserControl.HasItemLoaded Then
Dim NewItem As Item = CType(Me.MyUserControl.SelectedItem, Item)
TextBox1.Text = NewItem.Prop_1
TextBox2.Text = NewItem.Prop_2
TextBox3.Text = NewItem.Prop_3
Return
End If
TextBox1.Text = ""
TextBox2.Text = ""
TextBox3.Text = ""
End Sub
Private Function GenerateRandomData() As List(Of Object)
Randomize()
Dim lst As New List(Of Object)
For i = 0 To 10000
Dim itm As New Item
Dim value As Integer = CInt(Int((999999 * Rnd()) + 1))
Dim value2 As Integer = CInt(Int((999999 * Rnd()) + 1))
itm.Prop_1 = value
itm.Prop_2 = "abc " & value & value2
itm.Prop_3 = value2 & value & " abc"
lst.Add(itm)
Next
Return lst
End Function
End Class
我想在用户控件中处理 UpdateList() 的工作(移动代码或等效结果),但问题是控件不知道对象类型,所以我不能直接调用 Prop_1 或任何名称来自用户控件内部的属性。
到目前为止,我通过侦听用户控制之外的事件来完成此任务,但我想从程序员那里移除尽可能多的责任。
欢迎提出任何想法。
【问题讨论】:
标签: vb.net linq datagrid user-controls