在DataGrid页眉上添加全选的CheckBox控件(其他控件可类推)
方法一,后台注册js脚本实现:
页面:
<asp:datagrid id="dgUserList" runat="server" Width="640px" BorderColor="White" PagerStyle-HorizontalAlign="Right"
AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False">
<AlternatingItemStyle BackColor="#F5F5F5"></AlternatingItemStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
<HeaderStyle HorizontalAlign="Center" ForeColor="White" BackColor="#4A95FD" Height="8"></HeaderStyle>
<PagerStyle HorizontalAlign="Right" Mode="NumericPages"></PagerStyle>
<Columns>
<asp:TemplateColumn>
<HeaderTemplate>
<asp:CheckBox id="chkAll" runat="server"></asp:CheckBox>
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox id="chkItem" runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="id" HeaderText="序号"></asp:BoundColumn>
<asp:BoundColumn DataField="username" HeaderText="用户名"></asp:BoundColumn>
<asp:BoundColumn DataField="workno" HeaderText="工号"></asp:BoundColumn>
<asp:BoundColumn DataField="dept" HeaderText="部门"></asp:BoundColumn>
</Columns>
<PagerStyle Visible="False" HorizontalAlign="Right" Mode="NumericPages"></PagerStyle>
</asp:datagrid>
AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False">
<AlternatingItemStyle BackColor="#F5F5F5"></AlternatingItemStyle>
<ItemStyle HorizontalAlign="Center"></ItemStyle>
<HeaderStyle HorizontalAlign="Center" ForeColor="White" BackColor="#4A95FD" Height="8"></HeaderStyle>
<PagerStyle HorizontalAlign="Right" Mode="NumericPages"></PagerStyle>
<Columns>
<asp:TemplateColumn>
<HeaderTemplate>
<asp:CheckBox id="chkAll" runat="server"></asp:CheckBox>
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox id="chkItem" runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumn DataField="id" HeaderText="序号"></asp:BoundColumn>
<asp:BoundColumn DataField="username" HeaderText="用户名"></asp:BoundColumn>
<asp:BoundColumn DataField="workno" HeaderText="工号"></asp:BoundColumn>
<asp:BoundColumn DataField="dept" HeaderText="部门"></asp:BoundColumn>
</Columns>
<PagerStyle Visible="False" HorizontalAlign="Right" Mode="NumericPages"></PagerStyle>
</asp:datagrid>
后台代码:
private void dgUserList_PreRender(object sender, System.EventArgs e)
{
foreach (DataGridItem item in dgUserList.Controls[0].Controls)
{
if (item.ItemType == ListItemType.Header)
{
CheckBox chkAll=(CheckBox)item.FindControl("chkAll");
System.Text.StringBuilder strScript = new System.Text.StringBuilder("<script language='javascript'> n");
strScript.Append(" function checkStatus() { n");
strScript.Append(" var bAll = true; n");
strScript.Append(" bAll = document.all('" + chkAll.ClientID + "').checked; n");
for(int i=0; i<dgUserList.Items.Count ; i++)
{
strScript.Append(" document.all('" + dgUserList.Items[i].Cells[0].FindControl("chkItem").ClientID + "').checked = bAll; n");
}
strScript.Append(" } n");
strScript.Append("</script> n");
if(!Page.IsClientScriptBlockRegistered("checkStatus"))
Page.RegisterClientScriptBlock("checkStatus",strScript.ToString());//Page.RegisterClientScriptBlock是注册脚本内容;Page.RegisterClientScriptInclude("checkStatus","checkAll.js") 是引用脚本文件,要注意区分。
chkAll.Attributes.Add("onclick","checkStatus()");
return;
}
}
{
foreach (DataGridItem item in dgUserList.Controls[0].Controls)
{
if (item.ItemType == ListItemType.Header)
{
CheckBox chkAll=(CheckBox)item.FindControl("chkAll");
System.Text.StringBuilder strScript = new System.Text.StringBuilder("<script language='javascript'> n");
strScript.Append(" function checkStatus() { n");
strScript.Append(" var bAll = true; n");
strScript.Append(" bAll = document.all('" + chkAll.ClientID + "').checked; n");
for(int i=0; i<dgUserList.Items.Count ; i++)
{
strScript.Append(" document.all('" + dgUserList.Items[i].Cells[0].FindControl("chkItem").ClientID + "').checked = bAll; n");
}
strScript.Append(" } n");
strScript.Append("</script> n");
if(!Page.IsClientScriptBlockRegistered("checkStatus"))
Page.RegisterClientScriptBlock("checkStatus",strScript.ToString());//Page.RegisterClientScriptBlock是注册脚本内容;Page.RegisterClientScriptInclude("checkStatus","checkAll.js") 是引用脚本文件,要注意区分。
chkAll.Attributes.Add("onclick","checkStatus()");
return;
}
}
方法2
(一).功能
1. JavaScript检索CheckBox并实现全选和全消功能
用C#等写的CheckBox需要回发到服务端执行,
而用JavaScript可以在直接客户端实现,效率高些
(二).代码
1. DataGrid中的代码主要片段:
<Columns>
<HeaderTemplate> //头模板代码
<asp:CheckBox id="chkHeader" runat="server" AutoPostBack="False" //AutoPostBack设为假,不需要回发
onclick="javascript:SelectAll(this);"></asp:CheckBox>
</HeaderTemplate>
<ItemTemplate> //项模板代码
<asp:CheckBox id="chkItem" runat="server"></asp:CheckBox>
</ItemTemplate>
</Columns>
<HeaderTemplate> //头模板代码
<asp:CheckBox id="chkHeader" runat="server" AutoPostBack="False" //AutoPostBack设为假,不需要回发
onclick="javascript:SelectAll(this);"></asp:CheckBox>
</HeaderTemplate>
<ItemTemplate> //项模板代码
<asp:CheckBox id="chkItem" runat="server"></asp:CheckBox>
</ItemTemplate>
</Columns>
2. 在当页加入:
<script language="javascript">
function SelectAll(tempControl)
{
//将除头模板中的其它所有的CheckBox取反
var theBox=tempControl;
xState=theBox.checked;
elem=theBox.form.elements;
for(i=0;i<elem.length;i++)
if(elem[i].type=="checkbox" && elem[i].id!=theBox.id)
{
if(elem[i].checked!=xState)
elem[i].click();
}
}
</script>
function SelectAll(tempControl)
{
//将除头模板中的其它所有的CheckBox取反
var theBox=tempControl;
xState=theBox.checked;
elem=theBox.form.elements;
for(i=0;i<elem.length;i++)
if(elem[i].type=="checkbox" && elem[i].id!=theBox.id)
{
if(elem[i].checked!=xState)
elem[i].click();
}
}
</script>
3.当使用者选择好后台代码取得某列CheckBox的值:
for (int i = 0;i <this.DataGrid.Items.Count;i++)
{
bool blnIfSelect = ((CheckBox)this.DataGrid.Items[i].FindControl("chkItem")).Checked;
....; //这是可以根据blnIfSelect进行各种操作了
}

浙公网安备 33010602011771号