On
my previous post I had already mentioned about how to apply the sort to Bootstrap paginated tables. By making the following changes server side sorting can be achieved along with pagination.
On Filter Model
self.sortBy
= ko.observable('Id');//Default sort Column
self.sortAscending
= ko.observable(false);
self.iconType =
ko.observable('glyphicon
glyphicon-chevron-down'); //
Icon to appear near Column
No Changes to Adarsh Log Model or Adarsh Log list Model
Knockout.js View Model for Adarsh Log Changes
Add the sortTable method to it
self.sortTable
= function
(viewModel, e) {
var columClicked = $(e.target).attr("data-column")
var sortAscending = (self.filter().sortAscending() === true) ? false : true;
self.filter().sortAscending(sortAscending);
self.filter().sortBy(columClicked);
datacontext.getAllPost(self.adarshLogListModel,
config.adarshLogUrl, model.adarshLogListModel, self.filter).always(function () {
var list = [];
if (self.filter().currentPageIndex() <= 0) {
self.filter().enablePrev(false);
}
self.adarshLogListModel().adarshLogList().forEach(function (item) {
var newRecord = new model.adarshLog();
ko.mapping.fromJS(item, {},
newRecord);
list.push(newRecord);
});
self.adarshLogs(list);
//
var newFilter = model.filter;
ko.mapping.fromJS(self.adarshLogListModel().filterModel(),
{}, self.filter());
//(newFilter);
self.individualPageList(self.adarshLogListModel().filterModel().individualPageList());
if (self.filter().currentPageIndex() <= 1) {
self.filter().enablePrev(false);
}
if (self.filter().currentPageIndex() >=
self.filter().totalPageCount()) {
self.filter().enableNext(false);
}
self.isBusy(false);
self.filter().iconType((sortAscending === false) ? "glyphicon
glyphicon-chevron-down" : "glyphicon glyphicon-chevron-up");
});
}
Filter.CS C#Model Changes
Add Following
Properties
public string SortBy { get; set; }
public bool SortAscending { get; set; }
No Changes to Get All WebApi Controller Method
GetAll Repository Change
Before applying the
pagination, add the sorting
switch (filter.SortBy)
{
case "Id":
if(filter.SortAscending)
adarshLogList =
adarshLogList.OrderBy(a => a.Id);
else
adarshLogList =
adarshLogList.OrderByDescending(a => a.Id);
break;
case "Name":
if (filter.SortAscending)
adarshLogList = adarshLogList.OrderBy(a =>
a.Name);
else
adarshLogList =
adarshLogList.OrderByDescending(a => a.Name);
break;
}
Changes in View List View
<table class="table
table-striped" id="tbUsers">
<thead>
<tr data-bind="click:
$root.sortTable" class="pointerControl">
<th data-column="Id">
Id
<span data-bind="attr: { class:
sortBy() == 'Id' ? 'isVisible' : 'isHidden' }">
<i data-bind="attr: { class: iconType() }"></i>
</span>
</th>
<th data-column="Name">Name
<span data-bind="attr: { class:
sortBy() == 'Name' ? 'isVisible' : 'isHidden' }">
<i data-bind="attr: { class: iconType() }"></i>
</span>
</th>
<th class="col-sm-1"></th>
</tr>
</thead>
<tbody data-bind="foreach: adarshLogs">
<tr>
<td data-bind="text: id"></td>
<td data-bind="text: name"></td>
<td class="col-sm-1">
<a data-bind="attr: { href:
'@Url.Action("Edit", "AdarshLog")' + '/' + Id () }" title="View"><span class="glyphicon glyphicon-pencil"></span></a>
</td>
</tr>
</tbody>
</table>
Comments
Post a Comment