登陆  注册  搜索  帮助
  主题:1481,帖子:2934,会员:1128  新会员:zls968
  精华区 | 推荐 | 新主题 | 新回复     
  .NET论坛_DOTBBS|Asp.Net开源论坛 _.net开源 > .NET开发交流 > Ajax讨论专区 > 利用Lambda扩展ExtJS2MVC
 DotBBS V2.1 介绍 DotBBS V2.1 下载 DotBBS使用帮助 DotBBS 10分钟入门教程
 DotBBS V2.1使用方法 DotBBS_V2.1_框架完全版 DotBBS,广受用户喜爱 保证十分钟学会seo
 人气:0/435  |<< << [1] >> >>|  (pages:1/1)   
 利用Lambda扩展ExtJS2MVC
  xdong
 
 
 级别:小学一年级
 积分:25 金币:6
 主题:212 帖子:242
 注册:2010-01-27
 加为好友发送私信
 编辑 删除 推荐 举报 打印 收藏到IE 收藏 复制 永久免费1G空间天天送

ASPX:

<%=this.HtmlExtJs().ExtWindow(f=> { f.varid = "xx"; f.width = 500; f.height = 500; f.title = "添加"; })
        .AddItem(item=>
     {
         item.For<ExtJS.Net.Grid.ExtGridPanel>
         (f =>
             {
                 f.AddStore(store =>
                             {
                                 store.proxy = new ExtHttpProxy() { url = "/home/list" };
                                 store.reader = new ExtJsonReader()
                                    {
                                        fields = new List<ExtField>()
                                        {
                                            new ExtField(){name="leaf"},
                                            new ExtField(){name="text"}
                                        }
                                    };
                             });
                 f.AddColumns(cols =>
                          {
                              cols.For<ExtColumn>(col => { col.header = "金额"; col.sortable = false; col.dataIndex = "leaf"; });
                              cols.For<ExtColumn>(col => { col.header = "名称"; col.sortable = false; col.dataIndex = "text"; });
                          });
             });
     }).ToRender()
    %>  可以看到代码基本上和ExtJS类似,对于熟悉ExtJS的人很容易上手,但这样对于一些常用的Grid,没有那么多功能来说还是比较麻烦的。为什么要保留类似ExtjS的语法和结构呢,当然是为了是第二次扩展。

对于以上的代码看起来重复的地方就是对于字段的定义,我们可以通过Lambda表达式来进行进一步的优化。

先看一下实现后的效果

aspx:

 <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<CNCWeb.Entity.Tbl_DictItem>>" %><% =Html.Grid("Grid1",100,200,"关键字列表",Model).Columns(cols=>
    {
        cols.For(x => x.ItemName).Named("名称");
        cols.For(x => x.ItemID);
        cols.For(x => x.DictID);
    }).Url("/home/list2")
%>效果图:
 

这里主要的地方就是For函数,通过For函数分析Lambda表达式的字段名称,然后对列进行添加,主要的代码如下:

public IGridColumn<T> For(Expression<Func<T, object>> propertySpecifier)
        {
            string inferredName = ExpressionToName(propertySpecifier);
            var column = new GridColumn<T>(propertySpecifier.Compile(), inferredName);
            _columns.Add(column);
            return column;
        }public static string ExpressionToName<TProperty>(Expression<Func<T, TProperty>> expression)
        {
            var memberExpression = RemoveUnary(expression.Body) as MemberExpression;
            return memberExpression == null ? null : memberExpression.Member.Name;
        }
        private static Expression RemoveUnary(Expression body)
        {
            var unary = body as UnaryExpression;
            if (unary != null)
            {
                return unary.Operand;
            }
            return body;
        }通过for函数把名称添加的一个List集合里面,然后再添加到GridPanel的Columns里面extGridPanel.AddColumns(cols =>
                {
                    foreach (var item in _gridModel.Columns)
                    {
                        cols.For<ExtColumn>(col => { col.header = item.Name; col.sortable = false; col.dataIndex = item.Field; });
                    }
                });

  posted:2009-6-30 8:16:00 | [楼 主]
 人气:0/435  |<< << [1] >> >>|  (pages:1/1)   
  << 上一篇 扩展URL Routing:处理URL中的日期参数
  >> 下一篇 [原创]E8.Net工作流90%以上源代码提供~
    Re:利用Lambda扩展ExtJS2MVC
选项
HTML可用
帐号: 密码: 没帐号,请注册

附  件:
验证码:
小提示:按Ctrl+Enter直接提交
 




Powered By DotBBS V2.0 Sql Server SP1   Copyright © 2010 .NET论坛_DOTBBS|Asp.Net开源论坛 _.net开源    返回顶部     清除缓存