>>51aspx首页 | >>Winform源码 | >>.Net源码大搜捕 | >>问题/帮助

Asp.net源码交流论坛

登录 注册
  • 标签
  • 会员
  • 搜索
  • 帮助

Asp.net源码交流论坛 » Asp.net交流讨论区 » Asp.net技术文章 » 转:手把手教你如何扩展GridView之自带CheckBox

帖子标题
业务申请区
  • 实名认证申请
  • 免费.Net主机申请
  • 积分奖励申请
  • 有偿服务申请
Asp.net交流讨论区
  • Asp.net技术问答
  • .Net项目、服务交易区
  • .Net源码问答区
  • Asp.net技术文章
  • 常用工具下载
Asp.net资源发布区
  • [源码发布区]
  • [视频发布区]
  • [商业代码区]
  • [其他.net相关资源]
Asp.net专题讨论区
  • Ajax/Atlas无刷新技术
  • 面向对象开发
  • ADO.net讨论区
  • 控件专题讨论
源码环境搭建和部署视频! 源码使用常见问题 51Aspx自有服务产品 开业特惠 快速通道:[源码发布] | [实名认证]
1/1页1 跳转到页查看:6364
发新话题 回复该主题
键盘左右键可以进行前后翻页操作
帮助

转:手把手教你如何扩展GridView之自带CheckBox

本主题由 董事长 51aspx 于 2008-6-12 8:45:13 执行 移动主题 操作
在线 51aspx
头像

51aspx

  • [超级管理员]
  • [2800]
  • 2071
  • 2007-05-17
源码贡献奖实名用户
51aspx 2007-06-10 18:02 | 只看楼主 树型| 收藏| 小 中 大 1 #

转:手把手教你如何扩展GridView之自带CheckBox

[实名用户所发信息,推荐关注实名贴,值得关注]


我们在使用GridView的时候,很多时候需要使用CheckBox列,比如批量删除,批量审批,但是每每都需要记住繁琐的实现方法。多麻烦呀!再次给GridView做个手术,让它自己就能产生CheckBox岂不爽死了。以后您就有权利忘记怎么实现CheckBox列了。哈哈,作咱们这行的,就要学的慢慢退化,什么事情都记着,累也累死了。
      下面谈谈我这实现的思路:
      因为GridView是基于模板的,Columns也不能在后台添加,所以排除通过添加Column来实现,而采用在GridView创建行的时候动态创建表单元格,在表头行上添加一个全选CheckBox,数据行上添加选择框,点击全选,通过向页面注册的脚本来实现全选。
  下面就看看关键的代码:
    为了增加灵活性,添加了一个属性,控制是否显示CheckBox列

[复制到剪贴板]
CODE:

  //是否显示全选
        [
      Description("显示全选列"),
      Category("扩展"),
        DefaultValue(false)
      ]
        public virtual bool ShowCheckAll
        {
            get
            {
                object obj2 = this.ViewState["ShowCheckAll"];
                if (obj2 != null)
                {
                    return (bool)obj2;
                }
                return false;
            }
            set
            {
                bool aShowCheckAll = this.ShowCheckAll;
                if (value != aShowCheckAll)
                {
                    this.ViewState["ShowCheckAll"] = value;
                    if (base.Initialized)
                    {
                        base.RequiresDataBinding = true;
                    }
                }
            }
        }


用于控制选择列是添加到表的左端还是右端的属性

[复制到剪贴板]
CODE:

public enum CheckColumnAlign
    {
        Left, Right
    }
  //是否显示全选
        [
      Description("全选列的位置"),
      Category("扩展"),
      DefaultValue(CheckColumnAlign.Left)
      ]
        public virtual CheckColumnAlign CheckColumnAlign
        {
            get
            {
                object obj2 = this.ViewState["CheckColumnAlign"];
                if (obj2 != null)
                {
                    return (CheckColumnAlign)obj2;
                }
                return CheckColumnAlign.Left;
            }
            set
            {
                CheckColumnAlign aCheckColumnAlign = this.CheckColumnAlign;
                if (value != aCheckColumnAlign)
                {
                    this.ViewState["CheckColumnAlign"] = value;
                    if (base.Initialized)
                    {
                        base.RequiresDataBinding = true;
                    }
                }
            }
        }


在页面加载的时候,注册全选脚本

[复制到剪贴板]
CODE:
StringBuilder sb = new StringBuilder();
            sb.Append(&quot; <script type=\&quot;text/javascript\&quot;>&quot;);
            sb.Append(&quot;function CheckAll(oCheckbox)&quot;);
            sb.Append(&quot;{&quot;);
            sb.Append(&quot;var GridView2 = document.getElementById(\&quot;&quot; + this.ClientID + &quot;\&quot;);&quot;);
            sb.Append(&quot; for(i = 1;i < GridView2.rows.length; i++)&quot;);
            sb.Append(&quot;{&quot;);
            sb.Append(&quot;var inputArray = GridView2.rows[i].getElementsByTagName(\&quot;INPUT\&quot;);&quot;);
            sb.Append(&quot;for(var j=0;j<inputArray.length;j++)&quot;);
            sb.Append(&quot;{ if(inputArray[j].type=='checkbox')&quot;);
            sb.Append(&quot;{if(inputArray[j].id.indexOf('ItemCheckBox',0)>-1){inputArray[j].checked =oCheckbox.checked; }}  }&quot;);
            sb.Append(&quot;}&quot;);
            sb.Append(&quot; }&quot;);
            sb.Append(&quot;</script>&quot;);
            ScriptManager.RegisterClientScriptBlock(this, this.GetType(), &quot;CheckFun&quot;, sb.ToString(), false);


在GridView的RowCreate事件中,添加如下代码,用于创建CheckBox列

[复制到剪贴板]
CODE:
if (ShowCheckAll)
                {
                    GridViewRow row = e.Row;
                    if (row.RowType == DataControlRowType.Header)
                    {
                        TableCell cell = new TableCell();
                        cell.Wrap = Wrap;
                        cell.Width = Unit.Pixel(50);
                        cell.Text = &quot; <input id='Checkbox2' type='checkbox' onclick='CheckAll(this)'/><label>全选</label>&quot;;
                        if (CheckColumnAlign == CheckColumnAlign.Left)
                        {
                            row.Cells.AddAt(0, cell);
                        }
                        else
                        {
                            int index = row.Cells.Count;
                            row.Cells.AddAt(index, cell);
                        }
                    }
                    else if (row.RowType == DataControlRowType.DataRow)
                    {
                        TableCell cell = new TableCell();
                        cell.Wrap = Wrap;
                        CheckBox cb = new CheckBox();
                        cell.Width = Unit.Pixel(50);
                        cb.ID = &quot;ItemCheckBox&quot;;
                        cell.Controls.Add(cb);
                        if (CheckColumnAlign == CheckColumnAlign.Left)
                        {
                            row.Cells.AddAt(0, cell);
                        }
                        else
                        {
                            int index = row.Cells.Count;
                            row.Cells.AddAt(index, cell);
                        }
                    }
                }


用于记录CheckBox的ID的属性

[复制到剪贴板]
CODE:
public string CheckBoxID
        {
            get
            {
                return &quot;ItemCheckBox&quot;;
            }
        }


使用的时候,只需要设置扩展GridView的ShowCheckAll=True,设置CheckColumnAlign为Left,CheckBox列在最左边,Right在最右面,注意因为没有添加Columns,所以Columns并没有因为因为添加了CheckBox列而变化,在Column的索引中,CheckBox列不在计算范围。
在扩展的GridView的OnRowDataBound事件中,就可以通过

[复制到剪贴板]
CODE:
CheckBox cb = e.Row.FindControl(gridView.CheckBoxID) as CheckBox;
if(cb!=null)
{ 
    if(cb.Checked)
  {
        //...
  }
}


来获取是否已经选中此行。
最后编辑51aspx 最后编辑于 2007-11-29 19:14:46
技术问题请直接发布到论坛,客户服务QQ:1120930903,合作及咨询QQ:793095132
常见问题:点这里,请仔细查看!
基础配置视频: 点这里
问题搜索:请点击!
积分奖励: 关于论坛实名版块的建议...
 

TOP

 

发送短消息

查看公共资料

查找该会员全部帖子

  • 2
  • 27
  • 594 分
  • 364.6 元
  • 北京
  • 在线
  • QQ: 793095132 793095132
离线 soulsword
头像

夜月的兰提斯

  • [程序员]
  • [148]
  • 143
  • 2007-12-10
soulsword 2008-03-17 08:58 树型| 收藏| 小 中 大 2 #

回复:转:手把手教你如何扩展GridView之自带CheckBox



..............
这东西...哭啊...多省心的办法啊...我我我也要学着变懒,!!!
 

TOP

 

发送短消息

查看公共资料

查找该会员全部帖子

  • 2224
  • 0
  • 5 分
  • 15.05 元
  • 天津
  • 离线
  • QQ: 23843554 23843554
离线 zyzzmh
头像

  • [学员]
  • [7]
  • 7
  • 2008-03-18
zyzzmh 2008-03-18 20:17 树型| 收藏| 小 中 大 3 #

回复:转:手把手教你如何扩展GridView之自带CheckBox



谢谢啊,有ACCESS的吗?
 

TOP

 

发送短消息

查看公共资料

查找该会员全部帖子

  • 10240
  • 0
  • 0 分
  • 0.85 元
  • 离线
离线 hxlwdd
头像

  • [学员]
  • [17]
  • 17
  • 2008-03-18
hxlwdd 2008-03-20 16:53 树型| 收藏| 小 中 大 4 #

回复:转:手把手教你如何扩展GridView之自带CheckBox



不会这个东西,看不懂
 

TOP

 

发送短消息

查看公共资料

查找该会员全部帖子

  • 10145
  • 0
  • 0 分
  • 1.85 元
  • 离线
离线 haotian
头像

  • [实习生]
  • [53]
  • 53
  • 2008-02-24
haotian 2008-06-10 23:18 树型| 收藏| 小 中 大 5 #

回复:转:手把手教你如何扩展GridView之自带CheckBox



看不懂。。
 

TOP

 

发送短消息

查看公共资料

查找该会员全部帖子

  • 7672
  • 0
  • 0 分
  • 5.45 元
  • 离线
离线 wynet
头像

  • [学员]
  • [11]
  • 12
  • 2008-08-04
wynet 2008-08-12 13:23 树型| 收藏| 小 中 大 6 #

回复:转:手把手教你如何扩展GridView之自带CheckBox



;P
 

TOP

 

发送短消息

查看公共资料

查找该会员全部帖子

  • 26951
  • 0
  • 0 分
  • 1.35 元
  • 离线
离线 lychenhanqing
头像

  • [学员]
  • [4]
  • 4
  • 2008-06-26
lychenhanqing 2008-08-13 14:47 树型| 收藏| 小 中 大 7 #

回复:转:手把手教你如何扩展GridView之自带CheckBox



我也看不懂……
 

TOP

 

发送短消息

查看公共资料

查找该会员全部帖子

  • 23396
  • 0
  • 0 分
  • 0.4 元
  • 离线
离线 vincen
头像

  • [实习生]
  • [17]
  • 17
  • 2008-07-16
vincen 2008-08-13 19:40 树型| 收藏| 小 中 大 8 #

回复:转:手把手教你如何扩展GridView之自带CheckBox



好的,顶!~
我也是写了很多有用的代码,然后保存起来,需要时再找来复制,粘贴就OK了,真爽!不用牢记每一个代码单词,又不会出错!全都记住太累了,效率也低。
 

TOP

 

发送短消息

查看公共资料

查找该会员全部帖子

  • 25185
  • 0
  • 0 分
  • 0.15 元
  • 离线
<<上一主题|下一主题>>
1/1页1 跳转到页
发表新主题 回复该主题

相关主题

求教报表问题
oracle pl/sql
狂龙通讯录管理系统V2.0
狂龙通讯录管理系统V2.0
在母板页(MasterPage)中设置主题(附程序详解)
  • 发新主题

Asp.net源码下载专业站  - 源码推荐 - 最新源码  Sitemap

bbs.51Aspx.com - 简洁版本 - TOP - 界面风格

  • Default

Discuz!NT

Powered by Discuz!NT 2.6.1 © 2000-2010 51Aspx.com.

Processed in 0.34375 second(s) , 6 queries. 京ICP备06046876号

  • 我的资料
  • 我的主题
  • 我的回复
  • 我的精华
  • 我的附件
  • 我的收藏
  • 基本状况
  • 流量统计
  • 客户软件
  • 发帖量记录
  • 版块排行
  • 主题排行
  • 发帖排行
  • 积分排行
  • 在线时间
帖子标题
作  者