Datagrid实现数据绑定后,第一列用CheckBox实现全选功能。代码如下:
test1.aspx
<HEAD>
<title>Admin_Reguser</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<LINK href="admin_Style.css" type="text/css" rel="stylesheet">
<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>
</HEAD>datagrid中全选列模板:
<asp:TemplateColumn>
<HeaderStyle Font-Size="9pt" Width="2%"></HeaderStyle>
<ItemStyle Font-Size="11px" HorizontalAlign="Center" Width="15px"></ItemStyle>
<HeaderTemplate>
<asp:CheckBox id="chkAll" onclick="javascript:SelectAll(this);" runat="server" AutoPostBack="false"></asp:CheckBox>
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox id="chkUserID" runat="server"></asp:CheckBox><INPUT id=SelectedID type=hidden value='<%# DataBinder.Eval(Container.DataItem, "UserID")%>' runat="server">
</ItemTemplate>
</asp:TemplateColumn>
后台实现:
CheckBox chkTmp;
string strTmpID="";
foreach (DataGridItem oDataGridItem in this.dgrdUser.Items)
{
chkTmp = (CheckBox)oDataGridItem.FindControl("chkUserID");
if (chkTmp.Checked)
{
strTmpID+=((HtmlInputHidden)oDataGridItem.FindControl("SelectedID")).Value+",";
}
}
return strTmpID;根据网上流传的方法做的。前台已实现全选或取消功能,就是后台得不到已选择的某几行的值,不知道为什么?

解决方案 »

  1.   

    参考
    http://singlepine.cnblogs.com/articles/266538.html
    using System.Text;private void btndelete_Click(object sender, System.EventArgs e)
    {
        StringBuilder s=new StringBuilder();
        foreach(DataGridItem di in DataGrid1.Items) 
        { 
                     if(((CheckBox)(di.FindControl("chkUserID"))).Checked==true) 
                     { 
                      s.Append(",").Append(DataGrid1.DataKeys[di.ItemIndex].ToString());
                     } 
        } 
        if(s.ToString().StartsWith(",")==true)
        {
            delete(s.ToString().Substring(1,s.ToString().Length-1));
        }
    }private void delete(string id)
    {
        SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]);
        string sql=@"declare @sql nvarchar(400)
                    set @sql = 'delete from testgrid where UserID in('+@UserID+')'
                    exec( @sql)";
        SqlCommand comm=new SqlCommand(sql,conn);
        SqlParameter parm1=new SqlParameter("@UserID",SqlDbType.VarChar,200);
        parm1.Value=id;
        comm.Parameters.Add(parm1);
        conn.Open();
        comm.ExecuteNonQuery();
        conn.Close();
        DataBind();
    }
      

  2.   

    小山大侠:
    我直接在
     if(((CheckBox)(di.FindControl("chkUserID"))).Checked==true) 
      { 
    Response.write("chkUserID founded");
    }运行结果并没有输入这条语句。是不是没有查找到chkUserID这个控件哦。