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

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

 <div id="page-wrapper">
<div class="row">
<div class="col-lg-12">
<h1 class="page-header">新闻管理</h1>
</div>
<!-- /.col-lg- -->
</div>
<!-- /.row -->
<div class="row">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-body">
<h3>新闻列表</h3>
<div class="table-responsive">
@(Html.Kendo().Grid<WebSite.Models.NewsViewsModel>()
.Name("grid")
.Columns(columns =>
{
columns.Bound(p => p.Id).Title("序号").Filterable(false);
columns.Bound(p => p.Title).Title("新闻标题").Sortable(false);
columns.Bound(p => p.NewsTypeName).Title("新闻类别").Sortable(false).Filterable(filterable => filterable.UI("NewsTypeFilter"));
columns.Bound(p => p.VisitCount).Title("浏览次数").Filterable(false);
columns.Bound(p => p.WriteTime).Title("发布时间").Sortable(false).Filterable(false);
columns.Bound(p => p.NickName).Title("发布人").Sortable(false).Filterable(filterable => filterable.UI("AdminFilter"));
columns.Command(command => command.Custom("编辑").Click("showDetails"));
columns.Command(command =>
{
command.Destroy();
});
})
.Sortable()
.Pageable()
.Filterable()
.DataSource(dataSource => dataSource
.Ajax()
.Events(events => events.Error("error_handler"))
.Model(model => model.Id(p => p.Id))
.PageSize()
.Read(read => read.Action("News_Read", "Admin"))
.Destroy(x => x.Action("NewsDelete", "Admin"))
)
)
</div>
</div>
</div>
</div>
<!-- /.col-lg- -->
</div>
<!-- /.row --> </div>
<!-- /#page-wrapper -->
<script type="text/javascript">
function error_handler(e) {
if (e.errors) {
var message = "Errors:\n";
$.each(e.errors, function (key, value) {
if ('errors' in value) {
$.each(value.errors, function () {
message += this + "\n";
});
}
});
alert(message);
}
} function showDetails(e) {
var dataItem = this.dataItem($(e.currentTarget).closest("tr"));
window.location.href = '/Admin/NewsAddOrUpdate?id='+dataItem.Id;
} function NewsTypeFilter(element)
{
element.kendoDropDownList({
dataSource: {
transport: {
read: "@Url.Action("Get_NewsType")"
}
},
optionLabel: "--选择新闻类别--"
});
} function AdminFilter(element)
{
element.kendoDropDownList({
dataSource: {
transport: {
read: "@Url.Action("Get_Admin")"
}
},
optionLabel: "--选择管理员--"
});
}
</script>

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

 public ActionResult NewsList()
{
return View();
} public ActionResult Get_NewsType()
{
var lservice = UnitOfWork.NewsTypes;
return Json(lservice.Select(e => e.NewsTypeName).Distinct(), JsonRequestBehavior.AllowGet);
} public ActionResult Get_Admin()
{
var lservice = UnitOfWork.Admins;
return Json(lservice.Select(e => e.NickName).Distinct(), JsonRequestBehavior.AllowGet);
} private List<SelectListItem> getNewsType()
{
List<SelectListItem> list = new List<SelectListItem>(); var lnewstype = UnitOfWork.NewsTypes.ToList();
foreach (var item in lnewstype)
{
SelectListItem obj = new SelectListItem();
obj.Text = item.NewsTypeName;
obj.Value = item.Id.ToString();
list.Add(obj);
}
return list;
} public ActionResult News_Read([DataSourceRequest]DataSourceRequest request)
{
var lnews = UnitOfWork.NewsInfos; //filter
if (request.Filters.Count() > )
{
foreach (var item in request.Filters)
{
string type = item.GetType().ToString();
if (type == "Kendo.Mvc.FilterDescriptor")
{
var model = ((Kendo.Mvc.FilterDescriptor)item);
if (model.Member == "Title")
{
lnews = (IQueryable<NewsInfo>)lnews.Where(x => x.Title == model.Value.ToString());
}
else if (model.Member == "NewsTypeName")
{
lnews = (IQueryable<NewsInfo>)lnews.Where(x => x.NewsType.NewsTypeName == model.Value.ToString());
}
else if (model.Member == "NickName")
{
lnews = (IQueryable<NewsInfo>)lnews.Where(x => x.Admin.NickName == model.Value.ToString());
}
}
else
{
var model = ((Kendo.Mvc.CompositeFilterDescriptor)item);
foreach (var i in model.FilterDescriptors)
{
var cur = ((Kendo.Mvc.FilterDescriptor)i);
if (cur.Member == "Title")
{
lnews = (IQueryable<NewsInfo>)lnews.Where(x => x.Title == cur.Value.ToString());
}
else if (cur.Member == "NewsTypeName")
{
lnews = (IQueryable<NewsInfo>)lnews.Where(x => x.NewsType.NewsTypeName == Convert.ToString(cur.Value));
}
else if (cur.Member == "NickName")
{
lnews = (IQueryable<NewsInfo>)lnews.Where(x => x.Admin.NickName == Convert.ToString(cur.Value));
}
}
}
}
} int nTotalCount = lnews.Count(); //Apply sorting
if (request.Sorts.Count() == )
{
request.Sorts.Add(new SortDescriptor("Id", ListSortDirection.Descending));
}
foreach (SortDescriptor sortDescriptor in request.Sorts)
{
if (sortDescriptor.SortDirection == ListSortDirection.Ascending)
{
switch (sortDescriptor.Member)
{
case "Id":
lnews = lnews.OrderBy(x => x.Id);
break;
case "VisitCount":
lnews = lnews.OrderBy(x => x.VisitCount);
break;
}
}
else
{
switch (sortDescriptor.Member)
{
case "Id":
lnews = lnews.OrderByDescending(x => x.Id);
break;
case "VisitCount":
lnews = lnews.OrderByDescending(x => x.VisitCount);
break;
}
}
} List<NewsViewsModel> list = new List<NewsViewsModel>(); lnews = lnews.Skip((request.Page - ) * request.PageSize).Take(request.PageSize); foreach (var item in lnews)
{
NewsViewsModel model = new NewsViewsModel();
model.Id = item.Id;
model.AdminId = item.Admin.Id;
model.NewsContent = item.NewsContent;
model.NewsTypeId = item.NewsTypeId;
model.NewsTypeName = item.NewsType.NewsTypeName;
model.NickName = item.Admin.NickName;
model.Title = item.Title;
model.VisitCount = item.VisitCount;
model.WriteTime = item.WriteTime.ToString();
list.Add(model);
} var result = new DataSourceResult()
{
Data = list,
Total = nTotalCount
};
return Json(result, JsonRequestBehavior.AllowGet);
}

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

kendoui-grid篇的更多相关文章

  1. Tkinter教程之Grid篇

    本文转载自:http://blog.csdn.net/jcodeer/article/details/1813196 '''Tkinter教程之Grid篇'''# Tkinter参考中最推荐使用的一个 ...

  2. KendoUI Grid Pager部分 Nan-Nan of x Items

    相关问题: http://stackoverflow.com/questions/23941065/pager-error-in-kendo-gridnan-nan-of-1-items http:/ ...

  3. kendoUI grid 过滤时出错:TypeError toLowerCase is not a function

    错误原因:类型不一致. 有些过滤类型为字符串,有些为整型时.

  4. kndo grid:通过checkbox 实现多选和全选

    在kendo grid 里要想通过checkbox 实现多选和权限,我们就要通过templeate 和input 标签对kendo grid 进行自定义 1. 在column 里面加入一列checkb ...

  5. Kendo Grid:将Edit button 移到grid view 得顶部

    因为kendo grid 得toolbar 里不包括Edit button,所以我们要先用template 创建一个自定义得edit button,然后再对这个button实现edit 功能. < ...

  6. 封装扩展Kendo UI Grid

    封装后的代码如下: function DataGrid(options) { this.options = { height: "100%", sortable: true, re ...

  7. kendo ui 好用的小部件--grid

    Kendo Ui Grid控件,继承至Widget. https://demos.telerik.com/kendo-ui/grid/index  快速上手教程  下面的代码来自本教程 做表格时非常方 ...

  8. Kendo UI Grid 使用总结

    Kendo UI Grid控件的功能强大,这里将常用的一些功能总结一下. Kendo UI Grid 固定列 在使用Gird控件显示数据时,如果数据列过多,会出现横向滚动条,很多情况下,我们希望某些列 ...

  9. TGL站长关于常见问题的回复

    问题地址: http://www.thegrouplet.com/thread-112923-1-1.html 问题: 网站配有太多的模板是否影响网站加载速度 月光答复: wp不需要删除其他的模板,不 ...

  10. kendoui treeview grid spreadsheet

    treeview 傻子方式获取id <!DOCTYPE html> <html> <head> <title>API</title> < ...

随机推荐

  1. 测试Tomcat

  2. C#实现字符串按多个字符采用Split方法分割

    原文:C#实现字符串按多个字符采用Split方法分割 String字符串如何按多个字符采用Split方法进行分割呢?本文提供VS2005和VS2003的实现方法,VS2005可以用下面的方法: str ...

  3. c语言中static的用法

    1.static定义变量: 1).局部: a.静态局部变量在函数内部定义,生存期为整个源代码,但作用域与自动变量相同,只能在定义的函数里面使用.退出该函数后,虽然此变量还存在内存中,但不能使用. b. ...

  4. AutoCAD图形打印出图片 C#

    这几天搞cad二次开发,用的是C#语言,目前在网上找到的资料比较少.弄了两天,才做出怎样实现打印出图片.首先得在AutoCAD软件界面下,设置打印机的页面设置和打印机设备名称一样(以防打印不出来).即 ...

  5. SQL语句练习

    一.            设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表( ...

  6. Java中ArrayList和LinkedList区别

    ArrayList和LinkedList的大致区别如下:1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构. 2.对于随机访问get和set,ArrayLis ...

  7. js中的this怎么理解

    本博客供自己学习备忘, js中的this感觉很混乱,目前还有不少地方搞得不是很清楚,看到一篇不错的文章,先摘下来 this是Javascript语言的一个关键字它代表函数运行时,自动生成的一个内部对象 ...

  8. MyBatis学习总结4--解决字段名与实体类属性名不相同的冲突

    在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定是完全相同的,如果直接在xml映射文件中使用sql进行映射,会造成返回值为空的情况,下面阐述解决方案: 测试所用表和数据 create t ...

  9. 02day2

    油滴扩展 [问题描述] 在一个长方形框子里,最多有 N(0≤N≤6)个相异的点.在其中任何-个点上放一个很小的油滴,那么这个油滴会一直扩展,直到接触到其他油滴或者框子的边界.必须等一个油滴扩展完毕才能 ...

  10. 调用DirectDraw接口和调DirectDraw7接口的不同点对比

    调用DirectDraw接口步骤: 1.       包含链接库ddraw.lib 2.       初始化窗口类型(全屏独占时类型用popup). 3.       在初始化窗口后初始化Direct ...