老农如是想,如是说,如是为
天才首页 > 博客 > 玩代码  >  ASP.NET给DataGrid,Repeater等添加全选批量删除等功能  | 登录
  很多情况下,在管理或者查看列表的时候我们需要很需要“全选”这个功能,这在ASP.NET中是非常容易实现的,下面我就将演示一点小代码实现这一功能。
  实现全选的还是js的一个小函数:
  
function  CheckAll(e,itemname){
    var aa=document.getElementsByName(itemname);
    if(aa==undefined) return;
    for (var i=0; i<aa.length; i++)aa[i].checked = e.checked;
}      

  
  先看在asp:Repeater中的实现过程。

  在HeaderTemplate中直接添加全选的一个CheckBox: 
<input name="chkall" value="1" type="checkbox" onclick="CheckAll(this,'Item')"/>

  在ItemTemplate中绑定的时候只需要给Input设置目前行的ID编号等即可:
        <td align="center" ><input name="Item" type="checkbox" value='<%# Eval("deal_id")%>'/></td>


  然后我们创建一个“全部删除”的LinkButton,当点击的时候执行一个后台代码:
<asp:LinkButton id="LB_Bak_Delete" text="批量删除" OnCommand="LinkButton_Command"  runat="server" CommandName="delete" visible="false"/>

  所执行的函数名称是LinkButton_Command,给其设置参数CommandName的主要目的就是标记这个操作是删除功能(很多时候还需要生成啊,高亮啊等操作),看看LinkButton_Command的执行:
protected void LinkButton_Command(Object sender, CommandEventArgs e){
    string ids=Request.Form["Item"];
    switch(e.CommandName){
        case "delete":
        BakDelete(ids);
        break;
    }
    Data_List_Load();//重新加载
    return ;

}
private void BakDelete(string ids){
    //ODeal是个类
    if(!String.IsNullOrEmpty(ids) && ODeal.Delete("[deal_id] in ("+ids+")")){
        OutMess("批量删除数据成功");
    }else{
        OutMess("批量删除失败");
    }
}

  
 然后我们看看在 DataGrid  或者 DataView中的方法:


  使用的js还是一样的,在前台显示的时候:
    <asp:TemplateColumn HeaderText="<input name='chkall' value='1' type='checkbox' onclick='CheckAll(this,JS_Item_Text)'/>" ItemStyle-Width="30px" ItemStyle-HorizontalAlign="Center" HeaderStyle-HorizontalAlign="Center"  HeaderStyle-CssClass="head">
        <ItemTemplate><input name="Item" type="checkbox" value='<%# Eval("td_id")%>'/></ItemTemplate>
    </asp:TemplateColumn>

  这里需要注意的是CheckAll执行的方法中有个单引号,这里是不能加进去的,就先声明一个js的变量,然后在加载列表的时候写个js客户端注册:
 列表ClassGridDataBind的时候,加入:
    string sScript = "var JS_Item_Text='Item';";
    ClientScriptManager Objcsm = Page.ClientScript;
    if (!Objcsm.IsStartupScriptRegistered("_JS_Item_Text")){
        Objcsm.RegisterStartupScript(this.GetType(), "_JS_Item_Text", sScript, true);
    } 


  然后其他的和Repeater的都是一样的。

  
天气:大雨,ccdot发表于2008-4-19 22:02:58,阅读了221次,共有个1回复.

真是不错呀

shanxia post in 2008-5-1 12:21:10 #1  
  1. 顺其自然,不治而治.
  2. 不要提交任何带有网址URL信息的评论.
  3. 需要更多信息?请使用站内搜索,郁闷了?听听我在听什么吧!
用户名:*验证:看不清楚请点击刷新验证码*
内容:
青花瓷 边做边爱 征途 穷开心 摇啊摇 我们的歌 感动天感动地 白狐 自由飞翔 思念是一种病 分手那天 爱死了昨天
中国话 日不落 求佛 上海滩 等一分钟 天路 老人与海 左边 凤舞九天 有没有人告诉你 遇上你是我的缘 做你的爱人
拉拉爱 大悲咒 周杰伦 刘德华 命运 等爱的玫瑰 凤凰传奇 依然在一起 樱花草 dj flash 私服 为你写诗 你的承诺
杨惠妍 股票 博客 论坛 流行歌曲 小游戏 S.H.E 王力宏 博客 加盟 月亮之上 私服 彩虹 周笔畅 蔡依林 感恩的心
搞笑 流行音乐 mp3歌曲 mp3 股票 招商 歌曲mp3 双人小游戏 dj舞曲 最新歌曲 小游戏 美女 股票 dj mp3歌曲 mp3