kendoui-grid篇

kendo确实是个好东西,能够让我们专注于后端开发,无需在效果呈现上花大力气,唯一的缺点,它是收费的,但是我目前还没发现为嘛要掏钱,因为free的也满足了我的需求。

kendoUI For asp.mvc:http://demos.telerik.com/aspnet-mvc/

 1 <div id="page-wrapper">
 2     <div class="row">
 3         <div class="col-lg-12">
 4             <h1 class="page-header">新闻管理</h1>
 5         </div>
 6         <!-- /.col-lg-12 -->
 7     </div>
 8     <!-- /.row -->
 9     <div class="row">
10         <div class="col-lg-12">
11             <div class="panel panel-default">
12                 <div class="panel-body">
13                     <h3>新闻列表</h3>
14                     <div class="table-responsive">
15                           @(Html.Kendo().Grid<WebSite.Models.NewsViewsModel>()
16                                 .Name("grid")
17                                 .Columns(columns =>
18                                 {
19                                     columns.Bound(p => p.Id).Title("序号").Filterable(false);
20                                     columns.Bound(p => p.Title).Title("新闻标题").Sortable(false);
21                                     columns.Bound(p => p.NewsTypeName).Title("新闻类别").Sortable(false).Filterable(filterable => filterable.UI("NewsTypeFilter"));
22                                     columns.Bound(p => p.VisitCount).Title("浏览次数").Filterable(false);
23                                     columns.Bound(p => p.WriteTime).Title("发布时间").Sortable(false).Filterable(false);
24                                     columns.Bound(p => p.NickName).Title("发布人").Sortable(false).Filterable(filterable => filterable.UI("AdminFilter"));
25                                     columns.Command(command => command.Custom("编辑").Click("showDetails"));
26                                     columns.Command(command =>
27                                     {
28                                         command.Destroy();
29                                     });
30                                 })
31                                 .Sortable()
32                                 .Pageable()
33                                 .Filterable()
34                                 .DataSource(dataSource => dataSource
35                                 .Ajax()
36                                 .Events(events => events.Error("error_handler"))
37                                 .Model(model => model.Id(p => p.Id))
38                                 .PageSize(13)
39                                     .Read(read => read.Action("News_Read", "Admin"))
40                                     .Destroy(x => x.Action("NewsDelete", "Admin"))
41                                 )
42                         )
43                     </div>
44                 </div>
45             </div>
46         </div>
47         <!-- /.col-lg-12 -->
48     </div>
49     <!-- /.row -->
50 
51 </div>
52 <!-- /#page-wrapper -->
53 <script type="text/javascript">
54     function error_handler(e) {
55         if (e.errors) {
56             var message = "Errors:\n";
57             $.each(e.errors, function (key, value) {
58                 if ('errors' in value) {
59                     $.each(value.errors, function () {
60                         message += this + "\n";
61                     });
62                 }
63             });
64             alert(message);
65         }
66     }
67    
68 
69     function showDetails(e) {                
70         var dataItem = this.dataItem($(e.currentTarget).closest("tr"));
71         window.location.href = '/Admin/NewsAddOrUpdate?id='+dataItem.Id;        
72     }
73 
74     function NewsTypeFilter(element)
75     {
76         element.kendoDropDownList({
77             dataSource: {
78                 transport: {
79                     read: "@Url.Action("Get_NewsType")"
80                 }
81             },
82                 optionLabel: "--选择新闻类别--"
83         });
84     }
85 
86     function AdminFilter(element)
87     {
88         element.kendoDropDownList({
89             dataSource: {
90                 transport: {
91                     read: "@Url.Action("Get_Admin")"
92                 }
93             },
94                 optionLabel: "--选择管理员--"
95         });
96     }
97 </script>

这是前端代码,很简洁,如果我们自己实现类似功能,那就是一大堆js,功能还没它好,支持排序,查询。。。分页。。。

  1 public ActionResult NewsList()
  2         {
  3             return View();
  4         }
  5 
  6         public ActionResult Get_NewsType()
  7         {
  8             var lservice = UnitOfWork.NewsTypes;
  9             return Json(lservice.Select(e => e.NewsTypeName).Distinct(), JsonRequestBehavior.AllowGet);
 10         }
 11 
 12         public ActionResult Get_Admin()
 13         {
 14             var lservice = UnitOfWork.Admins;
 15             return Json(lservice.Select(e => e.NickName).Distinct(), JsonRequestBehavior.AllowGet);
 16         }
 17 
 18         private List<SelectListItem> getNewsType()
 19         {
 20             List<SelectListItem> list = new List<SelectListItem>();
 21 
 22             var lnewstype = UnitOfWork.NewsTypes.ToList();
 23             foreach (var item in lnewstype)
 24             {
 25                 SelectListItem obj = new SelectListItem();
 26                 obj.Text = item.NewsTypeName;
 27                 obj.Value = item.Id.ToString();
 28                 list.Add(obj);
 29             }
 30             return list;
 31         }
 32 
 33         public ActionResult News_Read([DataSourceRequest]DataSourceRequest request)
 34         {            
 35             var lnews = UnitOfWork.NewsInfos;
 36 
 37             //filter
 38             if (request.Filters.Count() > 0)
 39             {
 40                 foreach (var item in request.Filters)
 41                 {
 42                     string type = item.GetType().ToString();
 43                     if (type == "Kendo.Mvc.FilterDescriptor")
 44                     {
 45                         var model = ((Kendo.Mvc.FilterDescriptor)item);
 46                         if (model.Member == "Title")
 47                         {
 48                             lnews = (IQueryable<NewsInfo>)lnews.Where(x => x.Title == model.Value.ToString());
 49                         }
 50                         else if (model.Member == "NewsTypeName")
 51                         {
 52                             lnews = (IQueryable<NewsInfo>)lnews.Where(x => x.NewsType.NewsTypeName == model.Value.ToString());
 53                         }
 54                         else if (model.Member == "NickName")
 55                         {
 56                             lnews = (IQueryable<NewsInfo>)lnews.Where(x => x.Admin.NickName == model.Value.ToString());
 57                         }
 58                     }
 59                     else
 60                     {
 61                         var model = ((Kendo.Mvc.CompositeFilterDescriptor)item);
 62                         foreach (var i in model.FilterDescriptors)
 63                         {
 64                             var cur = ((Kendo.Mvc.FilterDescriptor)i);
 65                             if (cur.Member == "Title")
 66                             {
 67                                 lnews = (IQueryable<NewsInfo>)lnews.Where(x => x.Title == cur.Value.ToString());
 68                             }
 69                             else if (cur.Member == "NewsTypeName")
 70                             {
 71                                 lnews = (IQueryable<NewsInfo>)lnews.Where(x => x.NewsType.NewsTypeName == Convert.ToString(cur.Value));
 72                             }
 73                             else if (cur.Member == "NickName")
 74                             {
 75                                 lnews = (IQueryable<NewsInfo>)lnews.Where(x => x.Admin.NickName == Convert.ToString(cur.Value));
 76                             }
 77                         }
 78                     }
 79                 }
 80             }
 81 
 82             int nTotalCount = lnews.Count();
 83 
 84             //Apply sorting
 85             if (request.Sorts.Count() == 0)
 86             {
 87                 request.Sorts.Add(new SortDescriptor("Id", ListSortDirection.Descending));
 88             }
 89             foreach (SortDescriptor sortDescriptor in request.Sorts)
 90             {
 91                 if (sortDescriptor.SortDirection == ListSortDirection.Ascending)
 92                 {
 93                     switch (sortDescriptor.Member)
 94                     {
 95                         case "Id":
 96                             lnews = lnews.OrderBy(x => x.Id);
 97                             break;
 98                         case "VisitCount":
 99                             lnews = lnews.OrderBy(x => x.VisitCount);
100                             break;
101                     }
102                 }
103                 else
104                 {
105                     switch (sortDescriptor.Member)
106                     {
107                         case "Id":
108                             lnews = lnews.OrderByDescending(x => x.Id);
109                             break;
110                         case "VisitCount":
111                             lnews = lnews.OrderByDescending(x => x.VisitCount);
112                             break;
113                     }
114                 }
115             }
116 
117             List<NewsViewsModel> list = new List<NewsViewsModel>();
118 
119             lnews = lnews.Skip((request.Page - 1) * request.PageSize).Take(request.PageSize);
120 
121             foreach (var item in lnews)
122             {
123                 NewsViewsModel model = new NewsViewsModel();
124                 model.Id = item.Id;
125                 model.AdminId = item.Admin.Id;
126                 model.NewsContent = item.NewsContent;
127                 model.NewsTypeId = item.NewsTypeId;
128                 model.NewsTypeName = item.NewsType.NewsTypeName;
129                 model.NickName = item.Admin.NickName;
130                 model.Title = item.Title;
131                 model.VisitCount = item.VisitCount;
132                 model.WriteTime = item.WriteTime.ToString();
133                 list.Add(model);
134             }
135 
136             var result = new DataSourceResult()
137             {
138                 Data = list,
139                 Total = nTotalCount
140             };
141             return Json(result, JsonRequestBehavior.AllowGet);
142         }

后台代码也就获取grid数据时,复杂一些。。总体还是能接受的

posted @ 2014-10-29 16:07  xuxzx  阅读(2331)  评论(1编辑  收藏  举报