我在获取gridview中下拉列表的结果时遇到了一些麻烦,并且没有找到任何有用的VB代码文章。 我要做的是建立一个测试网站。到目前为止,我已经为下拉列表的额外列构建了gridview,其中将选择真/假答案。测试完成后,会有一个提交按钮。一切都很好,除了我需要能够将每个下拉列表的结果返回到变量或数组(每个测试包含10个问题),因此可以检查/评分结果。确定结果后,我想在其中显示一个标签并相应地更改文本值(正确或不正确),因此我也需要能够枚举这些(即label1.text =“正确!” ,label2.text =“不正确!”等等......)。
到目前为止代码。
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataSourceID="SqlDataSource1" BackColor="White" BorderColor="#3366CC"
BorderStyle="None" BorderWidth="1px" CellPadding="1">
<RowStyle BackColor="White" ForeColor="#003399" />
<Columns>
<asp:BoundField DataField="Question" HeaderText="Question"
SortExpression="Question" />
<asp:TemplateField HeaderText="Answer">
<ItemTemplate>
<% If Not IsPostBack Then%>
<asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlAnswer"
DataTextField="torf" DataValueField="torf">
</asp:DropDownList>
<%Else%>
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>
<%End If%>
</ItemTemplate>
</asp:TemplateField>
</Columns>
<FooterStyle BackColor="#99CCCC" ForeColor="#003399" />
<PagerStyle BackColor="#99CCCC" ForeColor="#003399" HorizontalAlign="Left" />
<SelectedRowStyle BackColor="#009999" Font-Bold="True" ForeColor="#CCFF99" />
<HeaderStyle BackColor="#003399" Font-Bold="True" ForeColor="#CCCCFF" />
</asp:GridView>
前面的代码加载10行,2列(column1:Question | column2- [DropDownLists]:Answer)。在开发方面,我是新生,所以如果您需要其他信息,请告诉我。
答案 0 :(得分:1)
以下是我处理它的方式: 创建了一个页面级私有变量来保存我们的正确/不正确值列表 Private Answers as New List(Of Boolean)'创建一个强类型的t / f值列表
Page.Load中的
如果是IsPostBack那么 '遍历每一行 对于GridView1.Rows中的每个gridRow作为GridViewRow '获得此答案的选定值 昏暗的答案为string = CType(gridRow.FindControl(“DropDownList1”),DropDownList).SelectedValue '将此答案添加到列表中 Answers.Add(IsCorrectAnswer(回答)) 下一个 结束如果
IsCorrectAnswer函数确定为此问题给出的答案是否正确并返回布尔值。您需要编写此功能以满足您的需求。
Button1.Click处理程序中的
'rowCounter将充当答案的索引 Dim rowCounter as Integer = 0 对于GridView1.Rows中的每个gridRow作为GridViewRow 'grid_RowDataBound处理单行绑定 grid_RowDataBound(gridRow,rowCounter) rowCounter + = 1 下一步
最后
Private Sub grid_RowDataBound(gridRow as GridViewRow,rowCounter as Integer) '让下拉不可见 CType(gridRow.FindControl(“DropDownList1”),DropDownList).Visible = False '因为我们将对标签的两个属性进行操作,所以我首先将其推入变量中以便于访问 Dim label As Label = CType(gridRow.FindControl(“Label1”),Label) '将标签设置为可见 label.Visible = True '设置文字 label.Text = Iif(Answers(rowCounter),“正确”,“不正确”) 结束子
有人可能有比这更清洁的解决方案,但我知道这是有效的,至少就我所理解的问题而言。 祝你好运
答案 1 :(得分:0)
将Visible属性绑定到Page.IsPostBack
怎么样(注意这是在C#中,因为我不熟悉VB.NET的语法......我确信类似的东西会起作用):
<ItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlAnswer"
DataTextField="torf" DataValueField="torf" Visible='<%# !Page.IsPostBack %/>></asp:DropDownList>
<asp:Label ID="Label1" runat="server" Text="" Visible='<%# Page.IsPostBack %/></asp:Label>
</ItemTemplate>
答案 2 :(得分:0)
检查gridview对象的RowDataBound事件。它需要两个参数: (byval sender as Object,by e e as GridViewRowEventArgs)。有了它,您可以在回发中将每行中的标签值设置为“更正”或“不正确”。
见示例 http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowdatabound.aspx 了解更多信息
关于将答案变为变量,这里有几个选项
1)检查viewstate。它有一些开销,所以要谨慎。 2)将数据保存到会话对象