2016-08-23 9 views
2

グリッドの列のチェック/非表示を制限したい。デフォルトのextjsグリッドで、beforeselectのイベントまたは設定を列メニューcheckboxesに適用したいとします。最大許容列が選択され、ユーザーが列をさらに確認しようとすると、エラーメッセージが表示されます。Extjsグリッド限界列の表示/非表示のチェック

私は、事前におかげで案内してください。

答えて

0

エラーメッセージがユーザーを迷惑にしているので、私はそのエラーメッセージの処理をしません。最大に達したとき、私はこのように、columnshowイベントに未チェックの列を無効になります。

var doCheckItems = function() { 
      var showncolumns = Ext.Array.sum(grid.headerCt.query("gridcolumn").map(function(column) {return column.isVisible()?1:0;})); 
      if(showncolumns >= 5) { 
       Ext.each(grid.headerCt.getMenu().query("menucheckitem"),function(item) { 
        if(!item.checked) item.disable(); 
       }) 
      } else { 
       Ext.each(grid.headerCt.getMenu().query("menucheckitem"),function(item) { 
        item.enable(); 
       }) 
      } 
     }; 

    grid.headerCt.on('columnshow',doCheckItems); 
    grid.headerCt.on('columnhide',doCheckItems); 

https://fiddle.sencha.com/#fiddle/1fkj

しかし、あなたはまだしたい場合、あなたはmenucheckitemsbeforecheckchangeイベントにバインドすることができます

var doCheckChange = function() { 
    var showncolumns = Ext.Array.sum(grid.headerCt.query("gridcolumn").map(function(column) {return column.isVisible()?1:0;})); 
    if(showncolumns >= 5) { 
     Ext.Msg.alert('Error','Too many columns checked'); 
     return false; 
    } 
}; 
Ext.each(grid.headerCt.getMenu().query("menucheckitem"),function(item) { 
    item.on('beforecheckchange', doCheckChange); 
}); 

https://fiddle.sencha.com/#fiddle/1fkl

+0

こんにちは、アレクサンダーに感謝します。 1番目のアプローチは完全に機能しますが、2番目を使用する必要があります。 2番目のアプローチでは、最大限に達した後でチェックボックスをオフにすることはできません。 –

関連する問題