DataGrid 用CheckBox全选与到的问题: 点了下全选 能全选,但是不能取消 .大家帮着看下谢谢.<asp:DataGrid Id="MyDataGrid" Runat="server">
<Columns>
<asp:TempLateColumns>
<headerTemplate>
<asp:CheckBox id="ck1" runat="server" AutoPostBack="True" />
</haerderTemplate>
<ItemTemplate>
<asp:CheckBox id="ck2" runat="server" />
</ItemTemplate>
</asp:TemplateColumns>
</Columns>
</asp:DataGrid>
<asp:CheckBox id="ck3" runat="server" AutoPostBack="True" /> //这个放外面专门测试是否可全选的protected void Item_CreateItemTemplate(object e,DataGridItemEventArgse)
{
if(e.Item.ItemType == ListItemType.Header)
{
CheckBox chk = (CheckBox)e.Item.FindControl("ck1");
chk.CheckedChanged +=new EventHandler(chk_CheckedChanged); //注册事件
}
}protected void chk_CheckedChanged(object sender ,EventArgs e)
{
CheckBox allchk = sender as CheckBox ;
foreach (DataGridItem i in MyDataGrid.Items)
{
chk = (CheckBox)i.FindControl("ck2");
chk .Checked = allchk .Checked;
}
}ck3.CheckedChanged +=new EventHandler(chk_CheckedChanged); //ck3也注册下事件好做对比.
代码运行后 ck1 点下能全选,但在点 就是取消,但怎么也不会取消,页面会回发,但是不会触发事件, 就是点一下有用接着在点一下就没用,一下有用 一下没用,到底是那出问题了。ck3 点下能全选也能全部取消.
头痛,该注册的事件都注册了,为什么会有这种情况呢?
<Columns>
<asp:TempLateColumns>
<headerTemplate>
<asp:CheckBox id="ck1" runat="server" AutoPostBack="True" />
</haerderTemplate>
<ItemTemplate>
<asp:CheckBox id="ck2" runat="server" />
</ItemTemplate>
</asp:TemplateColumns>
</Columns>
</asp:DataGrid>
<asp:CheckBox id="ck3" runat="server" AutoPostBack="True" /> //这个放外面专门测试是否可全选的protected void Item_CreateItemTemplate(object e,DataGridItemEventArgse)
{
if(e.Item.ItemType == ListItemType.Header)
{
CheckBox chk = (CheckBox)e.Item.FindControl("ck1");
chk.CheckedChanged +=new EventHandler(chk_CheckedChanged); //注册事件
}
}protected void chk_CheckedChanged(object sender ,EventArgs e)
{
CheckBox allchk = sender as CheckBox ;
foreach (DataGridItem i in MyDataGrid.Items)
{
chk = (CheckBox)i.FindControl("ck2");
chk .Checked = allchk .Checked;
}
}ck3.CheckedChanged +=new EventHandler(chk_CheckedChanged); //ck3也注册下事件好做对比.
代码运行后 ck1 点下能全选,但在点 就是取消,但怎么也不会取消,页面会回发,但是不会触发事件, 就是点一下有用接着在点一下就没用,一下有用 一下没用,到底是那出问题了。ck3 点下能全选也能全部取消.
头痛,该注册的事件都注册了,为什么会有这种情况呢?
{
foreach (DataGridItem i in MyDataGrid.Items)
{
CheckBox chk = (CheckBox)i.FindControl( "ck2 ");
if (!chk.Checked)
{
chk.Checked = true;
}
else
{
chk.Checked = false;
}
}
} 试下
你试下这个.
!Ispostback里面
<script type="text/javascript">
function chooseAll(sender)
{
var inputs = document.all.tags("INPUT");
//编历页面上所有的input
for(var i = 0; i < inputs.length; i++)
{
//如果此input元素的类型为checkbox,并且其id中包含chkSelect
if(inputs[i].type == "checkbox" && inputs[i].id.indexOf("chkSelect") >= 0)
{
//设置此复选框的checked与全选复选框相同
inputs[i].checked = document.getElementById (sender).checked;
}
}
}
</script>
</head>
<body background="../../images/BackGround/background.gif">
<center >
<form id="form1" runat="server">
<div>
<uc1:SiteHeader ID="SiteHeader2" runat="server" />
<table width ="1000px" bgcolor ="#e6e6fa">
<tr>
<td style="width: 200px; height: 166px;" valign ="top" >
<DIV id=left04><IFRAME src="../../StyleSheet/caidan.htm" frameBorder="0"
width="100%" scrolling="no" height="166px"></IFRAME></DIV>
</td>
<td style="width: 595px; height: 166px;" valign ="top" >
<DIV id=right01><IFRAME src="../../StyleSheet/topbook.htm"
frameBorder="0" width="100%" height ="166px" scrolling="no"></IFRAME></DIV>
</td>
<td align ="left" valign ="top" style="height: 166px" >
<h3 style ="color :Red">精品在线:<img alt="news" src ="../../StyleSheet/new.gif" /></h3>
<img alt="New" align ="absmiddle" src="../../StyleSheet/dongman.jpg" /><br />
<h4 align ="right" ><a href ="http://www.bililong.blog.163.com/edit" title="更多好东西">更多好东西>></a></h4>
</td>
</tr>
<tr>
<td valign ="top" width ="995px" colspan ="3" align ="center" >
<a href="listtopic.aspx" >进入搜索区<img alt="进入" src="../Command/Admin.gif" /></a> <a href="listreplies.aspx" >进入回复区<img alt="进入" src="../Command/Admin.gif" /></a> <a href="../Default.aspx">返回<img alt="进入" src="../Command/Up.gif" /></a>
<asp:GridView ID="grvUsers" Width ="900px" runat="server" AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="UserID" DataSourceID="sdsUsers" PageSize="8" CellPadding="4" ForeColor="#333333" GridLines="None" OnRowCancelingEdit="grvUsers_RowCancelingEdit" OnRowDataBound="grvUsers_RowDataBound" OnRowDeleting="grvUsers_RowDeleting" OnRowEditing="grvUsers_RowEditing" OnRowUpdating="grvUsers_RowUpdating" OnRowUpdated="grvUsers_RowUpdated">
<Columns>
<asp:TemplateField>
<ItemStyle HorizontalAlign ="Center" />
<ItemTemplate>
<asp:CheckBox ID="chkSelect" runat="server" />
</ItemTemplate>
<HeaderTemplate>
<asp:CheckBox ID="chkAll" runat="server" />
</HeaderTemplate>
</asp:TemplateField>
后台如下:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;public partial class Forums_Admin_UserManager : System.Web.UI.Page
{
#region 请双击打开
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
}
}
protected void grvUsers_RowDataBound(object sender, GridViewRowEventArgs e)
{
ImageButton ibtnTemp;
if (e.Row.RowType == DataControlRowType.DataRow)
{
ibtnTemp = e.Row.FindControl("ibtnDelete") as ImageButton;
if (ibtnTemp != null)
{
ibtnTemp.Attributes.Add("onclick", "if(!confirm('你确定要删除" + ((DataRowView)e.Row.DataItem).Row["UserName"].ToString() + "吗?'))return false;");
}
//鼠标经过时,行背景色改变
e.Row.Attributes.Add("onmouseover", "this.style.backgroundColor='#E6F5FA'");
//鼠标移出时,行背景色改变
e.Row.Attributes.Add("onmouseout", "this.style.backgroundColor='#FFFFFF'");
}
if (e.Row.RowType == DataControlRowType.Header)
{
CheckBox chkAll = (CheckBox)e.Row.FindControl("chkAll");
chkAll.Attributes.Add("onclick", "chooseAll('" + chkAll.ClientID + "')");
}
}
protected void grvUsers_RowEditing(object sender, GridViewEditEventArgs e)
{
if (grvUsers.Rows[e.NewEditIndex].Cells[2].Text.ToLower() == "admin")
{
//取消编辑
e.Cancel = true;
}
else
{
//编辑状态时显示Footer
grvUsers.ShowFooter = true;
grvUsers.Columns[3].FooterText = "可编辑";
grvUsers.Columns[3].FooterStyle.ForeColor = System.Drawing.Color.Red;
}
}
protected void grvUsers_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
//取消编辑时隐藏Footer
grvUsers.ShowFooter = false;
}
protected void grvUsers_RowUpdated(object sender, GridViewUpdatedEventArgs e)
{
//更新完毕时隐藏Footer
grvUsers.ShowFooter = false;
}
protected void grvUsers_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
if (grvUsers.Rows[e.RowIndex].Cells[2].Text.ToLower() == "admin")
{
//取消删除
e.Cancel = true;
}
}
protected void btnDelete_Click(object sender, EventArgs e)
{
CheckBox chk;
//编历GridView的每一行
foreach (GridViewRow grv in grvUsers.Rows)
{
//查找chkSelect控件
chk = grv.FindControl("chkSelect") as CheckBox;
//如果找到
if (chk != null)
{
//并且其为选种状态
if (chk.Checked)
{
//执行删除功能
sdsUsers.DeleteParameters["UserID"].DefaultValue = grvUsers.DataKeys[grv.RowIndex].Value.ToString(); sdsUsers.Delete();
}
}
}
}
protected void grvUsers_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
//if (Page.IsValid)
//{
// string oldEmail = ((TextBox)grvUsers.Rows[e.RowIndex].FindControl("txtEmail")).Text.Trim();
// string newEmail = e.NewValues["Email"].ToString();
// lblMessage.Text = "原邮箱号:" + oldEmail + "改后为:" + newEmail;
//}
if (ValidEmail.IsEmailReg(((TextBox)grvUsers.Rows[e.RowIndex].FindControl("txtEmail")).Text.Trim()))
{
lblMessage.Text = "邮箱地址已存在,请重新输入!";
e.Cancel = true;
}
} #endregion
}