当前位置:编程学习 > C#/ASP.NET >>

有人用过jqgrid吗?求教一个通用类的问题。

jqgrid需要一个JSON格式的数据来填充数据。每次写都很麻烦,怎么样建一个通用格式的类。当传入LIST后自动转为JQGIRD 需要的JSON。
因为每个LIST都是不同的。应该怎么做?



            var temp = new
            {

                total = totalPages,
                page = page,
                records = totalRecords,
                rows =list.Select(i=>new 
                {
                    id=i.AnnounceId,
                    cell=new object[]{ i.AnnounceId,i.Title,string.IsNullOrEmpty(i.LinkUrl)?false:true,i.IsPass,i.IsTop,i.CreateTime}
                })
            };
//这是JQGRID需要的格式,这个LIST是我建一个公告的LIST
//List<Announce> 格式。然后里面有Announce的属性。
//如果下次换一个LIST呢。属性都会变化了。


怎么样建一个像这样的方法ConvertToJqGridList(int page,int pageSize,int total,List<T>)
然后让他自动转换。谢谢 --------------------编程问答-------------------- 额,自己使用Webmethod即可无需在做啥,非必要封装

[WebMethod]
public static object getData()
{
   return new
            {
 
                total = totalPages,
                page = page,
                records = totalRecords,
                rows =list.Select(i=>new 
                {
                    id=i.AnnounceId,
                    cell=new object[]{ i.AnnounceId,i.Title,string.IsNullOrEmpty(i.LinkUrl)?false:true,i.IsPass,i.IsTop,i.CreateTime}
                })
            };
}

WebMethod会自动转换为json

ps:这是为js调用准备的玩意,同样类似的玩意还有新鲜出炉滴wepapi方式,如果你不喜欢这种方式,还可以使用追传统的json.net或JavaScriptSerializer,不必为什么list不list担心,只要的对象不是循环引用的,常规json序列化类都能自动转换 --------------------编程问答-------------------- 有两种方法可以解决这个问题
1.是楼主现在用的方法
用反射找出IEnumerable<T> 里T的属性,然后填入GridModel
我们用这个方法完美解决了楼主的问题,在某个项目中,呵呵
看下面,GridColumn的信息完全可以通过反射来得到。

        private void InitializeSortingGridOptions(GridModel model)
        {
            model.Columns.Add(new GridColumn(HttpContext.GetGlobalResourceObject("Grid", "PRODUCT_ID").ToString(), "ProductID", "number", "100px"));
            model.Columns.Add(new GridColumn(HttpContext.GetGlobalResourceObject("Grid", "PRODUCT_NAME").ToString(), "Name", "string", "300px"));
            model.Columns.Add(new GridColumn(HttpContext.GetGlobalResourceObject("Grid", "PRODUCT_NUMBER").ToString(), "ProductNumber", "string", "205px"));
            model.Columns.Add(new GridColumn(HttpContext.GetGlobalResourceObject("Grid", "STANDARD_COST").ToString(), "StandardCost", "number", "110px"));

            GridPaging paging = new GridPaging();
            paging.PageSize = 12;
            model.Features.Add(paging);
        }

官方DEMO在此
http://www.infragistics.com/products/jquery/sample/grid/paging

第二种方法是使用AutoGenerateColumns(true)
http://www.infragistics.com/products/jquery/sample/grid/auto-generate-columns
你只需把AutoGenerateColumns设为True
传入的是一个Model或DatasourceUrl,Infragistics会自动解析

这样的缺点是无法定制一些东西,比如列宽,比如自定义列的统计功能等等
所以大型项目,用户需求高的项目千万别用这个方法……

刚刚辛辛苦苦打的,不小心点掉了……悲剧  

@(Html.Infragistics().Grid(Model).ID("grid2").DefaultColumnWidth("170").Height("400px").AutoGenerateColumns(true).Features(features => {
                 features.Sorting().Mode(SortingMode.Single).ColumnSettings(settings => {
                     settings.ColumnSetting().ColumnKey("ProductID").AllowSorting(true);
             });                                                                         
             }).DataSourceUrl(Url.Action("AutoGenerateColumnsGetData")).DataBind().Render()

    



--------------------编程问答-------------------- 2楼没看我问的什么。 --------------------编程问答--------------------
引用 3 楼 superj 的回复:
2楼没看我问的什么。


仔细看了下,果然看错了,半夜里看成Iggrid了
帮顶下


     
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,