我倾向于另一个选择是利用RowDataBound
GridView 的事件。当每一行都有数据绑定到它时,这个事件就会被调用。你要做的是找到DrugID
控件并检查它的值。如果这是你想要的,做点什么。
首先,让您的 GridView 知道该事件。
<asp:GridView ID="gvDrugs" runat="server" OnRowDataBound="gvDrugs_RowDataBound">
</asp:GridView>
然后处理事件。如果DrugID
是 23,找到 CheckBox 并检查它。
Protected Sub gvDrugs_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
If e.Row.RowType = DataControlRowType.DataRow Then
Dim lblDrugID As Label = e.Row.FindControl("lblDrugID")
If lblDrugID.Text = "23" Then
Dim cbPain As CheckBox = e.Row.FindControl("cbPain")
cbPain.Checked = True
End If
End If
End Sub
**请注意,我假设控件的类型是标签和复选框。你没有显示你的标记,所以这是我能做的最好的。
在你的编辑之后,我可能会同意你的看法。SelectedIndexChanged
这是在 DropDownList 事件中可以完成的事情。获取DrugIDs
需要检查的列表并迭代 GridView 的每一行,检查匹配的那些。
Protected Sub dropdown_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)
Dim uniqueDrugIDs As HashSet(Of String) = New HashSet(Of String)()
' Here we assume dt is some sort of global variable as your question above implies
For Each dr As DataRow In dt.Rows
uniqueDrugIDs.Add(dr("drugID").ToString())
Next
For Each gvRow As GridViewRow In gvDrugs.Rows
Dim lblDrugID As Label = gvRow.FindControl("lblDrugID")
If (uniqueDrugIDs.contains(lblDrugID.Text)) Then
Dim cbPain As CheckBox = gvRow.FindControl("cbPain")
cbPain.Checked = True
End If
Next
End Sub