2017-03-02 141 views
0

我有gridview中的复选框用于删除选择项目,并且在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

首先,我会建议你通过拆分隐藏字段发送到多个隐藏字段中的数据,而不是使用一个隐藏字段,并使用string.Split()。 也建议您提取JavaScript事件以将隐藏字段填充到函数中。它会使代码更易于维护,并且不易出错。

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

相关问题