我正在尝试从下拉列表中选择基于网格视图的某些行上的复选框。我有一个gridview,其中第一列是一个复选框(cb_pain),第二列是一个ID(DrugID)。用户从下拉列表中进行选择,这将触发一个存储过程。该存储过程返回所有需要检查的DrugID。我可以像这样从数据中提取出DrugID:dt.Rows(0)(“ pain1”)。ToString()告诉我DrugID用于需要检查的行。
基本上,我想选中DrugID = dt.Rows(0)(“ pain1”)。ToString()的行上的复选框
我认为这需要在下拉列表的selectedindexchange上完成。
我的gridview看起来像这样:(很抱歉,我无法弄清楚如何制表)
cb_pain ........ DrugID ...... Field1
x ........ 3 ......................其他数据
x ........ 23 ........其他数据
x ........ 24 ........其他数据
x ........ 37 ........其他数据
如何使用它来检查具有正确DrugID的行上的复选框?
我尝试了几种不同的DirectCast方法,但没有成功。谁能指出我正确的方向?
谢谢
最佳答案
我倾向于使用的另一个选项是利用GridView的RowDataBound
事件。当每一行获取绑定到其的数据时,将调用此事件。您要做的就是找到DrugID
控件并检查其值。如果这是您想要的,请执行一些操作。
首先,让您的GridView知道该事件。
<asp:GridView ID="gvDrugs" runat="server" OnRowDataBound="gvDrugs_RowDataBound">
</asp:GridView>
然后处理事件。如果
DrugID
是23,找到复选框并选中它。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
**请注意,我假设控件的类型为标签和复选框。您尚未显示标记,所以这是我能做的最好的事情。
编辑完之后,我可能会同意你的看法。这可以在DropDownList的
SelectedIndexChanged
事件中完成。获取需要检查的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
关于asp.net - 基于存储过程中的非 bool 值检查Gridview中的复选框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33833315/