取消选中asp.netWeb表单复选框是否会撤消CheckedChanged事件?

1wnzp6jl  于 2023-03-20  发布在  .NET
关注(0)|答案(1)|浏览(139)

我有CheckedChanged事件处理程序,它在选中复选框时从网格视图中隐藏一行。现在,当我取消选中复选框时,什么也不会发生。实际上,我希望在取消选中复选框时隐藏的行可见。因此,我希望在取消选中复选框时发生相反的情况。目前,事件处理程序确实隐藏了该行,但我希望在取消选中复选框时该行重新出现
复选框:

<div class="row mt-4 mb-2" style="width: 50%; margin: auto;">
                <div class="col-md-12">
                    <div class="check-label-Prof-Clients" >
                        <asp:CheckBox ID="chkProfClients" class="check-trading" runat="server" Enabled="true" AutoPostBack="true" 
                            ViewStateMode="Enabled" EnableViewState="true" Checked="false" OnCheckedChanged="chkProfClients_CheckedChanged"/>
                        <label class="form-check-label" style="font-size: 14px; font-weight: 400;" for="chkProfClients">
                                 Only Show Profitable Clients
                        </label>     
                    </div>
                </div>
            </div>

复选框CheckedChanged事件处理程序:

protected void chkProfClients_CheckedChanged(object sender, EventArgs e)
{
    for (int i = 0; i <= gridProfitMargin.Rows.Count - 1; i++)
    {
        var profitValue = Convert.ToDouble(gridProfitMargin.Rows[i].Cells[13].Text);
        if (profitValue <= 0)
        {
            gridProfitMargin.Rows[i].Visible = false;
        }
        else
        {
            gridProfitMargin.Rows[i].Visible = true;
        }
    }       
}

我设置了“Autopostback = true”,但取消选中复选框时仍然没有任何React

dgiusagp

dgiusagp1#

您运行了一个循环,但没有检查复选框是选中还是未选中。
因此,您还需要检查复选框的状态,如果复选框= true,则代码和逻辑必须不同于复选框未选中时的情况。
所以,然后这个:

protected void chkProfClients_CheckedChanged(object sender, EventArgs e)
{
    for (int i = 0; i <= gridProfitMargin.Rows.Count - 1; i++)
    {
        var profitValue = Convert.ToDouble(gridProfitMargin.Rows[i].Cells[13].Text);
        if (chkProfClients.Checked)
        {
            if (profitValue > 0)
                gridProfitMargin.Rows[i].Visible = true;
            else
                gridProfitMargin.Rows[i].Visible = false;
        }
        else
        {
            // don't care - always show
            gridProfitMargin.Rows[i].Visible = true;
        }
    }
}

我想你可以把代码缩短一点,这样说:

protected void chkProfClients_CheckedChanged(object sender, EventArgs e)
{
    for (int i = 0; i <= gridProfitMargin.Rows.Count - 1; i++)
    {
        var profitValue = Convert.ToDouble(gridProfitMargin.Rows[i].Cells[13].Text);
        if (chkProfClients.Checked)
        {
            gridProfitMargin.Rows[i].Visible = (profitvalue > 0);
        }
        else
        {
            // don't care - always show
            gridProfitMargin.Rows[i].Visible = true;
        }
    }
}

但是,这归结为你在这里发现什么更具可读性。
尝试第一个,这样,网格视图的每一行都有一个循环,但是你没有考虑复选框是否被选中(真)。

相关问题