2017-03-02 137 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);

相關問題