GridView+CheckBox实现全选反选删除
- C# code
如题:现要求所有操作在服务器端实现请大家给出详细代码
[解决办法]
控制checkbox用JS:
function checkAll(checked, lstName) {
var input = document.getElementsByTagName("INPUT");
for (var i = 0; i < input.length; i++) {
if (lstName == null) {
input[i].checked = checked;
}
else if (input[i].type == "checkbox" && input[i].id.length > lstName.length && input[i].id.indexOf(lstName) > 0 ) {
input[i].checked = checked;
}
}
}
aspx:
<Columns>
<asp:TemplateField >
<HeaderTemplate >
<asp:CheckBox ID="lstChkAll" runat="server" onclick="checkAll(this.checked)" Text ="全选"></asp:CheckBox>
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox runat ="server" ID="cboxTemple" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
删除么,直接用gridview的command事件后台处理
[解决办法]
- C# code
protected void cbSelectAll_CheckedChanged(object sender, EventArgs e) { foreach (GridViewRow gvr in gvList.Rows) { ((CheckBox)gvr.Cells[0].FindControl("cbSelect")).Checked = ((CheckBox)sender).Checked; } } protected void btnDelete_Click(object sender, EventArgs e) { foreach (GridViewRow gvr in gvList.Rows) { if (((CheckBox)gvr.Cells[0].FindControl("cbSelect")).Checked) { gvList.DeleteRow(gvr.DataItemIndex); } } }
[解决办法]
- HTML code
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="KHID" Width="100%" AllowPaging="True" PageSize="20" onpageindexchanging="GridView1_PageIndexChanging"> <Columns> <asp:TemplateField FooterText="全选" HeaderText="选择"> <HeaderTemplate> <asp:CheckBox ID="CheckBox2" runat="server" AutoPostBack="True" OnCheckedChanged="CheckAll" Text="全选" /> </HeaderTemplate> <ItemTemplate> <asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="True" Font-Names="宋体" Font-Size="9pt" /> </ItemTemplate> </asp:TemplateField> <asp:BoundField DataField="KHID" HeaderText="客户ID" /> <asp:BoundField DataField="KHDM" HeaderText="客户代码" /> <asp:BoundField DataField="MC" HeaderText="客户姓名" /> </Columns> </asp:GridView>
[解决办法]
- HTML code
<asp:GridView ID="GV" runat="server" AutoGenerateColumns="False" AllowPaging="True" OnPageIndexChanging="GV_PageIndexChanging" Width="100%" CellPadding="4" ForeColor="#333333" GridLines="None"> <Columns> <asp:TemplateField> <ItemTemplate> <asp:CheckBox ID="chkSelected" Checked="False" Visible="True" runat="server"> </asp:CheckBox></ItemTemplate> </asp:TemplateField> <asp:BoundField DataField="ID" HeaderText="编号" /> <asp:BoundField DataField="AccessedPage" HeaderText="访问页面" /> <asp:BoundField DataField="UrlReferer" HeaderText="前一页面" /> <asp:BoundField DataField="AccessTime" HeaderText="访问时间" /> <asp:BoundField DataField="IP" HeaderText="IP地址" HtmlEncode="False" DataFormatString="{0:d}" /> <asp:HyperLinkField HeaderText="IP详情" DataTextFormatString="详细信息" Text="Detail" DataNavigateUrlFormatString="~/Manage/IPDetail.aspx?ipAddress={0}" DataNavigateUrlFields="IP" /> <asp:BoundField DataField="BrowserName" HeaderText="浏览器" /> <asp:BoundField DataField="BrowserVersion" HeaderText="版本" /> <asp:BoundField DataField="OS" HeaderText="操作系统" /> <asp:BoundField DataField="LocalLanguage" HeaderText="语言" /> </Columns> </asp:GridView>
[解决办法]
我是这样用的,正常使用,供参考:
protected void CheckBox2_CheckedChanged(object sender, EventArgs e)
{//复选CheckBox2按钮放在GridView1外,CheckBox1是GridView1中模板列控件
if (CheckBox2.Checked == true)
{
CheckBox2.Text = "全选";
for (int i = 0; i < GridView1.Rows.Count; i++)
{
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
cbox.Checked = true;
}
}
else
{
CheckBox2.Text = "全不选";
for (int i = 0; i < GridView1.Rows.Count; i++)
{
CheckBox cbox = (CheckBox)GridView1.Rows[i].FindControl("CheckBox1");
cbox.Checked = false;
}
}
}
[解决办法]
后台可以删除的
在GV中生成的也是input
我写过Repeater的。原理是一样的。
- JScript code
$("#Checkbox1").click(function() { ($(this).attr("checked")); if ($(this).attr("checked") == false) { $("input[type=checkbox]").attr("checked", false); } else { $("input[type=checkbox]").attr("checked", true); }});