Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用DataTables服务器端列排序?_C#_Jquery_Asp.net Mvc_Datatables - Fatal编程技术网

C# 如何使用DataTables服务器端列排序?

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

我们有一个DataTable,其中包含如下数据:

<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很高兴这有帮助,我已经发布了答案