Web开发框架之分页控件

简介:

一直以来,我的博客几乎一直在介绍Winform相关的技术,其中包括Winform的分页控件,其实Web方面的开发一直也在从事,只是较少写这方面的内容而已,经过多年的积累及提炼,也逐渐形成了我自己特色的一套Web开发框架。最近对Web分页控件进行了优化提炼,本文就从Web分页控件进行介绍,让大家了解这个体系中的一部分,也希望提出宝贵的意见,共同探讨。

分页控件的主要特点有:

1)内置支持Oracle、SqlServer、SQlite、MySql、Access数据库,只需要指定数据库类型即可自动调整。

2)与列表控件(DataGrid)分开,支持更多的界面特性。使得DataGrid控件展现更加丰富。

3)列表支持字段排序(升序、降序),支持样式变化等。

4)分页界面可以设置页面数量为10、20、50、全部等数量级,更加方便数据显示控制。

5)分页控件分页按钮可以设定图片。

6)可以结合我的查询控件,快速实现数据查询分页显示。

7)分页控件支持参数化SQL语句。

下载地址为http://www.patientmis.com/Download/Web分页控件例子Demo.rar

1、Web分页界面效果

无图无真相,首先我们来了解下分页控件的相关显示界面效果。

带有查询条件的效果如下所示,查询模块为了方便和分页控件结合,也是一个控件来的,构造起来很方便,后面再详细介绍。

当然,分页控件很多属性可以设置的,包括分页的按钮图片,由于列表的DataGrid是外部的控件,因此样式更可以自定义,只需要告诉分页控件,列表的控件ID即可,因此你可以根据项目需要,构造自己列表展示效果。下面列出我项目中常用到的两种皮肤界面。

1)浅蓝色冷色调分页效果

2)浅黄色暖色调分页效果

当然,用户可以根据需要,自己使用相应的界面效果样式。

2)分页控件具体使用代码

1)首先在页面上注册控件,如下代码所示

<%@ Register TagPrefix="cc1" Namespace="WHC.WebPager" Assembly="WebPager" %>

2)然后在页面主体内容中添加分页控件即可。其中dg为具体的DataGrid控件,使用的时候和分页控件联合使用。

 <cc1:Pager ID="Pager1" runat="server" Height="30" BindControlID="dg" ImageBasePath="../Images"
                        FirstImagePath="btn_sy.gif" NextImagePath="btn_xyy.gif" PreviousImagePath="btn_syy.gif"
                        LastImagePath="btn_wy.gif" GoImagePath="btn_go.gif" ExportImagePath="btn_export.gif">
                    </cc1:Pager>

3)DataGrid控件的参考代码。

                    <asp:DataGrid ID="dg" runat="server" Width="100%" CssClass="dg" AutoGenerateColumns="False" PageSize="20"
                        AllowSorting="True" DataKeyField="ID" Height="0px" CellPadding="4" ForeColor="#333333"
                        GridLines="None" OnItemCreated="dg_ItemCreated" OnSortCommand="dg_SortCommand"
                        OnItemDataBound="dg_ItemDataBound">
                        <EditItemStyle CssClass="EditItem"></EditItemStyle>
                        <AlternatingItemStyle CssClass="AlternatingItem"></AlternatingItemStyle>
                        <ItemStyle CssClass="Item"></ItemStyle>
                        <HeaderStyle CssClass="Header"></HeaderStyle>
                        <FooterStyle CssClass="Footer"></FooterStyle>
                        <Columns>
                            <asp:TemplateColumn HeaderImageUrl="Images/delete.GIF">
                                <HeaderStyle Wrap="False" Width="60px"></HeaderStyle>
                                <ItemTemplate>
                                    <asp:CheckBox runat="server" ID="cbxDelete"></asp:CheckBox>
                                </ItemTemplate>
                            </asp:TemplateColumn>
                            <asp:BoundColumn DataField="ID" HeaderText="ID" SortExpression="ID"></asp:BoundColumn>
                            <asp:BoundColumn DataField="Name" HeaderText="名称" SortExpression="Name"></asp:BoundColumn>
                            <asp:BoundColumn DataField="City" HeaderText="城市" SortExpression="City"></asp:BoundColumn>
                            <asp:BoundColumn DataField="Age" HeaderText="年龄" SortExpression="Age"></asp:BoundColumn>
                            <asp:BoundColumn DataField="Birthday" HeaderText="出生日期" SortExpression="Birthday">
                            </asp:BoundColumn>
                            <asp:BoundColumn DataField="Man" HeaderText="男性"></asp:BoundColumn>
                            <asp:TemplateColumn HeaderImageUrl="Images/edititem.gif">
                                <HeaderStyle Wrap="False" Width="60px"></HeaderStyle>
                                <ItemTemplate>
                                    <asp:HyperLink ID="lnkView" runat="server" Text="查看" NavigateUrl='<%# "Modify.aspx?type=view&id=" + Eval("ID") %>'>查看</asp:HyperLink>
                                </ItemTemplate>
                            </asp:TemplateColumn>
                            <asp:TemplateColumn HeaderImageUrl="Images/edititem.gif">
                                <HeaderStyle Wrap="False" Width="60px"></HeaderStyle>
                                <ItemTemplate>
                                    <asp:HyperLink ID="lnkEdit" runat="server" Text="编辑" NavigateUrl='<%# "Modify.aspx?type=edit&id=" + Eval("ID") %>'>编辑</asp:HyperLink>
                                </ItemTemplate>
                            </asp:TemplateColumn>
                        </Columns>
                        <SelectedItemStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
                        <PagerStyle HorizontalAlign="Left" ForeColor="#003399" BackColor="#99CCCC" Mode="NumericPages">
                        </PagerStyle>
                    </asp:DataGrid>

页面的后台代码如下所示,主要就是设置分页控件的查询语句以及排序等属性,如下所示。

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                BindData();
            }
        }

        private void BindData()
        {
            try
            {
                this.Pager1.SortFieldNames = this.SortFieldNames;
                this.Pager1.SortFieldAscend = this.SortFieldAscend;
                this.Pager1.SQL = "SELECT * FROM test Order By ID";
            }
            catch (Exception ex)
            {
                Response.Write(string.Format("<script>alert('{0}');</script>", ex.Message));
            }
        }

以上就是没有带查询条件的分页控件,当然我们可以自己添加一些条件控件来实现查询过滤数据的功能。

3、查询控件和分页控件的结合

前面介绍过,为了快速方便实现列表的查询分页,结合分页控件使用,还有一个叫做查询控件的东西,这个效果就是前面介绍的那样,只不过是制定数据库字段信息就可以了,不用像传统那样,自己部署各种条件控件在界面上,效果其实一样,如下所示。

 我们来看这个界面的实现代码。首先在界面上放置两个控件的声明代码。

<%@ Register TagPrefix="cc1" Namespace="WHC.SearchControl" Assembly="SearchControl" %>
<%@ Register TagPrefix="cc2" Namespace="WHC.WebPager" Assembly="WebPager" %>

然后看页面的前台代码如下所示。

    <form id="Form1" method="post" runat="server">
    <div style="border: 1px solid #A8CFEB; background-color: #F1F6FF">
        <cc1:SearchControl ID="SearchControl1" runat="server" Width="100%" InSQL="SELECT * FROM Test"
            SortFieldNames="ID" RowControls="3" SearchButtonImage="../Images/btn_search.gif"
            ResetButtonImage="../Images/btn_reset.gif" CssClass="content"></cc1:SearchControl>
    </div>
    <div>
        <br />
        <asp:DataGrid ID="dg" runat="server" Width="100%" CssClass="dg" AutoGenerateColumns="False"
            BorderColor="#3366CC" BorderStyle="None" BorderWidth="1px" BackColor="White"
            CellPadding="4" AllowSorting="True" OnItemCreated="dg_ItemCreated" OnSortCommand="dg_SortCommand"
            OnItemDataBound="dg_ItemDataBound">
            <EditItemStyle CssClass="EditItem"></EditItemStyle>
            <AlternatingItemStyle CssClass="AlternatingItem"></AlternatingItemStyle>
            <ItemStyle CssClass="Item"></ItemStyle>
            <HeaderStyle CssClass="Header"></HeaderStyle>
            <FooterStyle CssClass="Footer"></FooterStyle>
            <Columns>
                <asp:BoundColumn DataField="ID" HeaderText="ID" SortExpression="ID">
                    <HeaderStyle Width="60px" />
                </asp:BoundColumn>
                <asp:BoundColumn DataField="Name" HeaderText="名称" SortExpression="Name"></asp:BoundColumn>
                <asp:BoundColumn DataField="City" HeaderText="城市" SortExpression="City"></asp:BoundColumn>
                <asp:BoundColumn DataField="Age" HeaderText="年龄" SortExpression="Age"></asp:BoundColumn>
                <asp:BoundColumn DataField="Birthday" HeaderText="出生日期" SortExpression="Birthday">
                </asp:BoundColumn>
                <asp:BoundColumn DataField="Man" HeaderText="男性"></asp:BoundColumn>
                <asp:TemplateColumn HeaderImageUrl="Images/edititem.gif">
                    <HeaderStyle Wrap="False" Width="60px"></HeaderStyle>
                    <ItemTemplate>
                        <asp:HyperLink ID="lnkView" runat="server" Text="查看" NavigateUrl='<%# "Modify.aspx?type=view&id=" + Eval("ID") %>'>查看</asp:HyperLink>
                    </ItemTemplate>
                </asp:TemplateColumn>
                <asp:TemplateColumn HeaderImageUrl="Images/edititem.gif">
                    <HeaderStyle Wrap="False" Width="60px"></HeaderStyle>
                    <ItemTemplate>
                        <asp:HyperLink ID="lnkEdit" runat="server" Text="编辑" NavigateUrl='<%# "Modify.aspx?type=edit&id=" + Eval("ID") %>'>编辑</asp:HyperLink>
                    </ItemTemplate>
                </asp:TemplateColumn>
            </Columns>
        </asp:DataGrid>
    </div>
    <br />
    <div>
        <cc2:Pager ID="Pager1" runat="server" Height="30" BindControlID="dg" ImageBasePath="../Images"
            FirstImagePath="btn_sy.gif" NextImagePath="btn_xyy.gif" PreviousImagePath="btn_syy.gif"
            LastImagePath="btn_wy.gif" GoImagePath="btn_go.gif" ExportImagePath="btn_export.gif">
        </cc2:Pager>
    </div>
    </form>

后台主要代码如下所示。

        private void Page_Load(object sender, EventArgs e)
        {            
            this.SearchControl1.OutSQLValueChanged += new OutSQLChangedHandle(SearchControl1_OutSQLValueChanged);
            this.SearchControl1.OnAddNew += new AddNewHandler(SearchControl1_OnAddNew);
            this.SearchControl1.OnDelete += new DeleteHandler(SearchControl1_OnDelete);

            WebControl appendButton = CreateImageButton("btnAppended", "统计", "Images/btn_Statistics.gif");
            this.SearchControl1.AppendedButtons = new WebControl[] { appendButton };

            if (!Page.IsPostBack)
            {
                FieldInfo nameInfo = new FieldInfo("Name", "姓名", FieldType.String);

                FieldInfo cityInfo = new FieldInfo("City", "城市", FieldType.String);
                cityInfo.Width = 100;
                cityInfo.Items = new ListItem[] { new ListItem("北京市", "北京"), new ListItem("广州"), new ListItem("成都") };
                cityInfo.TargetFieldName = "Area";
                cityInfo.UseInItems = false;//所有的时候,不限定内容,默认限定为列表内容
                cityInfo.OnFillItem += new AddItemHandler(this.OnFillItem);

                FieldInfo areaInfo = new FieldInfo("Area", "地区", FieldType.String);
                areaInfo.Items = new ListItem[0];

                FieldInfo manInfo = new FieldInfo("Man", "是否男性", FieldType.Boolean);
                manInfo.UseInItems = false;

                FieldInfo birthInfo = new FieldInfo("Birthday", "出生日期", FieldType.DateTime);
                FieldInfo ageInfo = new FieldInfo("Age", "年龄", FieldType.Numeric);

                this.SearchControl1.SearchFields = new FieldInfo[] { nameInfo, cityInfo, areaInfo, manInfo, birthInfo, ageInfo };
                
                BindData();
            }
        }
        
        private void BindData()
        {
            this.Pager1.SortFieldNames = this.SearchControl1.SortFieldNames;
            this.Pager1.SortFieldAscend = this.SearchControl1.SortFieldAscend;
            this.Pager1.PagerParameters = this.SearchControl1.PagerParameters;
            this.Pager1.SQL = this.SearchControl1.OutSQL;
        }

        private void SearchControl1_OutSQLValueChanged(object sender, OutSQLChangedEventArgs e)
        {
            //测试输出
            this.Response.Write(SearchControl1.OutSQL);

            BindData();
            this.Pager1.CurrentPage = 1;
        }

当然实现列表的联动还有一个OFillItem的函数,代码如下所示。

        private void OnFillItem(DropDownList ddListControl, string selItemValue)
        {
            ddListControl.Items.Clear();

            if (selItemValue.Trim().Length > 0)
            {
                string sql = string.Format("select Area from CityArea where City ='{0}' ", selItemValue);
                Database database = DatabaseFactory.CreateDatabase();
                DbCommand command = database.GetSqlStringCommand(sql);
                using (IDataReader reader = database.ExecuteReader(command))
                {
                    while (reader.Read())
                    {
                        ddListControl.Items.Add(new ListItem(reader["Area"].ToString()));
                    }
                }
            }

            ddListControl.Items.Insert(0, new ListItem("--所有--", string.Empty));
}

 本文转自博客园伍华聪的博客,原文链接:Web开发框架之分页控件,如需转载请自行联系原博主。



目录
相关文章
|
4月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
459 4
|
8月前
|
缓存 JavaScript 前端开发
鸿蒙5开发宝藏案例分享---Web开发优化案例分享
本文深入解读鸿蒙官方文档中的 `ArkWeb` 性能优化技巧,从预启动进程到预渲染,涵盖预下载、预连接、预取POST等八大优化策略。通过代码示例详解如何提升Web页面加载速度,助你打造流畅的HarmonyOS应用体验。内容实用,按需选用,让H5页面快到飞起!
|
8月前
|
JavaScript 前端开发 API
鸿蒙5开发宝藏案例分享---Web加载时延优化解析
本文深入解析了鸿蒙开发中Web加载完成时延的优化技巧,结合官方案例与实际代码,助你提升性能。核心内容包括:使用DevEco Profiler和DevTools定位瓶颈、四大优化方向(资源合并、接口预取、图片懒加载、任务拆解)及高频手段总结。同时提供性能优化黄金准则,如首屏资源控制在300KB内、关键接口响应≤200ms等,帮助开发者实现丝般流畅体验。
|
前端开发 JavaScript Shell
鸿蒙5开发宝藏案例分享---Web页面内点击响应时延分析
本文为鸿蒙开发者整理了Web性能优化的实战案例解析,结合官方文档深度扩展。内容涵盖点击响应时延核心指标(≤100ms)、性能分析工具链(如DevTools时间线、ArkUI Trace抓取)以及高频优化场景,包括递归函数优化、网络请求阻塞解决方案和setTimeout滥用问题等。同时提供进阶技巧,如首帧加速、透明动画陷阱规避及Web组件初始化加速,并通过优化前后Trace对比展示成果。最后总结了快速定位问题的方法与开发建议,助力开发者提升Web应用性能。
|
4月前
|
开发框架 前端开发 Go
【GoGin】(0)基于Go的WEB开发框架,GO Gin是什么?怎么启动?本文给你答案
Gin:Go语言编写的Web框架,以更好的性能实现类似Martini框架的APInet/http、Beego:开源的高性能Go语言Web框架、Iris:最快的Go语言Web框架,完备的MVC支持。
485 1
|
8月前
|
JSON 开发框架 自然语言处理
【HarmonyOS Next之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(三)
本文主要介绍了应用开发中的三大核心内容:生命周期管理、资源限定与访问以及多语言支持。在生命周期部分,详细说明了应用和页面的生命周期函数及其触发时机,帮助开发者更好地掌控应用状态变化。资源限定与访问章节,则聚焦于资源限定词的定义、命名规则及匹配逻辑,并阐述了如何通过 `$r` 引用 JS 模块内的资源。最后,多语言支持部分讲解了如何通过 JSON 文件定义多语言资源,使用 `$t` 和 `$tc` 方法实现简单格式化与单复数格式化,为全球化应用提供便利。
321 104
|
8月前
|
JavaScript 前端开发 API
【HarmonyOS Next之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(二)
本文介绍了HarmonyOS应用开发中的HML、CSS和JS语法。HML作为标记语言,支持数据绑定、事件处理、列表渲染等功能;CSS用于样式定义,涵盖尺寸单位、样式导入、选择器及伪类等特性;JS实现业务逻辑,包括ES6语法支持、对象属性、数据方法及事件处理。通过具体代码示例,详细解析了页面构建与交互的实现方式,为开发者提供全面的技术指导。
327 104
|
8月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:路由、中间件、参数校验
Gin框架以其极简风格、强大路由管理、灵活中间件机制及参数绑定校验系统著称。本文详解其核心功能:1) 路由管理,支持分组与路径参数;2) 中间件机制,实现全局与局部控制;3) 参数绑定,涵盖多种来源;4) 结构体绑定与字段校验,确保数据合法性;5) 自定义校验器扩展功能;6) 统一错误处理提升用户体验。Gin以清晰模块化、流程可控及自动化校验等优势,成为开发者的优选工具。
|
8月前
|
开发框架 安全 前端开发
Go Web开发框架实践:模板渲染与静态资源服务
Gin 是一个功能强大的 Go Web 框架,不仅适用于构建 API 服务,还支持 HTML 模板渲染和静态资源托管。它可以帮助开发者快速搭建中小型网站,并提供灵活的模板语法、自定义函数、静态文件映射等功能,同时兼容 Go 的 html/template 引擎,具备高效且安全的页面渲染能力。
|
8月前
|
开发框架 JSON 中间件
Go语言Web开发框架实践:使用 Gin 快速构建 Web 服务
Gin 是一个高效、轻量级的 Go 语言 Web 框架,支持中间件机制,非常适合开发 RESTful API。本文从安装到进阶技巧全面解析 Gin 的使用:快速入门示例(Hello Gin)、定义 RESTful 用户服务(增删改查接口实现),以及推荐实践如参数校验、中间件和路由分组等。通过对比标准库 `net/http`,Gin 提供更简洁灵活的开发体验。此外,还推荐了 GORM、Viper、Zap 等配合使用的工具库,助力高效开发。