jQuery Datatables 使用 WCF 进行服务器端处理

本文关键字:服务器端 处理 WCF Datatables 使用 jQuery | 更新日期: 2023-09-27 18:33:01

我是Datatables服务器端处理的新手,我没有找到合适的示例或示例代码来使用wcf服务进行服务器端处理。

我正在尝试使用 jQuery 数据表 (datatables.net( 连接到 WCF 服务以获取数据的服务器端处理。

我已经使用 iDisplayStart 和 iDisplayLength(我作为 wcf 方法的参数获得(实现了分页,以构造 sql 查询(在 wcf 方法中(以限制要显示的记录数量。

现在,问题是如何在 wcf 方法中实现搜索和排序。为此,我需要单击哪一列进行排序,以及显示哪些列来构造 sql WHERE 子句。

在这里,我的方法是基于前端的数据表构造 sql 查询。这是使用 wcf 完成数据表服务器端处理的方法吗?

如果问题的任何部分不清楚,请发表评论。

以下是前端代码

脚本

    $(document).ready(function () {
        $('#example').dataTable({
            "aoColumns": [
                { "sTitle": "#",            "sName": "ID",      "mData": "ID"},
                { "sTitle": "PIN Number",   "sName": "PIN",     "mData": "PIN" },
                { "sTitle": "Amount (Rs.)", "sName": "Amount",  "mData": "Amount" }
            ],
            "sPaginationType": "full_numbers",
            "bJQueryUI": true,
            "bSort": true,
            "bProcessing": true,
            "bServerSide": true,
            "bAutoWidth": true,
            "sAjaxSource": "http://localhost:61216/datatabletestservice.svc/gettable",
            "fnServerData": function (sSource, aoData, fnCallback) {
                $.ajax({
                    "datatType": 'json',
                    "contentType": 'application/json',
                    "url": sSource,
                    "data": aoData,
                    "success": function (msg) {
                        var json = $.parseJSON(msg);
                        fnCallback(json);
                    }
                })
            },
        });
    });
</script>

身体

<body>
<form id="form1" runat="server">
    <div>
        <table id="example" width="100%">
            <thead>
            </thead>
            <tbody>
            </tbody>
        </table>
    </div>
</form>
</body>

WCF 方法(后端(

public string GetTable(int iDisplayStart, int iDisplayLength, string sSearch, bool bEscapeRegex, int iColumns, int iSortingCols, int iSortCol_0, string sSortDir_0, int sEcho)
    {
        string query;
        DataTable dt;
        DateTime t1 = DateTime.Now;
        string connectionstring = "server=my_server;database=my_db;uid=myuser;password=mypassword;";
        query = "SELECT SQL_CALC_FOUND_ROWS * FROM voucher LIMIT " + iDisplayStart + ", " + iDisplayLength;
        dt = MySqlHelper.ExecuteDatatable(connectionstring, query);
        int totalRows = Convert.ToInt32(MySqlHelper.ExecuteScalar(connectionstring, "SELECT FOUND_ROWS()"));
        string jsonString = JsonUtils.GetPlainJsonDataByDataTable(dt);
        var result = JsonUtils.GetObjectFromJson<dynamic>(jsonString);
        string test =  "{" +
                    "'"sEcho'": '"" + sEcho + "'", " +
                    "'"iTotalRecords'": '"" + totalRows + "'", " +
                    "'"iTotalDisplayRecords'": '"" + totalRows + "'", " +
                    "'"aaData'": " + result +
                "}";
        return test;
    }

jQuery Datatables 使用 WCF 进行服务器端处理

当请求从 DataTable 传入时,参数 iSortCol_0 包含正在排序的列的索引,参数 sSortDir_0 指定排序方向(升序、降序(。

如下所述:http://rantdriven.com/post/Using-Datatablesnet-JQuery-Plug-in-with-WCF-Services.aspx

编辑

可以使用 iSortCol_0 整数并将其传递到 sql 查询顺序 by 子句中。这称为按序数排序,大多数数据库引擎都支持。如果iSortCol_0从零开始,则需要在传入之前向其添加 1。

$('#example').dataTable({            
        "bSort": true,
        "bProcessing": true,
        "bServerSide": true,
        "bAutoWidth": true,
        "lengthMenu": [[5, 10,-1], [5, 10, "All"]],
        "sAjaxSource": "http://------/Service1.svc/gettable",
        "fnServerData": function (sSource, aoData, fnCallback) {
            var tblid = { name: "tblId", value: "test" };//pass extra param
            aoData.push(tblid);
            $.ajax({
                "datatType": 'json',
                "contentType": 'application/json',
                "url": sSource,
                "data": aoData,
                "success": function (msg) {
                    var json = $.parseJSON(msg);
                    fnCallback(json);
                }
            })
        },
    });
WCF : 
[OperationContract]
  [WebInvoke(ResponseFormat = WebMessageFormat.Json, BodyStyle =         WebMessageBodyStyle.WrappedRequest, Method = "GET")]
        string GetTable(int iDisplayStart,
            int iDisplayLength,
            string sSearch,
            bool bEscapeRegex,
            int iColumns,
            int iSortingCols,
            int iSortCol_0,
            string sSortDir_0,
            int sEcho,
            int webSiteId,
            int categoryId, string tblId);



public string GetTable(int iDisplayStart, int iDisplayLength, string sSearch, bool bEscapeRegex,
     int iColumns,int iSortingCols,int iSortCol_0,string sSortDir_0,int sEcho,int webSiteId,int categoryIdm,string tblId)
    {
        List<object[]> items = new List<object[]>();
        using (SqlConnection con = new SqlConnection(@"connection"))
        {
            using (SqlCommand cmd = new SqlCommand("DT_TEST", con))
            {
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@iDisplayStart", SqlDbType.Int).Value = iDisplayStart;
                cmd.Parameters.Add("@iDisplayLength", SqlDbType.Int).Value = iDisplayLength;
                cmd.Parameters.Add("@sSearch", SqlDbType.VarChar).Value = sSearch;
                cmd.Parameters.Add("@bEscapeRegex", SqlDbType.Bit).Value = bEscapeRegex;
                cmd.Parameters.Add("@iColumns", SqlDbType.Int).Value = iColumns;
                cmd.Parameters.Add("@iSortingCols", SqlDbType.Int).Value = iSortingCols;
                cmd.Parameters.Add("@iSortCol_0", SqlDbType.Int).Value = iSortCol_0;
                cmd.Parameters.Add("@sSortDir_0", SqlDbType.VarChar).Value = sSortDir_0;
                cmd.Parameters.Add("@sEcho", SqlDbType.Int).Value = sEcho;
                cmd.Parameters.Add("@webSiteId", SqlDbType.Int).Value = webSiteId;
                cmd.Parameters.Add("@categoryIdm", SqlDbType.Int).Value = categoryIdm;
                cmd.Parameters.Add("@tblId", SqlDbType.VarChar).Value = tblId;
                con.Open();
                SqlDataReader rdr = cmd.ExecuteReader();
                while (rdr.Read())
                {
                    List<object> rowitem = new List<object>();
                    rowitem.Add(rdr.GetString(1));
                    rowitem.Add(rdr.GetString(2));
                    rowitem.Add(rdr.GetSqlDateTime(3).ToString());
                    items.Add(rowitem.ToArray());
                }
            }
        }
        JavaScriptSerializer serialiser = new JavaScriptSerializer();
        var result = items.ToArray();
        return serialiser.Serialize(new
        {
            sEcho,
            iTotalRecords = counr,
            iTotalDisplayRecords = count,
            aaData = result
        });
    }

以另一种方式引用