如何在删除行之前仔细检查是否选中了复选框

时间:2017-03-02 08:24:31

标签: c# asp.net webforms

我在gridview中有一个复选框用于删除一个selectin项目,在asp.net上我必须得到复选框的3索引值,用(,)分隔,每行用(|)分隔,如果用户选择复选框一次,然后单击删除键我确实删除了所选行,但是如果用户选中并取消选中同一行,则一定不要删除一行,但如果在单击删除之前检查并取消选中它仍然会删除它键。 你可以帮我解决我的代码吗?

Asp. Net code:


<asp:Panel ID="panLegalRecords" runat="server" ScrollBars="Vertical" ClientIDMode="static" Width="890">
                            <asp:GridView ID="gvLegalRecords" runat="server" DataKeyNames="ClientCode,DebtorNumber,DebtorName,DebtorSSN" AutoGenerateColumns="False" OnRowCommand="gvLegalRecords_RowCommand" OnSorting="gvLegalRecords_Sorting" OnSelectedIndexChanging="gvLegalRecords_SelectedIndexChanging" OnRowDeleting="gvLegalRecords_RowDeleting" OnRowDataBound="gvLegalRecords_RowDataBound" CellPadding="4" ForeColor="#333333" GridLines="None" AllowSorting="True" Width="98%">
                                <HeaderStyle BackColor="#73B1E8" ForeColor="#ffffff" Font-Bold="true" Font-Size="8" />
                                <RowStyle BackColor="#F7F6F3" ForeColor="#000000" />
                                <AlternatingRowStyle BackColor="#ffffff" ForeColor="#000000" />
                                <SelectedRowStyle BackColor="#336699" ForeColor="#ffffff" />
                                <Columns>
                                    <asp:TemplateField HeaderText="DELETE">
                                        <ItemTemplate>
                                            <asp:CheckBox ID="chkDeleteKey" runat="server" Checked="false"  OnClick="document.getElementById('hfLegalRecords').value =  document.getElementById('hfLegalRecords').value + this.checked + ',' + this.parentNode.parentNode.cells[2].innerHTML + ',' + this.parentNode.parentNode.cells[3].innerHTML + '|';" />
                                        </ItemTemplate>
                                    </asp:TemplateField>
                                    <asp:CommandField ButtonType="Image" DeleteImageUrl="~/Images/48/delete-row.png" SelectImageUrl="~/Images/48/select-row.png" ShowDeleteButton="true" ShowSelectButton="true">
                                        <ItemStyle Font-Size="8pt" Width="10%" />
                                    </asp:CommandField>

                                    <asp:BoundField DataField="ClientCode" HeaderText="Client Code">
                                        <HeaderStyle HorizontalAlign="Left" />
                                        <ItemStyle Font-Size="8pt" HorizontalAlign="Left" Width="10%" />
                                    </asp:BoundField>
                                    <asp:BoundField DataField="DebtorNumber" HeaderText="Debtor Number">
                                        <HeaderStyle HorizontalAlign="Left" />
                                        <ItemStyle Font-Size="8pt" HorizontalAlign="Left" Width="10%" />
                                    </asp:BoundField>
</columns>

    protected void btnDelete_Click(object sender, EventArgs e)
    {
        string[] Checked = hfLegalRecords.Value.Split('|');
        for (int i = 0; i < Checked.Length - 1; ++i)
        {
            Boolean checkSelect = false;

            string[] value = Checked[i].Split(',');

            string checkbox = value[0];
            string ClientCode = value[1];
            string DebtorNumber = value[2];
            for (int j = 0; j < Checked.Length - 1; ++j)
            {
                string[] valueS = Checked[j].Split(',');
                string checkboxS = valueS[0];
                string ClientCodeS = valueS[1];
                string DebtorNumberS = valueS[2];
                if (ClientCode == ClientCodeS && DebtorNumber == DebtorNumberS)
                    checkSelect = true;
            }
            if (checkSelect == true)
                LegalEvents.RemoveSelectCheckBox(ClientCode, DebtorNumber);
        }
        LoadLegalRecords();
    }

1 个答案:

答案 0 :(得分:1)

首先,我建议您将隐藏字段发送的数据拆分为多个隐藏字段,而不是使用一个隐藏字段并使用string.Split()。 还建议您解压缩JavaScript事件以将隐藏字段填充到函数中。 它将使代码更容易维护,并且不易出错。

其次,由于上面提到的注释,我很难理解你的代码应该做什么。 但我认为你的问题来自于反复迭代相同的值。 你的两个循环都迭代(Checked.Length -1)次,你基本上检查arr [i] == arr [i]是否总是为真。 因此,始终会执行LegalEvents.RemoveSelectCheckBox(ClientCode, DebtorNumber);