所以我有一个函数,可以用各个部门的名称填充下拉列表。 该函数获取表单的名称以及下拉列表应用的控件。 我想我几乎可以使用函数中传递的字符串转换为表单名称,但无法让它正确引用表单上的控件。 代码如下
Public Function DeptList(ByVal myForm As String, ByVal myControl As String)
Dim asm As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly()
Dim targetForm As Form = CType(asm.CreateInstance("Jigsaw2." & myForm), Form)
SqlTxt = "SELECT * FROM Department WHERE Dept_Status = 'Active';"
sql.ExecQuery(SqlTxt)
Try
For Each r As DataRow In sql.DBDT.Rows
**[targetForm].DeptCombox.Items.Add(r("Dept_Name"))**
Next
Catch
End Try
End Function
sql 工作正常,只是我遇到问题的粗体行
在stackoverflow上搜索过其他解决方案,但它们要么是用C编写的,要么不适合情况。
每个控件(包括表单)都有一个
Controls
集合属性,允许您通过控件的 Name
进行索引。假设您已经有一个 Form
引用并且您的控件将始终是 ComboBox
,您可以执行以下操作:
Using dropDownList = DirectCast(myForm.Controls(controlName), ComboBox)
dropDownList.DisplayMember = "Dept_Name"
dropDownList.DataSource = sql.DBDT.Rows
End Using
通常最好使用这样的数据绑定,而不是手动一项一项地添加项目。但在这种情况下它可能不起作用,因为我猜测您使用的是实施不佳的 DAL,并且
DataTable
将被重用。如果不是这种情况,您可以像我一样安全地绑定它,否则我将让您决定如何实际填充列表。