因为项目需要,要弄个有这样功能的控件。要有自定意分页和排序的功能。在这个控件里面数据的绑定都是用DataView来实现,DataView放在Session里,如果大家有更灵活的方法可以留言给我。Session的名字我已经做成了属性叫sessionName,可以直接设置,你们喜欢叫什么就自己改吧。以下是完整的代码,由于是刚刚出炉,可能会有考虑不足的地方,希望使用或修改的朋友多提意见一起交流,我分享我快乐:)
下面是可以使用的控件
先下载过的朋友,那个DLL文件有问题,下这个新的,下面的程序代码也改了一个小地方271行
该控件使用方法和DataGrid一样,需要分页时必须设置分页功能为true
LcDataGrid.rar

  1using System;
  2using System.Web.UI;
  3using System.Web.UI.WebControls;
  4using System.ComponentModel;
  5using System.Data;
  6
  7namespace LcWebControls
  8{
  9    /**//// <summary>
 10    /// 卢昶 2005-7-11
 11    /// Email:darkangel@ynmail.com
 12    /// msn:darkangellc@msn.com
 13    /// </summary>
 14    [DefaultProperty("Text"), 
 15        ToolboxData("<{0}:LcDataGrid runat=server></{0}:LcDataGrid>")]
 16    public class LcDataGrid : System.Web.UI.WebControls.DataGrid
 17    {
 18Define#region Define
 19        private string text;
 20        private System.Web.UI.WebControls.Button bt=new Button();
 21        private TextBox tb=new TextBox();
 22        private System.Web.UI.Page pg=new Page();
 23        private string sessionname;
 24        private LinkButton PrevPAGE=new LinkButton();
 25        private LinkButton NextPAGE=new LinkButton();
 26        private DropDownList ddl=new DropDownList();
 27        private Label lbend=new Label();
 28        private Label lbtag=new Label();
 29        private Label lbddls=new Label();
 30        private Label lbddle=new Label();
 31        
 32#endregion
 33displayPortery#region displayPortery
 34
 35        public int Currindex
 36        {
 37            set
 38            {
 39                try
 40                {
 41                     this.CurrentPageIndex=value;
 42                }
 43                catch
 44                {
 45                    
 46                }
 47                
 48            }
 49            get
 50            {
 51              return this.CurrentPageIndex;
 52            }
 53        }
 54#endregion    
 55Property#region Property
 56
 57
 58        [Bindable(true), 
 59            Category("Appearance"), 
 60            DefaultValue("")] 
 61        public string Text 
 62        {
 63            get
 64            {
 65                return text;
 66            }
 67
 68            set
 69            {
 70                text = value;
 71            }
 72        }
 73        [Bindable(true), 
 74        Category("Appearance"), 
 75        DefaultValue(""),
 76        DescriptionAttribute("Session的名称,Session用于数据绑定,必须是DataView类型")
 77        ] 
 78        public string sessionName
 79        {
 80            get
 81            {
 82                return sessionname;
 83            }
 84            set
 85            {
 86                sessionname=value;
 87
 88            }
 89        }
 90        [Bindable(true), 
 91            Category("Appearance"), 
 92            DefaultValue("")] 
 93            public string TT
 94            {
 95                get
 96                {
 97                    try
 98                    {
 99                        
100                        return this.ViewState["sort"].ToString();
101                    }
102                    catch
103                    {
104                         this.ViewState["sort"]="asc";
105                        return this.ViewState["sort"].ToString();
106                    }
107                    
108                }
109                set
110                {
111                    this.ViewState["sort"]=value;
112                }
113
114            }
115        
116    #endregion
117
118        /**//// <summary> 
119        /// 将此控件呈现给指定的输出参数。
120        /// </summary>
121        /// <param name="output"> 要写出到的 HTML 编写器 </param>
122
123protected override void OnItemCreated(DataGridItemEventArgs e)
124        {    
125
126            if(e.Item.ItemType == ListItemType.Pager)
127            {
128                e.Item.Cells[0].Controls.Clear();
129                TextBox tb=new TextBox();
130                creatControl(e.Item.Cells[0]);
131            }
132
133         
134        }
135protected override void OnItemCommand(DataGridCommandEventArgs e)
136        {
137            string strCommandName = e.CommandName;
138            if(e.CommandName == null) 
139                return;
140
141            strCommandName = string.IsInterned(strCommandName);
142            switch(e.CommandName)
143            {
144            
145                case "PrevPAGE":
146                {
147                    PrevPAGE_Click(null,null);
148                    break;
149                }
150                case "NextPAGE":
151                {
152                    NextPAGE_Click(null,null);
153                    break;
154                }
155                
156            }
157            base.OnItemCommand(e);
158        }
159    
160protected override void OnItemDataBound(DataGridItemEventArgs e)
161{
162            
163           if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
164            {
165                e.Item.Attributes.Add("style","cursor:hand");
166                e.Item.Attributes.Add("onmouseover","this.style.backgroundColor='#FFCC00'");
167                e.Item.Attributes.Add("onmouseout","this.style.backgroundColor=''");
168            }
169}
170        protected override void OnSortCommand(DataGridSortCommandEventArgs e)
171        {
172            base.OnSortCommand (e);
173            DataView dv=(DataView)this.Page.Session[sessionName];
174            if (TT.Equals("desc"))
175            {
176                dv.Sort=e.SortExpression+" asc";
177                TT="asc";
178            }
179            else
180            {
181                dv.Sort=e.SortExpression+" desc";
182                TT="desc";
183            }
184            
185            
186            this.DataSource=dv;
187            this.DataBind();
188            this.Page.Session[sessionName]=dv;
189        }
190
191
192    
193
194InitDataGird#region InitDataGird
195
196        protected void creatControl(TableCell tc)
197        {
198
199            creatPageCount(tc);
200            creatCount(tc);
201            creatSPage(tc);
202            creatDDL(tc);
203
204
205        }
206        private void creatCount(TableCell tc)
207        {
208        
209            lbtag.Text="  每页显示记录数";
210            tb.Text=this.PageSize.ToString();
211            tb.Width=20;
212            bt.Text="提交";
213            bt.Click+=new EventHandler(bt_Click);
214            tc.Controls.Add(lbtag);
215            tc.Controls.Add(tb);
216            tc.Controls.Add(bt);
217           // 
218
219        }
220        
221        private void creatPageCount(TableCell tc)
222        {
223            Label lb=new Label();
224            lb.Text="<P align=\"right\"> 共"+this.PageCount+"页    第"+(this.CurrentPageIndex+1)+"页  ";
225            tc.Controls.Add(lb);
226
227        }
228    
229        private void creatSPage(TableCell tc)
230        {
231         PrevPAGE.Text="上一页";
232        NextPAGE.Text="下一页";    
233        PrevPAGE.CommandName="PrevPAGE";
234        NextPAGE.CommandName="NextPAGE";
235        tc.Controls.Add(PrevPAGE);
236        tc.Controls.Add(NextPAGE);
237        }
238        private void creatDDL(TableCell tc)
239        {
240            
241            lbend.Text="页</p>";
242            lbddls.Text="  跳转到第";
243            ddl.AutoPostBack=true;
244            ddl.EnableViewState=true;
245            if (!this.Page.IsPostBack)
246            {
247                ddl.Items.Clear();
248                initDDL();
249            }
250            ddl.SelectedIndexChanged+=new EventHandler(ddl_SelectedIndexChanged);
251            tc.Controls.Add(lbddls);
252            tc.Controls.Add(ddl);
253            tc.Controls.Add(lbend);
254        }
255        private void initDDL()
256        {
257            int count=this.PageCount;
258            
259            for (int i=1;i<=count;i++)
260            {
261                ddl.Items.Add(i.ToString());
262                
263            }
264        }
265        #endregion
266InitEvent#region InitEvent
267        private void bt_Click(object sender, EventArgs e)
268    {
269        this.PageSize=Convert.ToInt32(tb.Text);
270        ddl.Items.Clear();
271        initDDL();
                 this.CurrentPageIndex=0;

272        BindGrid();
273    }
274        private void PrevPAGE_Click(object sender, EventArgs e)
275        {
276            int con=this.CurrentPageIndex;
277            if (this.CurrentPageIndex-1<0)
278            {
279                
280
281            }
282            else
283            {
284                this.CurrentPageIndex=con-1;
285            }
286            ddl.SelectedValue=(this.CurrentPageIndex+1).ToString();
287            BindGrid();
288            
289        }
290        private void NextPAGE_Click(object sender, EventArgs e)
291        {
292            int con=this.CurrentPageIndex;
293            if (this.CurrentPageIndex>=this.PageCount-1)
294            {
295                
296            }
297            else
298            {
299                this.CurrentPageIndex=con+1;
300            }
301            ddl.SelectedValue=(this.CurrentPageIndex+1).ToString();
302            BindGrid();
303            
304        }
305        private void ddl_SelectedIndexChanged(object sender, EventArgs e)
306        {
307            int curri=Convert.ToInt16(ddl.SelectedValue) - 1;
308            this.CurrentPageIndex=curri;
309            BindGrid();
310        }
311
312        #endregion
313GridFunction#region GridFunction
314private void BindGrid()
315{
316    this.DataSource=(DataView)Page.Session[sessionName];
317    this.DataBind();
318
319}
320        #endregion
321
322        
323    }
324}
325

转载于:https://www.cnblogs.com/zgqys1980/archive/2006/08/19/481164.html

(转)一个带自定义分页,排序功能的DATAGRID控件(公开源码)相关推荐

  1. android 带清除功能的输入框控件

    今天,看到一个很好的自定义输入框控件,于是记录一下. 效果很好: 一,自定义一个类,名为ClearEditText package com.example.clearedittext;import a ...

  2. java+tableseg,多种功能集成,带Refresh刷新的tableV,Seg分段控件

    支持 IOS7+  详见Demo TestSegmentAndRefreshTableViewDemo 多种功能集成,带Refresh刷新的tableV,Seg分段控件,加载提示toast ##使用到 ...

  3. [转]自定义DataGrid控件开源

    http://www.cnblogs.com/netlm/archive/2006/10/09/524202.html(最近一段时间正需要使用WIN dataGrid,正好..) 前段时间我写了篇Wi ...

  4. Kotlin 第一弹:自定义 ViewGroup 实现流式标签控件

    古人学问无遗力, 少壮工夫老始成.纸上得来终觉浅, 绝知此事要躬行. – 陆游 <冬夜读书示子聿> 上周 Google I/O 大会的召开,宣布了 Kotlin 语言正式成为了官方开发语言 ...

  5. python 阻止锁屏_想要自己的手机锁屏更加安全吗?python带你打造个性的锁屏控件...

    原标题:想要自己的手机锁屏更加安全吗?python带你打造个性的锁屏控件 Python是一种面向对象.直译式电脑编程语言,也是一种功能强大的通用型语言,已经具有近二十年的发展历史,成熟且稳定.它包含了 ...

  6. 自定义服务器控件(扩展现有 Web 控件)

    很多情况下,你并不需要从头开始创建一个新控件.有些功能也许在 ASP.NET 的 Web 控件的基本集合中已经存在了.所有这些控件都是普通类,你可以组合它们(使用其他类的实例来创建一个新类)或者继承它 ...

  7. 用VB实现带图片的XP风格的按钮控件

    虽然在VB里实现XP风格很简单,但是要使用XP风格同时又让按钮显示图片,则实现起来要麻烦一些,为此,我写了一个控件来实现前述功能,同时让读者可以从中了解XP主题界面的绘制过程. 使用办法很简单,在VB ...

  8. 详解WPF 4 DataGrid控件的基本功能

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow 详解WPF 4 D ...

  9. Android自定义ViewGroup实现朋友圈九宫格控件

    在我们的实际应用中,经常需要用到自定义控件,比如自定义圆形头像,自定义计步器等等,这篇文章主要给大家介绍了关于Android自定义ViewGroup实现朋友圈九宫格控件的相关资料,需要的朋友可以参考下 ...

最新文章

  1. 用一条sql获取分组中最大值时的ID
  2. 32.2. ntpdate
  3. 《陶哲轩实分析》引理17.2.4证明_导数的唯一性
  4. JavaScript编码规范[百度]
  5. oracle数据库sysaux表空间,如何管理oracle数据库的SYSAUX表空间
  6. 网络应用程序设计模式
  7. springmvc 中controller与jsp传值
  8. P1196 ssl1225-银河英雄传说【图论,并查集】
  9. Wince6.0应用开发:一、平台搭建
  10. CI(持续集成)/CD(持续部署)
  11. 3110: [Zjoi2013]K大数查询
  12. uniapp全局传值方式总结
  13. System.Timers.Timer(定时器)
  14. logisim实验三:原码一位乘法器设计实验
  15. TTL RGB信号相关
  16. 【NILM】非入侵式负荷分解模块nilmtk安装教程
  17. 程序员的苦与痛,又有谁懂!改完这个bug就离职,网友:大佬牛逼
  18. 制作“大白菜”启动U盘教程
  19. OSG for Android实现VPB地形,倾斜影像与三维模型加载
  20. python软件工程师认证证书_Python软件工程师

热门文章

  1. 论c++/java/c 与python的语法上的区别
  2. 二叉树的建立和遍历的各种问题
  3. c++学习4 -- 输入输出
  4. 【支付专区】之解析微信支付返回xml
  5. 【陷阱】交换排序中交换动作的陷阱
  6. rpm安装文件制作和使用
  7. QQ目录里哪个文件是记录系统消息的?
  8. SQL Server常用的系统存储过程应用实例
  9. 意大利万岁??摘自网络
  10. spark Intellij IDEA及eclipse开发环境搭建