在DetailsView中的ASP C#CheckBox

时间:2017-09-03 05:22:06

标签: c# asp.net detailsview

我的aspx页面中有一个DetailsView,项目模板列中有两个复选框。我在DetailsView外面有一个buttoun。我需要的是当我点击按钮它应该验证是否选中了两个复选框并激活c#命令。请帮忙。让我粘贴下面的代码:

的.aspx

 <div>
        <asp:Button ID="Button3" runat="server" Text="Button" OnClick="Button3_Click" />
    </div>
    <asp:DetailsView ID="DetailsView2" runat="server" Height="50px" Width="125px" AutoGenerateRows="False" DataSourceID="SqlDataSource2">
        <Fields>
            <asp:TemplateField HeaderText="StudentName" SortExpression="StudentName">
                <ItemTemplate>
                     <asp:CheckBox ID="CheckBox1" runat="server" />
                    <asp:Label ID="Label1" runat="server" Text='<%# Bind("StudentName") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Email" SortExpression="Email">

                <ItemTemplate>
                    <asp:CheckBox ID="CheckBox2" runat="server" />
                    <asp:Label ID="Label2" runat="server" Text='<%# Bind("Email") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
        </Fields>
    </asp:DetailsView>

C#

 protected void Button3_Click(object sender, EventArgs e)
    {

    }

1 个答案:

答案 0 :(得分:0)

DetailsView是一个数据绑定控件,可以容纳无限数量的行,而不只是一行。

如果要验证两个复选框都已选中,则在每一行中,您需要遍历所有DetailsView的行,并从CheckBox转换FindControl每一行:

protected void Button3_Click(object sender, EventArgs e)
{
    for (int i = 0; i < DetailsView2.Rows.Count; i++)
    {
        CheckBox chk1 = (CheckBox)DetailsView2.Rows[i].FindControl("CheckBox1");
        CheckBox chk2 = (CheckBox)DetailsView2.Rows[i].FindControl("CheckBox2");

        if (chk1.Checked && chk2.Checked)
        {
           // Do Stuff
        }
    }
}

如果您要验证所有行中的所有复选框,请执行以下操作:

protected void Button3_Click(object sender, EventArgs e)
{
    // Declare a boolean flag
    bool AllCheckBoxesAreChecked = true;

    for (int i = 0; i < DetailsView2.Rows.Count; i++)
    {
        CheckBox chk1 = (CheckBox)DetailsView2.Rows[i].FindControl("CheckBox1");
        CheckBox chk2 = (CheckBox)DetailsView2.Rows[i].FindControl("CheckBox2");

        if (!chk1.Checked || !chk2.Checked)
            AllCheckBoxesAreChecked = false;
    }

    // Now use the flag
    if (AllCheckBoxesAreChecked)
    {
        // Do Stuff
    }
}