2017-07-06 3 views
0

カスタム検索でデータを取得しようとしています。私のコードは正常に動作しますが、入力ボックスからいくつかのデータをフィルタリングしようとすると。プロセスは、立ち往生する。誰も私が忘れていることを教えてもらえますか?カスタム列を使用してサーバー側からデータを取得できません。DataTable Plugin

私のjQueryの

//this work fine retrieving data by only if i search using "Search box" 
var dataTableInstance = $("#dataTable").DataTable({ 
      bServerSide: true, 
      sAjaxSource: 'AccountingMovementsService.asmx/GetAccountingMovements', 
      "processing": true, 
      sServerMethod: 'POST', 
      columns: [ 
       { 
        'data': 'Payment' 
       }, 
       { 
        'data': 'Account', 
       }, 
       { 
        'data': 'customer', 
       } 
      ] 
     }); 


//here I make all input box under footer columns (work fine) 
$('#dataTable tfoot th').each(function() { 
      var title = $(this).text(); 

      $(this).html("<input type='text' placeholder='" + title + "' />"); 

     }); 


    //And here i get stuck processing ... and data not come 
    dataTableInstance.columns().every(function() { 
        var dataTableColumn = this; 
        $(this.footer()).find('input').on('keyup change', function() { 
         dataTableColumn.search(this.value).draw(); 
        }); 
       }); 

私は、サーバー側NOTを使用する場合は、すべての罰金

を働く私のC#コードは

[WebMethod] 
    public void GetAccountingMovements(int iDisplayLength, int iDisplayStart, int iSortCol_0, string sSortDir_0, string sSearch) 
    { 

     int displayLength = iDisplayLength; 
     int displayStart = iDisplayStart; 
     int sortCol = iSortCol_0; 
     string sortDir = sSortDir_0; 
     string search = sSearch; 
     int filteredCount = 0; 
     var accountingTransactions = new List<AccountMovement>(); 
     string cs = ConfigurationManager.ConnectionStrings["Sg4DevMaster"].ConnectionString; 
     using (SqlConnection conn = new SqlConnection(cs)) 
     { 
      SqlCommand cmd = new SqlCommand("spGetAccountingTransactions", conn); 
      cmd.CommandType = CommandType.StoredProcedure; 

      cmd.Parameters.Add(new SqlParameter 
      { 
       ParameterName = "DisplayLength", 
       Value = displayLength 
      }); 
      cmd.Parameters.Add(new SqlParameter 
      { 
       ParameterName = "DisplayStart", 
       Value = displayStart 
      }); 
      cmd.Parameters.Add(new SqlParameter 
      { 
       ParameterName = "SortCol", 
       Value = sortCol 
      }); 
      cmd.Parameters.Add(new SqlParameter 
      { 
       ParameterName = "SortDir", 
       Value = sortDir 
      }); 
      cmd.Parameters.Add(new SqlParameter 
      { 
       ParameterName = "Search", 
       Value = search 
      }); 

      conn.Open(); 
      SqlDataReader rdr = cmd.ExecuteReader(); 


      while (rdr.Read()) 
      { 
       AccountMovement am = new AccountMovement(); 

       filteredCount = Convert.ToInt32(rdr["totalCount"]); 
       am.payment = Convert.ToDouble(rdr["payment"]); 
       am.Account = Convert.ToDouble(rdr["account"]); 
       am.Customer = rdr["Customer"].ToString(); 

       accountingTransactions.Add(am); 

      } 

     } 

     var result = new 
     { 
      iTotalRecords = GetAccountingMovementsTotalCount(), 
      iTotalDisplayRecords = filteredCount, 
      aaData = accountingTransactions 
     }; 

     JavaScriptSerializer js = new JavaScriptSerializer(); 
     Context.Response.Write(js.Serialize(result)); 

    } 

に "メインの検索入力ボックス" を使用して、すべての作業罰金ですDataTableプラグインが、フッタに配置されたカスタム入力ボックスのいずれかにデータを入力するとスタックしません。

ありがとう!

+0

で始めるには、バージョン1.10以上で動作しない従来のDataTable構文を使用しています。 – Bindrid

+0

また、サーバーへの複数のトリップをトリガーしようとしていますが、「描画」パラメーターを実装していないため、DataTableは同期を維持します。 – Bindrid

答えて

0

私のGitHubに行くならば、https://github.com/bindrid/DataTablesServerSideを見てください。c#クラスを見てください。つまり、DataTableによって提供されるパラメータを使用して、それを使用可能なC#オブジェクトに変換します。

また、これらのクラスを使用するWebメソッドがあります。

以下は、検索対象を含むDataTablesロジックです。すべてが機能します。

 var table = $('#example').DataTable({ 
      "processing": true, 
      "serverSide": true, 
      "rowCallback": function (row, data) { 
       if ($.inArray(data.employeeId, selected) !== -1) { 
        table.row(row).select(); 
       } 
      }, 
      "infoCallback": function (settings, start, end, max, total, pre) { 
        var api = this.api(); 
       var pageInfo = api.page.info(); 
       return 'Page '+ (pageInfo.page+1) +' of '+ pageInfo.pages + "&nbsp;&nbsp;"; 
      }, 
      rowId:"employeeId", 
      "createdRow": function (row, data, dataIndex) {}, 
      "columns": [ 
       { "data": "name" }, 
       { "data": "position" }, 
       { "data": "office" }, 
       { "data": "extn" }, 
       { "data": "start_date" }, 
       { "data": "salary" } 
      ], 
      "select":"multi", 
      "lengthMenu": [5, [10, 15, 25, 50, -1], [5, 10, 15, 25, 50, "All"]], 
      "pageLength": 5, 
      "ajax": { 
       contentType: "application/json; charset=utf-8", 
       url: "wsSample.asmx/GetDTDataUnserializedObject", 
       type: "Post", 
       data: function (dtParms) { 
        // notice dtParameters exactly matches the web service 

        return JSON.stringify({ dtParameters: dtParms }); 
       }, 
       // Data filter is a part of ajax and lets you look at the raw 
       dataFilter: function (res) { 
        // You probably know by know that WebServices 
        // puts your data in an object call d. these two lines puts it 
        // in the form that DataTable expects 
        var parsed = JSON.parse(res); 

        return JSON.stringify(parsed.d); 
       }, 
       error: function (x, y) { 
        debugger; 
        console.log(x); 
       } 
      }, 
      order: [[0, 'asc']] 
     }); 

     // add search boxes to footer 
     $('#example tfoot th').each(function() { 
      var title = $(this).text(); 
      $(this).html("<input type='search' placeholder='" + title + "' />"); 
     }); 
     //And here i get stuck processing ... and data not come 
     table.columns().every(function() { 
      var dataTableColumn = this; 
      $(this.footer()).find('input').on('keyup change', function() { 
       dataTableColumn.search(this.value).draw(); 
      }); 
     }); 
+0

ありがとうございます。 Bindrid。私はあなたのgithubページを見ていきます。私の結果を投稿 –

+0

ありがとう、やっと私はできました。 –

関連する問題