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. Xamarin.Android 入门之:Xamarin快速入门

    一. 准备工作 1.新建一个项目取名为phoneword 2.在项目创建好之后,让我们展开“Resources”文件夹然后找到并打开该文件夹下的“layout”文件夹,双击main.axml在Andr ...

  2. 41. First Missing Positive

    题目: Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2 ...

  3. Java API —— Random类

    1.Random类概述         此类用于产生随机数         如果用相同的种子创建两个 Random 实例,则对每个实例进行相同的方法调用序列,它们将生成并返回相同的数字序列. 2.构造 ...

  4. Hadoop HDFS文件常用操作及注意事项(更新)

    1.Copy a file from the local file system to HDFS The srcFile variable needs to contain the full name ...

  5. 第三章:推荐系统冷启动与CB

    3.1冷启动问题简介: 冷启动问题(cold start)主要分三类: •     用户冷启动 •     物品冷启动 •     系统冷启动 参考解决方案: •     推热门 •     利用用户 ...

  6. 【POJ】1084 Square Destroyer

    1. 题目描述由$n \times n, n \in [1, 5]$的正方形由$2 \times n \times (n+1)$根木棍组成,可能已经有些木棍被破坏,求至少还需破坏多少木根,可以使得不存 ...

  7. poj 3792 Area of Polycubes (简单模拟)

    题目 题意:在三维坐标系中,给定n个立方体的中心坐标,立方体的边长为1,按照输入顺序,后来输入的必须和之前输入的立方体有公共的边. 而且,不能和之前输入的立方体相同. 如果满足条件,输出表面积.如果不 ...

  8. Python3 学习第二弹: 字符串String

    字符串表示问题 常见用法 '' 与 "" 就不提了 一些特殊用法 三引号:接收多行字符串的输入 >>>print('''Oh my God!''') Oh my ...

  9. 一个简单的ORM制作(SQL帮助类)

    一个简单的ORM制作大概需要以下几个类: SQL执行类 CURD操作类 其他酱油类 先从SQL执行类说起,可能会涉及数据库的迁移等问题,所以需要定义一个接口以方便迁移到其他数据库, 事务没提供命名,若 ...

  10. BZOJ 2179 FFT快速傅里叶

    fft. #include<set> #include<map> #include<ctime> #include<queue> #include< ...