下拉列表导致gridview

时间:2009-08-19 14:54:23

标签: asp.net vb.net gridview

我在获取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)。在开发方面,我是新生,所以如果您需要其他信息,请告诉我。

3 个答案:

答案 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)将数据保存到会话对象