我需要能够隐藏从动态项目符号列表(在DetailsView内部构建)中显示的2个选项。每次我尝试通过BulletedList编写一个循环时,我都会收到一个错误,说它不是一个集合类型,所以我想我可以遍历DetailsView来找到我想要隐藏的项目。
我无法更改SQL,因为这个特定的项目符号列表在2个不同的页面上使用,只是在一个页面上,我只需要显示与ID相关联的4个项目中的2个。
<asp:TemplateField HeaderText="Answer(s)" SortExpression="PicklistID">
<ItemTemplate>
<asp:HiddenField ID="hiddenPicklistID" runat="server"
Value='<%# Bind("PicklistID") %>' />
<asp:BulletedList ID="blText" runat="server" DataSourceID="dsPicklist"
DataTextField="TEXT">
</asp:BulletedList>
<asp:SqlDataSource ID="dsPicklist" runat="server"
ConnectionString="<%$ ConnectionStrings:SurveyConnectionString %>"
SelectCommand="SELECT p.TEXT FROM PICKLIST p
JOIN C_Survey_Questions c
ON p.PICKLISTID = c.PicklistID
AND c.QuestionID = @QuestionID
AND c.SurveyID = @SurveyID
WHERE p.PICKLISTID IS NOT NULL
AND c.PicklistID IS NOT NULL">
<SelectParameters>
<asp:ControlParameter ControlID="DropDownList1" Name="SurveyID"
PropertyName="SelectedValue" Type="Int32" />
<asp:ControlParameter ControlID="hiddenQuestionID" Name="QuestionID"
PropertyName="Value" Type="Int32" />
</SelectParameters>
</asp:SqlDataSource>
</ItemTemplate>
</asp:TemplateField>
我试过了:
Protected Sub blText_DataBound(ByVal sender As Object, ByVal e As System.EventArgs)
Dim blText As BulletedList
For Each BulletedListItem In blText
Next
End Sub
但Visual Studio告诉我它不是集合类型。所以我想我可以在下面的代码中添加For Each。我不知道如何遍历DetailsView,有人能指出我在正确的方向吗?
Protected Sub dvSurveyQuestions_DataBound(ByVal sender As Object, ByVal e As
System.EventArgs) Handles dvSurveyQuestions.DataBound
End Sub
UPDATE 2/6:我使用FindControl声明了我的BulletedList,并且没有更多的错误说没有声明BulletedList。
Protected Sub blText_DataBound(ByVal sender As Object, ByVal e As System.EventArgs)
Dim blText As BulletedList = dvSurveyQuestions.FindControl("blText")
For Each i As ListItem In blText.Items
Next
End Sub
另一个更新:我需要获得33的唯一QuestionID的blText.DuesrseID是一个Integer,但我不知道如何将HiddenField与Integer字段相关联。在此代码中,“Is”加下划线表示Is operator does not accept opeands of type 'Integer.'
所以我将Is更改为an =并得到错误Operator = is not defined for types HiddenField and Integer.
Dim QuestionID = DirectCast(dvSurveyQuestions.FindControl("hiddenQuestionID"), HiddenField)
If QuestionID Is 33 Then
Dim blText As BulletedList = dvSurveyQuestions.FindControl("blText")
For intCursor = (blText.Items.Count - 1) To 0 Step -1
If blText.Items(intCursor).Text = "Self Directed" Or "Systems" Then
blText.Items.RemoveAt(intCursor)
End If
Next
End If
这是有效的
Dim QuestionID As Integer = CInt(CType(dvSurveyQuestions.FindControl("hiddenQuestionID"), HiddenField).Value)
If QuestionID = 33 Then
Dim blText As BulletedList = dvSurveyQuestions.FindControl("blText")
For intCursor = (blText.Items.Count - 1) To 0 Step -1
If blText.Items(intCursor).Text = "Self Directed" Or blText.Items(intCursor).Text = "Systems" Then
blText.Items.RemoveAt(intCursor)
End If
Next
End If
答案 0 :(得分:0)
从BulletList的Items属性循环。
For Each i As ListItem In blText.Items
Next
这可能更具体针对您的问题...
For intCursor = (blText.Items.Count - 1) To 0 Step -1
If blText.Items(intCursor).Text = "TextValueToRemove" Then
blText.Items.RemoveAt(intCursor)
End If
Next