【问题标题】:Dropdownlist results in gridview下拉列表结果在gridview
【发布时间】:2009-08-20 23:06:15
【问题描述】:

我在获取网格视图中的下拉结果时遇到了一些问题,并且没有找到任何有用的 VB 代码文章。 我想做的是建立一个测试站点。到目前为止,我已经为下拉列表构建了带有额外列的 gridview,其中将选择真/假答案。测试完成后,有一个提交按钮。一切都很好,除了我需要能够在回发到变量或数组时获得每个下拉列表的结果(每个测试包含 10 个问题),以便可以检查/评分结果。确定结果后,我想在其位置显示一个标签并相应地更改文本值(正确或不正确),因此我还需要能够枚举这些(即 label1.text="Correct!" , label2.text="Incorrect!", etc...)。

到目前为止的代码。

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

【问题讨论】:

    标签: asp.net vb.net gridview


    【解决方案1】:

    我是这样处理的: 创建了一个页面级私有变量来保存我们的正确/错误值列表 Private Answers as New List(Of Boolean) '创建一个强类型的 t/f 值列表

    在 Page.Load 中

    如果 IsPostBack 则 '遍历每一行 对于 GridView1.Rows 中的每个 gridRow As GridViewRow '得到这个答案的选定值 暗淡答案为 string = CType(gridRow.FindControl("DropDownList1"),DropDownList).SelectedValue '将此答案添加到列表中 Answers.Add(IsCorrectAnswer(answer)) 下一个 结束如果

    IsCorrectAnswer 函数确定针对此问题给出的答案是否正确并返回一个布尔值。您需要编写此函数以满足您的需要。

    在 Button1.Click 处理程序中

    'rowCounter 将作为答案的索引 将 rowCounter 调暗为 Integer = 0 对于 GridView1.Rows 中的每个 gridRow 作为 GridViewRow 'grid_RowDataBound 处理单行的绑定 grid_RowDataBound(gridRow, rowCounter) 行计数器+=1 下一个

    终于

    Private Sub grid_RowDataBound(gridRow as GridViewRow, rowCounter as Integer) '使下拉菜单不可见 CType(gridRow.FindControl("DropDownList1"),DropDownList).Visible = False '因为我们将作用于标签的两个属性,所以我先把它塞进一个变量中以便于访问 暗淡标签 As Label = CType(gridRow.FindControl("Label1"),Label) '将标签设置为可见 label.Visible = True '设置文本 label.Text = Iif(Answers(rowCounter),"正确","不正确") 结束子

    可能有人有比这更干净的解决方案,但我知道这是可行的,至少就我了解您所面临的问题而言。 祝你好运

    【讨论】:

      【解决方案2】:

      将 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>
      

      【讨论】:

        【解决方案3】:

        检查gridview 对象的RowDataBound 事件。它需要两个参数: (byval sender 作为 Object,byval e 作为 GridViewRowEventArgs)。有了它,您可以在回发时将每行中标签的值设置为“正确”或“不正确”。

        参见示例 http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.gridview.rowdatabound.aspx 了解更多信息

        至于将答案放入变量中,这里有几个选项

        1) 检查视图状态。它有一些开销,所以要小心。 2) 将数据保存到 Session 对象

        【讨论】:

        • 感谢您的回复,但我仍然卡住了(并不是因为缺乏尝试)...我是 asp.net 和 vb.net 的菜鸟。您能否提供一个示例,说明如何获取数据网格的 column2/cell2 中的第一个下拉列表的选定值?我无法从提供的文章中获得所需的内容。提前感谢您的帮助。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多