or
public
static
IQueryable<TEntity> ApplyFiltering<TEntity>(
this
IQueryable<TEntity> queryable, IList<IFilterDescriptor> filters) where TEntity:
class
{
foreach
(var filter
in
filters.Cast<FilterDescriptor>()){
var pe = Expression.Parameter(
typeof
(TEntity),
"x"
);
var left = Expression.Property(pe,
typeof
(TEntity).GetProperty(filter.Member));
queryable = queryable.Search(Expression.Lambda<Func<TEntity,
object
>>(left,
new
ParameterExpression[] { pe }), filter.Value.ToString());
}
filters.Clear();
return
queryable;
}
//And controller code:
public
ActionResult Data_Read([DataSourceRequest] DataSourceRequest request)
{
var query = repository.GetQueryable();
query = query.ApplyFilters(request.Filters);
return
Json(query.ToDataSourceResult(request));
}
@model CustomFieldsGroup
@using (Html.BeginForm())
{
@Html.HiddenFor(x => x.GroupID)
@Html.HiddenFor(x => x.TypeID)
<
ul
>
<
li
>
@Html.LabelFor(x => x.GroupName)
</
li
>
<
li
>
@Html.EditorFor(x => x.GroupName)
</
li
>
</
ul
>
<
div
class
=
"edit-buttons"
>
<
a
class
=
"k-button k-button-icontext k-update-button"
href
=
"\\#"
><
span
class
=
"k-icon k-update"
></
span
>Save</
a
>
<
a
class
=
"k-button k-button-icontext k-cancel-button"
href
=
"\\#"
><
span
class
=
"k-icon k-cancel"
></
span
>Cancel</
a
>
</
div
>
}
<
div
class
=
"k-toolbar k-grid-toolbar"
>
<
a
id
=
"addRoleButton"
class
=
"k-button k-button-icontext k-add-button test"
href
=
"\\#"
><
span
class
=
"k-icon k-add"
></
span
>Add new group</
a
>
</
div
>
<
script
type
=
"text/x-kendo-tmpl"
id
=
"customFieldTemplate"
>
<
div
class
=
"product-view k-widget"
>
<
div
class
=
"edit-buttons"
>
<
a
class
=
"k-button k-button-icontext k-edit-button"
href
=
"\\#"
><
span
class
=
"k-icon k-edit"
></
span
></
a
>
<
a
class
=
"k-button k-button-icontext k-delete-button"
href
=
"\\#"
><
span
class
=
"k-icon k-delete"
></
span
></
a
>
</
div
>
<
div
>
Group Name
</
div
>
<
div
>
${GroupName}
</
div
>
@*<
dl
>
<
dt
>GroupName</
dt
>
<
dd
>${GroupName}</
dd
>
<
dt
>Unit Price</
dt
>
<
dd
>#:kendo.toString(UnitPrice, "c")#</
dd
>
<
dt
>Units In Stock</
dt
>
<
dd
>#:UnitsInStock#</
dd
>
<
dt
>Discontinued</
dt
>
<
dd
>#:Discontinued#</
dd
>
</
dl
>*@
</
div
>
</
script
>
<
div
class
=
"fields"
>
@(Html.Kendo().ListView<
CustomFieldsGroup
>(Model.Groups)
.Name("listView")
.ClientTemplateId("customFieldTemplate")
.TagName("div")
.DataSource(datasource =>
datasource.Model(model=>
{
model.Id(x => x.GroupID);
model.Field(x => x.TypeID).Editable(false);
model.Field(x => x.GroupName);
})
.Read(ac => ac.Action("Index_Read", "CustomFields"))
.Create(ac => ac.Action("CreateGroup", "CustomFields"))
.Update(ac => ac.Action("EditGroup", "CustomFields")))
.Editable())
)
</
div
>
<
script
>
$(function () {
var listView = $("#listView").data("kendoListView");
$(".test").bind("click", function (e) {
listView.add();
e.preventDefault();
})
})
</
script
>
@model IEnumerable<
TOPS.IQ.ViewModels.Administration.WebInfoVM
>
@(Html.Kendo().Grid<
TOPS.IQ.ViewModels.Administration.WebInfoVM
>(Model)
.Name("grid")
.HtmlAttributes(new { style = "height: 280px;" })
.DataSource(dataSource =>
dataSource.Ajax()
.Read(read => read.Action("EditingInlineWebInfo_Read", "Administration", new { id = Model.FirstOrDefault() == null ? 0 : Model.First().CommunityID }))
.Model(model => model.Id(m => m.WebInfoID))
.Create(update => update.Action("EditingInlineWebInfo_Create", "Administration"))
.Update(update => update.Action("EditingInlineWebInfo_Update", "Administration"))
.Destroy(update => update.Action("EditingInlineWebInfo_Destroy", "Administration"))
)
.Columns(columns =>
{
columns.Bound(p => p.WebInfoTypeName);
columns.Bound(p => p.Email);
columns.Bound(p => p.Description);
columns.Command(command => { command.Edit(); command.Destroy(); }).Width(172);
})
.ToolBar(toolbar => toolbar.Create())
.Editable()
.Pageable()
.Sortable()
.Scrollable()
)
public
JsonResult EditingInlineWebInfo_Read([DataSourceRequest] DataSourceRequest request,
int
id)
{
//get the web infos for the given community
var webInfos = _service.FindAll<Community_Webaddress>().Where(c => c.CommunityID == id).Select(c => c.WebAddress);
var webInfosVM = webInfos.ConvertToWebInfoesVM();
return
Json(webInfosVM.ToDataSourceResult(request),JsonRequestBehavior.AllowGet);
}
[HttpPost]
public
ActionResult EditingInlineWebInfo_Create([DataSourceRequest] DataSourceRequest request, WebInfoVM webVM)
{
if
(webVM !=
null
&& ModelState.IsValid)
{
var webAddr = webVM.ConvertToWebAddress();
_service.Add<WebAddress>(webAddr);
var task = _service.SaveChangesAsync();
int
result = task.Result;
}
return
Json(
new
[] { webVM }.ToDataSourceResult(request, ModelState));
}
[HttpPost]
public
ActionResult EditingInlineWebInfo_Update([DataSourceRequest] DataSourceRequest request, WebInfoVM webVM)
{
if
(webVM !=
null
&& ModelState.IsValid)
{
var webAddr = webVM.ConvertToWebAddress();
var task = _service.SaveChangesAsync();
int
result = task.Result;
}
return
Json(
new
[] { webVM }.ToDataSourceResult(request, ModelState));
}