2016-08-03 1 views
0

剣道グリッドを持ち、複数の列(「状態」列)が複数のフィルターに設定されています。中間層では、この方法でサーバーサイドページングを実装するために、指定されたページサイズとページでデータを取得するAPIを呼び出します。剣道グリッドフィルターの複数値を取得する方法サーバー側のページングを実装するときに複数のチェックボックスを使用する

ただし、フィルタの複数チェックボックスには、1ページ内の値しか含まれていないという問題があります。たとえば、apiは一度に最大1000個のレコードを返すことができます。フィルタの複数のチェックボックスは、この1000個のレコードにあるアイテムのみを表示します。たとえば、「遅延」、「保留中」、「処理済」の3つのステータスがあります。最初の1000レコードには「遅延」ステータスしかありません。その後、グリッドでは、マルチチェックフィルターボックスには1つのステータスオプション - 「遅延」のみが表示されます。

どのように3つのステータスを表示できますか?たぶん私はすべてのステータスを返すために別のAPIを作成することができますが、どのようにすべてのステータスを表示するようにデータソースを変更するには?

以下はコードスナップです。

UI:

@(Html.Kendo().Grid<ExceptionsPerGroup>() 
       .Name("gridBatchDetail") 
       .Columns(columns => 
       { 
        columns 
         .Bound(p => p.SnapshotHeader_Account_AccountNumber) 
         .Filterable(pfs => pfs.Extra(false)) 
         .Title("LOAN NUMBER"); 
        columns 
         .Bound(p => p.Borrower_BorrowerName_FullNameToBeParsed) 
         .Filterable(pfs => pfs.Extra(false)) 
         .Title("BORROWER NAME"); 
        columns 
         .Bound(p => p.PaymentHeader_ReportedPaymentAmount) 
         .Title("PAYMENT AMOUNT").Format("{0:C}"); 
        columns 
         .Bound(p => p.CurrentStatus_PaymentStatus) 
         .Filterable(fs => fs.Multi(true)) 
         .Title("STATUS"); 
        columns 
         .Bound(p => p.CurrentExceptionTypeCode) 
         .Filterable(fs => fs.Multi(true)) 
         .Title("EXCEPTION REASON"); 
        columns 
         .Bound(p => p.CurrentStatus_CurrentAssignee) 
         .Filterable(pfs => pfs.Multi(true)) 
         .Title("ASSIGNED TO"); 
       }) 
       .Pageable() 
       .Sortable() 
       .Filterable(pfs => pfs 
          .Operators(o => o.ForString(s => s.Clear() 
           .Contains("Contains") 
           ))) 
       .DataSource(dataSource => dataSource 
        .Ajax() 
        .ServerOperation(true) 
        .PageSize(20) 
        .Read(read => read.Action("GetPaymentsList", "FileSummary").Data("getURLString")) 
      ) 
       .ClientDetailTemplateId("batchDetailsTemplate") 
      ) 

コントローラー:

public JsonResult GetPaymentsList([DataSourceRequest]DataSourceRequest request, string uri) 
    { 
     try 
     { 
      var myUri = new Uri(uri); 
      var fileKeyString = HttpUtility.ParseQueryString(myUri.Query).Get("fileKey"); 
      var batchKeyString = HttpUtility.ParseQueryString(myUri.Query).Get("batchKey"); 

      Guid? fileKey = new Guid(fileKeyString); 
      Guid? batchKey = new Guid(batchKeyString); 

      var fileBatchPaymentTransactionsResponse = ApiHelper.GetBatchDetailByFileKeyAndBatchKey(fileKey, batchKey, request.PageSize, request.Page, request); 
      List<ExceptionsPerGroup> listOfPayments = null; 
      if (fileBatchPaymentTransactionsResponse.ListResults != null) 
      { 
       listOfPayments = DataMapper.MapperPaymentTransactionDataToExceptionsPerGroupsModel(fileBatchPaymentTransactionsResponse.ListResults); 
      } 

      var result = new DataSourceResult() 
      { 
       Data = listOfPayments, 
       Total = (int)fileBatchPaymentTransactionsResponse.TotalRecords 
      }; 

      return Json(result); 
     } 
     catch (Exception ex) 
     { 
      logger.LogMessage("FileSummary/GetPaymentsList", EnumLogLevel.Severe, "EXCEPTION:", ex); 
     } 
     return null; 
    } 

答えて

0

私はこのハンドラでは、FilerMenuInitイベントハンドラを追加することで、この問題を解決するためのAJAXすべてのステータス値を取得するメソッドを呼び出します。

UI:

@(Html.Kendo().Grid<ExceptionsPerGroup>() 
       .Name("gridBatchDetail") 
       .Events(e=>e.FilterMenuInit("InitFilterMenu"))//add this event 
       .Columns(columns => 
.... 
<script type="text/javascript"> 
function InitFilterMenu(e) { 
    if (e.field === "CurrentStatus_PaymentStatus") { 
     var filterMultiCheck = this.thead.find("[data-field=" + e.field + "]").data("kendoFilterMultiCheck"); 

     var url = '@Url.Action("GetStatusListForGrid", "FileSummary")'; 
     $.getJSON(url, { }, function (result, status, xhr) { 

      filterMultiCheck.container.empty();    
      filterMultiCheck.checkSource.data(result); 
      filterMultiCheck.createCheckBoxes(); 
     }); 

    } 
} 

関連する問題