UI组件:ext、JqueryEasyUI、miniui、dhtmlx及自定义页面

 这篇博文主要是分析下当前经常使用到的UI组件,他们的效果和功能一般都可以满足我们平常项目使用,但对于较复杂些的项目建议你要斟酌下再决定是否使用?如何去用?尤其是字段和数据源都是后台动态生成那么考验性更大……

需求:列表页展现数据,其中列头(一般在50个以上)和数据源都是后台动态生成,每页展示10条数据、排序、列拖动等功能

 

要求效果:

 

方法一:后台拼凑

Json格式生成Table

页面加载速度:

使用结果来看:

  优点:速度、体验性综合排名第二

  缺点:列拖动用了第三方jquery插件但是效果上不是很好,另外虽然是ajax无刷新页面加载数据但是在排序、分页时数据表格需要重新绘制所以会有点给人抖动的感觉

 

方法二:JqueryEasyUI

部分主要源码:

View Code
    <script type="text/javascript">
      
        $(function() {
            $('#myGrid').datagrid({
                    
                //title:'应用系统列表',  
                loadMsg: "正在加载,请稍等...",
                striped: true,
                showFooter:true,
                //collapsible:true,//展开
                //sortName:排序字段,
                //sortOrder:排序方式:asc|desc
                //queryWord:查询关键字
                //queryType:查询字段。
                url: '/Ajax/Normal.ashx?action=normalEasyUI&mouldId=<%=mouldId %>',
                //sortName: 'CustID',//排序字段
                sortOrder: 'desc',
                sortable:true,
                remoteSort: false, 
                //idField:'productid',
                pagination:true,
                rownumbers:true, 
                onSortColumn:function(sort,order){ FieldSort(sort,order);},//调用排序方法。},
                frozenColumns: [
                    [
                        { field: 'ck', width:fillsize(0.02), checkbox: true },
                        { field: 'sc',width:fillsize(0.02), title: '收藏', formatter: function() {
                            return "<a href=\"\">收藏</a>";
                        }
                        },
                    { field: 'xq', width:fillsize(0.04), title: '查看详情', formatter: function() {
                        return "<a href=\"\">查看详情</a>";
                    } }]]
             
                });
            //设置分页控件
            var p = $('#myGrid').datagrid('getPager');
            $(p).pagination({
                    pageSize: 10, //每页显示的记录条数,默认为10           
                    pageList: [10, 20, 30], //可以设置每页记录条数的列表           
                    beforePageText: '第', //页数文本框前显示的汉字           
                    afterPageText: '页    共 {pages} 页',
                    displayMsg: '当前显示 {from} - {to} 条记录   共 {total} 条记录' ,
                    onBeforeRefresh:function(){ 
                        $(this).pagination('loading'); 
                        alert('before refresh'); 
                        $(this).pagination('loaded'); 
                    } 
            });
            
            
        });
        /*排序*/
        function FieldSort(sortName,sortOrder){   
            var queryParams = $('#myGrid').datagrid('options').queryParams;  
            queryParams.sortName = sortName;  
            queryParams.sortOrder = sortOrder;   
            $("#myGrid").datagrid('reload');   
        }  
        
        $(function(){ 
            $(".select").find("li:not(.choosen)").click(function(){  
                var value = $(this).attr("value") ; 
                var id= getSingleSelectRow("myGrid","FID")
                if(id==""&&value<3){
                    $.messager.alert('提示消息', "请选择一行数据操作!", 'info');
                    return ;
                }
                if(id==""&&value==3){
                    $.messager.alert('提示消息', "请选择需要删除的数据!", 'info');
                    return ;
                }
                var mouldId=$("#ctl00_FumaHead_hidMouldID").val();
                switch(value){
                    case 0:
                        //新建:
                        window.open("/PageStructure/Detail/Detail.aspx?mouldId="+mouldId+"&detailId=&opt="+value);
                        break;
                    case 1: 
                        //修改:
                        window.open("/PageStructure/Detail/Detail.aspx?mouldId="+mouldId+"&detailId="+id+"&opt="+value);
                        break;
                    case 2: 
                        //打开: 
                        window.open("/PageStructure/Detail/Detail.aspx?mouldId="+mouldId+"&detailId="+id+"&opt="+value); 
                        break;
                    case 3: 
                        var  quesition=window.confirm("删除不可恢复!确定要删除吗?");   
                        //$.messager.alert('提示消息', '请选择你要删除的记录!', 'info');
                        //$.messager.confirm('确认', confirmMessage, function (r) {if (r) {}else{}}
                        /*
                        var deleteId="";
                        for(i=0;i<chkList.length;i++){
                            deleteId += "'"+chkList[i].id + "' , ";
                        } 
                        var  quesition=window.confirm("删除不可恢复!确定要删除吗?");   
                        if(quesition==true){ 
                            $.ajax({
                                type:"get",
                                contentType:"application/json;charset:utf-8",
                                url:"/Ajax/AjaxMethod.ashx?action=operateDelete&mouldId="+mouldId+"&id="+deleteId,
                                success:function(msg){
                                    if(msg=="success"){
                                         $("#lblList").grid({mouldId:mouldId, url:"/Ajax/AjaxMethod.ashx"});
                                    }
                                    else if(msg=="failed"){
                                        alert("删除失败!");
                                    }
                                    else{ 
                                    }
                                }
                            });
                            return  true;
                        }
                        else{
                            //alert("no");
                        }  
                        //删除
                        break;
                        */
                } 
            }); 
        });
        /**
        *自适应表格的宽度处理(适用于Jquery Easy Ui中的dataGrid的列宽),
        *注:可以实现列表的各列宽度跟着浏览宽度的变化而变化,即采用该方法来设置DataGrid
        *的列宽可以在不同分辨率的浏览器下自动伸缩从而满足不同分辨率浏览器的要求
        *使用方法:(如:{field:'ymName',title:'编号',width:fillsize(0.08),align:'center'},)
        *
        *@parampercent当前列的列宽所占整个窗口宽度的百分比(以小数形式出现,如0.3代表30%)
        *
        *@return通过当前窗口和对应的百分比计算出来的具体宽度
        */
        function fillsize(percent) {
            var bodyWidth = document.body.clientWidth;
            return (bodyWidth - 90) * percent;
        }

        /**
        * 获取所选记录行(单选)
        *
        * @paramdataTableId目标记录所在的DataGrid列表的table的id
        * @paramerrorMessage 如果没有选择一行(即没有选择或选择了多行)的提示信息
        *
        * @return 所选记录行对象,如果返回值为null,或者"null"(有时浏览器将null转换成了字符串"null")说明没有
        *选择一行记录。
        */
        function getSingleSelectRow(dataTableId, fieldValue) {
            var rows = $("#" + dataTableId).datagrid('getSelections');
            var num = rows.length;
            if (num == 1) {
                return rows[0][fieldValue];
            }
            else if(num>1){
                return rows;
            } 
            else { 
                return "";
            }
        }
    </script>

后台数据同上拼凑Json格式数据

Json格式注意 context.Response.Write("{\"total\":" + total + ",\"rows\":" + Common.Class.JsonHelper.DataTable2Json(SourceTable) + "}");

页面加载速度:

使用结果来看:

  优点:界面要求的效果达标,数据量少的可以使用,数据量大建议考虑下。

  缺点:加载速递慢 排名末尾

方法三:MiniUI

部分主要源码:<%=sb.ToString() %> 一次性加载列头

 

View Code
 <%--miniui--%>
    <link href="miniui/miniui/themes/default/miniui.css" rel="stylesheet" type="text/css" />
    <link href="miniui/miniui/themes/icons.css" rel="stylesheet" type="text/css" />

    <script src="miniui/miniui/miniui.js" type="text/javascript"></script>

    <%--end--%>    

    <div id="datagrid1" class="mini-datagrid" style="width: 98%;margin:auto auto; height: auto; overflow:hidden;" url='/Ajax/Normal.ashx?action=normalMiniUI&mouldId=<%=mouldId %>'
            idfield="id" allowresize="true" sizelist="[10,20,30]" pagesize="10" multiselect="true"
            allowalternating="true" showemptytext="true" allowmovecolumn="false" emptytext="抱歉,没有找到符合您搜索条件的数据"
            showsummaryrow="true" οnlοad="onGridLoad">
            <%=sb.ToString() %>
        </div>

 

Json格式注意 context.Response.Write("{\"total\":" + total + sbSummay + " ,\"data\":" + Common.Class.JsonHelper.DataTable2Json(SourceTable) + "}");

页面加载速度:

 

 

使用结果来看:

  优点: 在功能、编码上和JqueryEasyUI大同小异,但加载速递比easyui快

  缺点:加载速递要是更好些会更好 综合排名第三

 

 

方法四:DHTMLX

部分主要源码:

 

View Code
复制代码
        var pageIndex=1;
        var pageSize=10;
        $(function(){  
            List(pageIndex,pageSize);
        }); 
        
        
        function List(pageIndex,pageSize){ 
            if($(".pagebar").size()>0){
                $(".pagebar").remove();
            }
             $.ajax({
                    type:"get",
                    contentType:"application/json;charset=utf-8",
                    data:{mouldId:$("#ctl00_FumaHead_hidMouldID").val(),action:"normalDHTMLX",pageIndex:pageIndex,pageSize:pageSize},
                    cache:false,
                    url:"/Ajax/Normal.ashx",
                    success: function(result) { 
                        if(result.length<=0)return; 
                        var json = eval("("+result+")");
                        $("#lblList").html(json.data); 
                        dhtmlx.skin = "dhx_skyblue"; 
                        new dhtmlXGridFromTable('gvList');  
                    }
             }); 
        }
复制代码

 

Dhtmlx Grid数据源可以是:XML、Json、Table等

页面加载速度:

 

 

使用结果来看:

  优点: 没得说 加载速度、体验性等等目前排名第一

  缺点:资料太少、大多数资料是英文

方法五:Ext.NET

部分主要源码:

 

View Code
 <ext:Viewport ID="vpNormal" runat="server" Layout="FitLayout">
        <Items>
            <ext:Panel ID="pnNormal" runat="server" Border="false">
                <TopBar>
                    <ext:Toolbar ID="Toolbar1" runat="server">
                        <Items>
                            <ext:Button ID="btnTopAdd" runat="server" Text="新建" Icon="Add" />
                            <ext:Button ID="btnTopOpen" runat="server" Text="打开" Icon="FolderUp" />
                            <ext:Button ID="btnTopEdit" runat="server" Text="编辑" Icon="FolderEdit" />
                            <ext:Button ID="btnTopDelete" runat="server" Text="删除" Icon="Delete" />
                            <ext:ToolbarSeparator />
                            <ext:SplitButton runat="server" Text="打印" Icon="Printer">
                                <Menu>
                                    <ext:Menu ID="Menu0" runat="server">
                                        <Items>
                                            <ext:MenuItem ID="btnTopPrintTemp" runat="server" Icon="PrinterColor" Text="设置打印模板" />
                                            <ext:MenuItem ID="btnTopPrinList" runat="server" Icon="PrinterMono" Text="报表列表" />
                                            <ext:MenuItem ID="btnTopPrinPerson" runat="server" Icon="PrinterEmpty" Text="个人分组" />
                                        </Items>
                                    </ext:Menu>
                                </Menu>
                            </ext:SplitButton>
                            <ext:ToolbarSeparator />
                            <ext:SplitButton runat="server" Text="关联" Icon="Link">
                                <Menu>
                                    <ext:Menu ID="Menu1" runat="server">
                                        <Items>
                                            <ext:MenuItem ID="btnLink" runat="server" Icon="LinkAdd" Text="关联" />
                                        </Items>
                                    </ext:Menu>
                                </Menu>
                            </ext:SplitButton>
                            <ext:ToolbarSeparator />
                            <ext:SplitButton runat="server" Text="导出Excel" Icon="PageWhiteExcel">
                                <Menu>
                                    <ext:Menu runat="server" ID="Menu2">
                                        <Items>
                                            <ext:MenuItem ID="btnExcel" runat="server" Icon="PageWhiteExcel" Text="按选择列导出" />
                                        </Items>
                                    </ext:Menu>
                                </Menu>
                            </ext:SplitButton>
                            <ext:SplitButton runat="server" Text="历史" Icon="Pencil">
                                <Menu>
                                    <ext:Menu runat="server" ID="Menu3">
                                        <Items>
                                            <ext:MenuItem ID="btnHistory" runat="server" Icon="PencilGo" Text="修改历史" />
                                        </Items>
                                    </ext:Menu>
                                </Menu>
                            </ext:SplitButton>
                            <ext:SplitButton runat="server" Text="自定义" Icon="Wrench">
                                <Menu>
                                    <ext:Menu runat="server" ID="Menu4">
                                        <Items>
                                            <ext:MenuItem ID="btnWrench" runat="server" Icon="WrenchOrange" Text="模块设置" />
                                        </Items>
                                    </ext:Menu>
                                </Menu>
                            </ext:SplitButton>
                            <ext:ToolbarSeparator />
                            <ext:Button ID="btnTopHelp" runat="server" Text="帮助" Icon="Help" />
                            <ext:Button ID="btnTopClose" runat="server" Text="关闭" Icon="Stop" />
                        </Items>
                    </ext:Toolbar>
                </TopBar>
                <Items>
                    <ext:BorderLayout ID="blNormal" runat="server">
                        <%-- 搜索--%>
                        <West MinWidth="10" MaxWidth="500" Split="true" CollapseMode="Mini">
                            <ext:TabPanel runat="server" Width="280" Frame="true" ID="tpnlSelect">
                                <Items>
                                    <ext:Panel runat="server" AutoScroll="true" Title="查询" Padding="6" ID="pnlSelect">
                                        <Items>
                                            <ext:Label runat="server" Html="<font   style='font-weight:bolder;font-size:13px' >按下面任何标准进行搜索</font>" />
                                            <ext:Panel runat="server" Border="false" Padding="6">
                                                <Items>
                                                    <ext:FormPanel Border="false" runat="server" LabelWidth="70" ID="pnlSearch">
                                                        <Items>
                                                            <ext:CompositeField AnchorHorizontal="100%" runat="server" LabelAlign="Top" FieldLabel="关键字">
                                                                <Items>
                                                                    <ext:TextField ID="txtKeyWord" EmptyText="关键字" LabelAlign="Top" runat="server" Width="140" />
                                                                </Items>
                                                            </ext:CompositeField>
                                                            <ext:CompositeField runat="server" FieldLabel="在这儿查找">
                                                                <Items>
                                                                    <ext:MultiCombo runat="server" Width="140" ID="mcbSelect" EmptyText="请选择寻找范围" SelectionMode="Checkbox">
                                                                    </ext:MultiCombo>
                                                                </Items>
                                                            </ext:CompositeField>
                                                            <ext:CompositeField runat="server" FieldLabel="精确查找">
                                                                <Items>
                                                                    <ext:Checkbox ID="chkExactMatch" runat="server" FieldLabel="精确查找">
                                                                    </ext:Checkbox>
                                                                </Items>
                                                            </ext:CompositeField>
                                                        </Items>
                                                    </ext:FormPanel>
                                                </Items>
                                            </ext:Panel>
                                            <ext:Panel ID="pnlHighSearch" runat="server" Title="更多高级选项" FormGroup="true" Visible="false" />
                                        </Items>
                                        <Buttons>
                                            <ext:Button ID="btmReset" Type="Reset" runat="server" Text="清  空">
                                                <DirectEvents>
                                                    <Click OnEvent="btmReset_Click" />
                                                </DirectEvents>
                                            </ext:Button>
                                            <ext:Button ID="btnSearch" runat="server" Text="搜  索">
                                                <DirectEvents>
                                                    <Click OnEvent="BtnSearch_Click" />
                                                </DirectEvents>
                                            </ext:Button>
                                        </Buttons>
                                    </ext:Panel>
                                </Items>
                            </ext:TabPanel>
                        </West>
                        <%--主页--%>
                        <Center>
                            <ext:TabPanel ID="TabPanel2" runat="server" Frame="true">
                                <Items>
                                    <%--列表显示--%>
                                    <ext:Panel ID="Panel8" runat="server" Title="列表显示">
                                        <Items>
                                            <ext:BorderLayout ID="BorderLayout2" runat="server">
                                                <Center>
                                                    <ext:Panel ID="Panel9" runat="server" Layout="FitLayout" Frame="true">
                                                        <Items>
                                                            <ext:GridPanel runat="server" ID="gpMain" StoreID="stMain" StripeRows="true" TrackMouseOver="true">
                                                                <ColumnModel ID="ColumnModel1" runat="server">
                                                                    <Columns>
                                                                        <ext:RowNumbererColumn Locked="true" />
                                                                    </Columns>
                                                                </ColumnModel>
                                                                <View>
                                                                    <ext:LockingGridView />
                                                                </View>
                                                                <BottomBar>
                                                                    <ext:PagingToolbar ID="PgbListMain" runat="server" PageSize="50" StoreID="stMain">
                                                                        <Items>
                                                                            <ext:Label ID="lblSearchTime" runat="server">
                                                                            </ext:Label>
                                                                        </Items>
                                                                    </ext:PagingToolbar>
                                                                </BottomBar>
                                                                <LoadMask ShowMask="true" />
                                                            </ext:GridPanel>
                                                        </Items>
                                                    </ext:Panel>
                                                </Center>
                                                <South Split="true" CollapseMode="Mini">
                                                    <ext:TabPanel ID="pnlSouth" runat="server" Height="230" Visible="false" Frame="true">
                                                        <Items>
                                                        </Items>
                                                    </ext:TabPanel>
                                                </South>
                                            </ext:BorderLayout>
                                        </Items>
                                    </ext:Panel>
                                </Items>
                            </ext:TabPanel>
                        </Center>
                    </ext:BorderLayout>
                </Items>
            </ext:Panel>
        </Items>
    </ext:Viewport>

 

页面加载速度:

 

 

使用结果来看:

  优点:个人看法:和asp.net一样

  缺点:速度上要再提高,生成页面带了大量html  当然如果你的数据量不大可以考虑ext.net

 

 

 

通过上面的比较不难发现DHTMLX胜出其次是自己动态拼凑的页面,miniui、ext不分伯仲,当然了具体问题还要具体分析。

 

 

 部分demo

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
.net EXT学习资料与源码 ext是一个强大的js类库,以前是基于YAHOO-UI,现在已经完全独立了,   主要包括data,widget,form,grid,dd,menu,其中最强大的应该算grid了,编程思想是基于面对对象编程(oop),扩展性相当的好.可以自己写扩展.自己定义命名空间.web应用可能感觉太大.不过您可以根据需要按需加载您想要的类库就可以了.   主要包括三个大的文件ext-all.css,ext-base.js,ext-all.js(包括所有的类库,您可以根据需要进行删减.官方网站提供这一接口),在引用ext类库的时候.这三个文件必不可少.   它提供了丰富的,非常漂亮的外观体验,成为众多界面层开发人员的追捧!其核心的组件基本覆盖了我们构建富客户端的常用的组件。   从 Ext 2开始,商业版(针对那些以盈利为目的的开发方)要收费了。这可能会影响一些他的应用前景。   目前的最新版本为3.0RC,该版本是在2009年4月15日发布的。 三层架构,   三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。   1、表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。   2、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。   3、数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等。 [编辑本段]概述   在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或成为领域层)、表示层。   三层结构原理:   3个层次中,系统主要功能和业务逻辑都在业务逻辑层进行处理。   所谓三层体系结构,是在客户端与数据库之间加入了一个“中间层”,也叫组件层。这里所说的三层体系,不是指物理上的三层,不是简单地放置三台机器就是三层体系结构,也不仅仅有B/S应用才是三层体系结构,三层是指逻辑上的三层,即使这三个层放置到一台机器上。   三层体系的应用程序将业务规则、数据访问、合法性校验等工作放到了中间层进行处理。通常情况下,客户端不直接与数据库进行交互,而是通过COM/DCOM通讯与中间层建立连接,再经由中间层与数据库进行交互。   表示层    位于最外层(最上层),离用户最近。用于显示数据和接收用户输入的数据,为用户提供一种交互式操作的界面。   业务逻辑层    业务逻辑层(Business Logic Layer)无疑是系统架构中体现核心价值的部分。它的关注点主要集中在业务规则的制定、业务流程的实现等与业务需求有关的系统设计,也即是说它是与系统所应对的领域(Domain)逻辑有关,很多时候,也将业务逻辑层称为领域层。例如Martin Fowler在《Patterns of Enterprise Application Architecture》一书中,将整个架构分为三个主要的层:表示层、领域层和数据源层。作为领域驱动设计的先驱Eric Evans,对业务逻辑层作了更细致地划分,细分为应用层与领域层,通过分层进一步将领域逻辑与领域逻辑的解决方案分离。   业务逻辑层在体系架构中的位置很关键,它处于数据访问层与表示层中间,起到了数据交换中承上启下的作用。由于层是一种弱耦合结构,层与层之间的依赖是向下的,底层对于上层而言是“无知”的,改变上层的设计对于其调用的底层而言没有任何影响。如果在分层设计时,遵循了面向接口设计的思想,那么这种向下的依赖也应该是一种弱依赖关系。因而在不改变接口定义的前提下,理想的分层式架构,应该是一个支持可抽取、可替换的“抽屉”式架构。正因为如此,业务逻辑层的设计对于一个支持可扩展的架构尤为关键,因为它扮演了两个不同的角色。对于数据访问层而言,它是调用者;对于表示层而言,它却是被调用者。依赖与被依赖的关系都纠结在业务逻辑层上,如何实现依赖关系的解耦,则是除了实现业务逻辑之外留给设计师的任务。   数据层    数据访问层:有时候也称为是持久层,其功能主要是负责数据库的访问,可以访问数据库系统、二进制文件、文本文档或是XML文档。   简单的说法就是实现对数据表的Select,Insert,Update,Delete的操作。如果要加入ORM的元素,那么就会包括对象和数据表之间的mapping,以及对象实体的持久化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值