C# 如何使用DataTables服务器端列排序?
我们有一个DataTable,其中包含如下数据:C# 如何使用DataTables服务器端列排序?,c#,jquery,asp.net-mvc,datatables,C#,Jquery,Asp.net Mvc,Datatables,我们有一个DataTable,其中包含如下数据: <table class="display" id="invoiceTable"> <thead> <tr id="headingRow"> <th>Sys_InvoiceID</th> <th>Details</th> <th>Inc.In Turnove
<table class="display" id="invoiceTable">
<thead>
<tr id="headingRow">
<th>Sys_InvoiceID</th>
<th>Details</th>
<th>Inc.In Turnover</th>
<th>Status</th>
<th>Invoice No.</th>
<th>Invoice Date</th>
<th>Type</th>
<th>Supplier Invoice No.</th>
<th>Account Number</th>
<th>Supplier</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Details1</td>
<td>Yes</td>
<td>Issue</td>
<td>500</td>
<td>18/08/2016</td>
<td>Type1</td>
<td>111111</td>
<td>56565</td>
<td>SupplierID</td>
</tr>
</tbody>
</table>
C#方法如下所示:
$(document).ready(function(){
var table = $('#invoiceTable').DataTable({
dom: 'rti',
ajax: {
"url": filterDataLink,
},
serverSide: true,
"order": [[5, 'asc']],
searching: false,
paging: true,
scrollX: true,
scrollY: "75vh", //70% of the window height
processing: false,
ordering: true,
scroller: {
loadingIndicator: true,
displayBuffer: 20
}
});
});
public string FilterData(TableFilterItem tableFilterItem)
{
try
{
if (tableFilterItem.ColumnOrder == null || tableFilterItem.ColumnOrder.First() == null)
tableFilterItem.ColumnOrder = new List<ColumnOrder>();
SessionModel sessionModel = (SessionModel)Session["Filters"];
DataTableReturn output = _homeManager.ReturnDataTableSession(sessionModel, tableFilterItem);
Session["Filters"] = output.SessionModel;
return output.DataTable;
}
catch (Exception ex)
{
return "An error occurred, please try later! " + ex.Message;
}
}
public class TableFilterItem {
public TableFilterItem() {
}
public int Start { get; set; }
public int Length { get; set; }
public int Draw { get; set; }
public int order { get; set; }
}
我们在应用程序后面还有另一个AJAX调用,它调用C#方法来返回数据。当单击一列时,它会调用该方法,但我不知道该方法中应该包含哪些属性,这些属性将由DataTables填充,以便访问排序
编辑:它是初始化而不是初始化。我不是美国人。对于服务器端数据表,每个ajax调用都有很多参数,其中一个参数是:iSortCol\u 0:0。此处0表示在页面加载时维护索引的索引 当您单击其他列时,它将更改为:iSortCol\u 0:
1。因此,在服务器端脚本中,获取此索引并相应地维护索引 对于服务器端的datatable,每个ajax调用都有很多参数,其中一个参数是:iSortCol_0:0。此处0表示在页面加载时维护索引的索引 当您单击其他列时,它将更改为:iSortCol\u 0:
1。因此,在服务器端脚本中,获取此索引并相应地维护索引 我建议使用这个包,它是一个datatables模型绑定器,用于实现控制器 您的操作如下所示:
public ActionResult Get([ModelBinder(typeof(DataTablesBinder))] IDataTablesRequest requestModel)
{
IQueryable<asset> query = DbContext.Assets;
// Sorting
var sortedColumns = requestModel.Columns.GetSortedColumns();
var orderByString = String.Empty;
foreach (var column in sortedColumns)
{
orderByString += orderByString != String.Empty ? "," : "";
orderByString += (column.Data) + (column.SortDirection == Column.OrderDirection.Ascendant ? " asc" : " desc");
}
query = query.OrderBy(orderByString == string.Empty ? "BarCode asc" : orderByString);
var data = query.Select(asset => new
{
AssetID = asset.AssetID,
BarCode = asset.Barcode,
Manufacturer = asset.Manufacturer,
ModelNumber = asset.ModelNumber,
Building = asset.Building,
RoomNo = asset.RoomNo,
Quantity = asset.Quantity
}).ToList();
return Json(new DataTablesResponse(requestModel.Draw, data, filteredCount, totalCount), JsonRequestBehavior.AllowGet);
}
您可以看一看。我建议使用这个包,它是一个datatables模型绑定器,用于实现控制器 您的操作如下所示:
public ActionResult Get([ModelBinder(typeof(DataTablesBinder))] IDataTablesRequest requestModel)
{
IQueryable<asset> query = DbContext.Assets;
// Sorting
var sortedColumns = requestModel.Columns.GetSortedColumns();
var orderByString = String.Empty;
foreach (var column in sortedColumns)
{
orderByString += orderByString != String.Empty ? "," : "";
orderByString += (column.Data) + (column.SortDirection == Column.OrderDirection.Ascendant ? " asc" : " desc");
}
query = query.OrderBy(orderByString == string.Empty ? "BarCode asc" : orderByString);
var data = query.Select(asset => new
{
AssetID = asset.AssetID,
BarCode = asset.Barcode,
Manufacturer = asset.Manufacturer,
ModelNumber = asset.ModelNumber,
Building = asset.Building,
RoomNo = asset.RoomNo,
Quantity = asset.Quantity
}).ToList();
return Json(new DataTablesResponse(requestModel.Draw, data, filteredCount, totalCount), JsonRequestBehavior.AllowGet);
}
你可以看看。你的确切意思是什么?我如何使用服务器端数据表排序,如何将order by属性传递给我的控制器?看看:@EhsanSajjad嘿,这真的很有用。我们实际上是在用手穿过所有长度、图纸等。你能不能把你的评论作为一个答案,这样我就可以选择它,谢谢@AndrewKilburn很高兴这有帮助,我已经发布了答案您的确切意思是什么?我如何使用服务器端对数据表进行排序,如何将order by属性传递给我的控制器?看看:@EhsanSajjad嘿,这真的很有用。我们实际上是在用手穿过所有长度、图纸等。你能不能把你的评论作为一个答案,这样我就可以选择它,谢谢@AndrewKilburn很高兴这有帮助,我已经发布了答案