2017-05-12 3 views
0

グリッドのフィールドがダイナミクスでデータバインドイベントの前にフィールドを知る機会がないため、剣道グリッドがありません。 例:剣道グリッドデータ列の動的列タイトルを変更

var dataSource = new kendo.data.DataSource({ 
    type: "aspnetmvc-ajax", 
    transport: { 
     read: { 
      url: appPath + "Controller/GetGridData", 
      dataType: "json", 
      type: "POST", 
      data: { 
       dataSourceID: dataSourceId 
      } 
     }, 
    }, 
    schema: { data: "data", total: "total"}, 
    pageSize: 10, 
    serverSorting: true, 
    serverPaging: true, 
    serverFiltering: true, 
}); 

$("#grid").kendoGrid({ 
     dataSource: dataSource, 
     filterable: { 
      extra: false 
     }, 
     dataBound: function (data) { 

     }, 
     pageable: { 
      pageSizes: true, 
      pageSizes: [10, 20, 50, 100] 
     } 
)} 

は、動的データバインドさイベントやデータがロードされた後が、ユーザーにそれを表示する前に列ヘッダを変更する方法はありますか?私は剣道のデータソースを使用している。この例では

+0

これまでにどのくらい行くのですか?つまり、組み込みの方法では不可能だと思いますが、グリッド外のリクエストを扱うことはできますが、これはあまりうまくいかないことです。これは、オプション(カラム定義を含む)を変更する唯一の方法は 'setOptions'であり、そのメソッドはウィジェット全体を再作成するため、イベント内では呼び出せないからです。 – DontVoteMeDown

+0

javascriptでヘッダの翻訳を実装するためにカラムのタイトルを変更する必要があります。私は可能な方法は、グリッドが構築された後に私のコードを置くことだと思う。私は、グリッドが構築され、境界があるときを知る方法があるかどうかはわかりません。 – Maka

+0

問題は、作成した後に 'setOptions'を呼び出すと、再作成して新しいリクエストをサーバーに再び開きます。おそらく考えられる方法は、グリッドの外側で' $ .ajax'を使ってリクエストすることです。 – DontVoteMeDown

答えて

1

を助けるかもしれない(後に多くの前後にTelerikによって、トラブルシューティングのメッセージを腹立たしい)、その後に基づいて、列名を決定AJAX呼び出しを介してgridを初期化する前にデータを要求することにより、データ。正確に100%のダイナミックそれはAJAX呼び出しと私の知る限り(Telerikで前後にチャットした後)から取得した値に基づいて、列名を変更します、真に動的な列は、グリッドコントロールによってサポートされていない未

$.ajax({ 
    type: "POST", 
    url: "/Controller/GetGridData", 
     // *Important* stringify the server-bound object 
     data: JSON.stringify(dataSourceId), 
     dataType: "json", 
     contentType: "application/json", 
     async: true, 
     success: function(response) { 
      // response contains data required for grid datasource 
      ConstructGrid(response); 
     } 
    }); 

function ConstructGrid(gridData) { 
    var dataSource = new kendo.data.DataSource({ 
     ... attributes 
     data: gridData, 
     ... more attributes 
    }); 
    var columnsArray = []; 
    if(gridData.attributeToCheck = "someValue") { 
     columnsArray.push({field: attributeEqualToSomeValue, title="attributeMatchingSomeValue"}); 
    } 
    else { 
     columnsArray.push({field: attributeNotEqualToSomeValue, title="attributeNotMatchingSomeValue"}); 
    } 
    .. continue to add more columns based on data then initialise grid 
    $("#grid").kendoGrid({ 
     dataSource: dataSource, 
     filterable: { 
      extra: false 
     }, 
     columns: columnsArray, 
     pageable: { 
      pageSizes: true, 
      pageSizes: [10, 20, 50, 100] 
     } 
    )}; 
} 

+0

ありがとう、良い解決策。私の問題では、サーバー側でDataTableの列名を変換する方が良いと思います。 – Maka

0

チェックこのJsbin

`https://output.jsbin.com/lesoxes/` 

コンソールですべての列の詳細を取得します。

は、私が「ダイナミック」列のヘッダーを達成あなたに

+0

OPは「動的列のタイトルを変更したい」と思っています。列配列にアクセスできたら、これを行う方法があるかどうか知っていますか? – Sandman

関連する問題