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. Hibernate逍遥游记-第8章 映射组成关系(<component>、<parent>)

    一. 1. <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate ...

  2. QTP之delphi试用感想一(自动化测试)

    这两天一直在琢磨自动化测试,自动化测试,其实与单元测试有一些相同之处,单元测试的目的也是可以一次写,多次运行,对于测试驱动及后期维护真是有非常多的好处,用自动化测试工具也是如何,主要目的是为了回归测试 ...

  3. QSS的作用需要正确设置文件编码才能起作用

    QT这个库,无非使用OO对跨平台做了绝佳的封装,这其中的主要工作也就是比较繁琐而已,但并不多么了不起.唯独其中提供的QSS功能,让我感到十分神奇,做出来的效果实在很惊艳,而使用代码却又是如此简单,而且 ...

  4. tomcat中如何运行war包呢

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPQAAADRCAIAAAB0LAgsAAAQtklEQVR4nO2d7W/bxh3H9ZfZbRrFOj

  5. NSRange

    int main(int argc, const char * argv[]) {    @autoreleasepool {        // insert code here...       ...

  6. Invoke与BeginInvoke

    一.为什么 Control类提供了 Invoke和 BeginInvoke机制? 关于这个问题的最主要的原因已经是 dotnet程序员众所周知的,我在此费点笔墨再次记录到自己的日志,以便日后提醒一下自 ...

  7. mongodb管理工具rockmongo

    mongodb的图像管理工具非常之多,我用的是rockmongo. RockMongo 是一个PHP5写的MongoDB管理工具. 主要特征: 使用宽松的New BSD License协议 速度快,安 ...

  8. Lucas定理学习小记

    (1)Lucas定理:p为素数,则有: (2)证明: n=(ak...a2,a1,a0)p = (ak...a2,a1)p*p + a0 =  [n/p]*p+a0,m=[m/p]*p+b0其次,我们 ...

  9. 用git difff 生成补丁

    http://stackoverflow.com/questions/1191282/how-to-see-the-changes-between-two-commits-without-commit ...

  10. MySQL学习笔记二

    Ø function 函数 函数的作用比较大,一般多用在select查询语句和where条件语句之后.按照函数返回的结果, 可以分为:多行函数和单行函数:所谓的单行函数就是将每条数据进行独立的计算,然 ...