首先,您没有提及是否希望每个连续的组合都与前一个组合级联。
因此,您可以根据这样的一个机构选择来级联部门和职位:
或者你选择机构,然后是部门,这会给你职位。
例如:
但是,代码无关紧要。
容易吗?让我们假设第一种情况。 (这两种情况的代码都差不多。
我们假设:
放下 3 个下拉框。
自动回发 = 所有 3 个都为 true
对于每个组合框,我们将数据值字段设置为“ID”
和DataText字段(机构,部门或职位的文本描述列
对于 3 个组合框。
好的,到目前为止,所有的拖放操作。
现在,代码:
在页面加载时,我们加载第一个组合:
If IsPostBack = False Then
Me.Instutions.DataSource = Myrst("select ID,Instution from Instutions")
Me.Instutions.DataBind()
Me.Instutions.Items.Insert(0, New ListItem(String.Empty, String.Empty))
Me.Departments.DataSource = Nothing
Me.Positions.DataSource = Nothing
End If
在机构组合的索引更改事件中?
如前所述,我将按照我的第一个数据库图放置/假设级联。
你有这个:
Protected Sub Instutions_SelectedIndexChanged(sender As Object, e As EventArgs) Handles Instutions.SelectedIndexChanged
Dim strSQL As String = "SELECT ID,Position from Positions WHERE Instutions_ID = " & Instutions.SelectedValue
Me.Positions.DataSource = Myrst(strSQL)
Me.Positions.DataBind()
Me.Positions.Items.Insert(0, New ListItem(String.Empty, String.Empty))
strSQL = "SELECT ID,Department from Departments WHERE Instutions_ID = " & Instutions.SelectedValue
Me.Departments.DataSource = Myrst(strSQL)
Me.Departments.DataBind()
Me.Departments.Items.Insert(0, New ListItem(String.Empty, String.Empty))
End Sub
我还使用 Items.Insert 添加一个空白行,因为如果你不这样做,那么当你填充/绑定组合框时,它将选择第一行 - 你可能不想要这个(但是,嘿也许你这样做 - 如果是这样,请删除 .Items.Insert 以不添加该空行。
如前所述,如果您对所有 3 个进行级联?
然后简单地移出上面设置每个部门职位的最后一个代码。
代码总量其实差不多。
此外,作为一般规则,一遍又一遍地重写代码以将数据提取到表中是很痛苦的。因此,上面还使用了一个名为 MyRst 的辅助例程。它只是节省了您的手指,实际上是一个方便的例程,您可以使用它来填充网格、列表视图,在我们的例子中,用最少的代码填充下拉列表。所以我使用的例程是这样的:
Public Function Myrst(strSQL As String) As DataTable
Dim mycon As New SqlConnection(My.Settings.Test4)
Dim oReader As New SqlDataAdapter
Dim rstData As New DataTable
oReader.SelectCommand = New SqlCommand(strSQL, mycon)
Try
oReader.Fill(rstData)
Return rstData
Catch
Debug.Print(Err.Description)
Return Nothing
End Try
End Function
所以,它不是很多代码。如前所述,上面的帮助程序对您的应用程序有很多用途。
所以,最终的结果是这样的:
您不需要任何客户端代码。但是,您必须为 3 的每个组合设置自动回发 = true(好吧,也许只是前 2 个)。如果不需要整页回帖?然后只需将上述 3 个控件放到更新面板中,该问题就消失了(您只有部分页面回发)。
所以,如果做得好,代码很少。