C# 选中作为模板字段添加的复选框时,如何从gridview控件中的行检索相应的数据

C# 选中作为模板字段添加的复选框时,如何从gridview控件中的行检索相应的数据,c#,asp.net,gridview,checkbox,C#,Asp.net,Gridview,Checkbox,我是ASP.NET的初学者,不是代码天才。我希望有人能帮忙 因此,我创建了一个web表单,并向其中添加了一个gridview控件。gridview包含两列:名称\主题名称,选择主题包含复选框的模板列 最后,我想让一个学生使用这个网络表单来注册他的科目。 因此,每当他单击提交按钮时,他将使用复选框注册他选择的所有主题 我想我可以通过添加一个按钮来测试这一点,该按钮将在web表单上打印我选择的主题的名称 这是GridView的HTML和CSS代码 <asp:GridView ID="dgvUs

我是ASP.NET的初学者,不是代码天才。我希望有人能帮忙

因此,我创建了一个web表单,并向其中添加了一个gridview控件。gridview包含两列:名称\主题名称,选择主题包含复选框的模板列

最后,我想让一个学生使用这个网络表单来注册他的科目。 因此,每当他单击提交按钮时,他将使用复选框注册他选择的所有主题

我想我可以通过添加一个按钮来测试这一点,该按钮将在web表单上打印我选择的主题的名称

这是GridView的HTML和CSS代码

<asp:GridView ID="dgvUsers" runat="server" 
    CssClass="table table-hover table-striped" GridLines="None" 
    AutoGenerateColumns="False" DataSourceID="source1" >
    <Columns>
        <asp:BoundField DataField="Name_EN" HeaderText="Name_EN" SortExpression="Name_EN" />
        <asp:TemplateField HeaderText="Select Subjects">
            <ItemTemplate>
                <asp:CheckBox ID="CheckBox1" runat="server" Text='<%# Eval("Name_EN", "{0}") %>' />
            </ItemTemplate>
        </asp:TemplateField>  
    </Columns>
    <SelectedRowStyle BackColor="#CC3333" Font-Bold="True" ForeColor="White" />
    <RowStyle CssClass="cursor-pointer" />
</asp:GridView>

<asp:SqlDataSource ID="source1" runat="server" ConnectionString="<%$ ConnectionStrings:BIS1ConnectionString %>" SelectCommand="spViewAvailableSubjects" SelectCommandType="StoredProcedure">
    <SelectParameters>
        <asp:SessionParameter Name="ID" SessionField="ID" Type="Int32" />
    </SelectParameters>
</asp:SqlDataSource>
然后,我需要查看“名称”列中的所有选定数据,但仅限于我单击此按钮时选中复选框的行:

<asp:Button ID="ViewButton" runat="server" CssClass="btn btn-primary" Text="View Selected Subjects" OnClick="ViewButton_Click"/>
我正在考虑使用响应打印数据;方法

但我仍然是ASP.NET的初学者,我不知道如何在代码中实现它,也不知道如何将复选框与其对应行中的数据连接起来

我只想检索数据并打印它们

有人能帮我吗

家 选择讲师 选择时间 注销 这些是可供您注册的主题
要遍历gridview,请执行以下操作:

protected void ViewButton_Click(object sender, EventArgs e) {
    List<string> selectedSubjects = new List <string> ();
    foreach(GridViewRow gvr in dgvUsers.Rows) {
        CheckBox chk = (CheckBox) gvr.Cells[1].FindControl("CheckBox1");
        if (chk.Checked) {
            selectedSubjects.Add(chk.Text);
        }
    }

    if (selectedSubjects.Count > 0) {
        gvSelected.DataSource = selectedSubjects;
        gvSelected.DataBind();
    }
}
要向用户显示消息,请向表单中添加另一个gridview:

<asp:GridView ID="gvSelected" runat="server">
</asp:GridView>
显然,尽可能地美化它


我个人不建议使用回复;它们的全部目的是将控件绑定到代码隐藏,而不是模仿经典的asp。

我尝试了您的解决方案,但不幸的是,在单击按钮后,第二个GridView没有出现。我真的不知道是什么原因造成的。你选择了任何复选框吗?若在按钮单击函数上放置断点并单步执行,会发生什么情况?您是否将任何项目添加到列表中?是的,我选中了所有复选框。但奇怪的是,当我调试ViewButton代码时,当迭代foreach循环时,它向我显示复选框没有被选中。请注意,我重复了很多次这个过程,我向您保证,我选中了复选框。您是否可以重新发布您的ASPX源代码,以及ViewButton单击此处的事件源代码。我将尝试模拟错误。您有带有该错误的母版页吗?这可能是个问题。