我在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();
}
答案 0 :(得分:1)
首先,我建议您将隐藏字段发送的数据拆分为多个隐藏字段,而不是使用一个隐藏字段并使用string.Split()。 还建议您解压缩JavaScript事件以将隐藏字段填充到函数中。 它将使代码更容易维护,并且不易出错。
其次,由于上面提到的注释,我很难理解你的代码应该做什么。
但我认为你的问题来自于反复迭代相同的值。
你的两个循环都迭代(Checked.Length -1)次,你基本上检查arr [i] == arr [i]是否总是为真。
因此,始终会执行LegalEvents.RemoveSelectCheckBox(ClientCode, DebtorNumber);