0

注文のリストにExt GroupingStoreがあります。列の 1 つは DateTime です。ユーザーが DateTime 列でグループ化し、すべての日を 1 つのグループにまとめられるようにしたいと考えています。現時点では、日付、時、分、秒のそれぞれが 1 つのグループです...あまり役に立ちません :-)

これを達成するには、2 つの列が足りませんか?

4

5 に答える 5

2

これを実現するために、GroupingViewメソッドを変更できます。

まず、GroupingViewオブジェクトを作成します。

var gview = new Ext.grid.GroupingView({
        forceFit: true,
        groupTextTpl: '{text} ({[values.rs.length]} {[values.rs.length > 1 ? "Items" : "Item"]})'
    });

次に、(実際には「プライベート」)メソッドを変更します。

gview.getGroup = function(v, r, groupRenderer, rowIndex, colIndex, ds){
    // colIndex of your date column
if (colIndex == 2) {
            // group only by date
    return v.format('m.d.Y');
}
    else {
 // default grouping
     var g = groupRenderer ? groupRenderer(v, {}, r, rowIndex, colIndex, ds) : String(v);
     if(g === ''){
         g = this.cm.config[colIndex].emptyGroupText || this.emptyGroupText;
     }
     return g;
    }
};

次に、ビューをグリッドに適用します。

var grid = new Ext.grid.GridPanel({
 ...
 view: gview,
 ...
});

ええと、概念実証が少しあります([並べ替え]の[最終更新日]をクリックしてください)

デモ

于 2009-08-05T01:02:11.667 に答える
1

Tarnschafの答えは正しかった、私は完全を期すために彼のコードの最終的な修正バージョンを投稿すると思った。これが私がやった方法です。Tarnschafに感謝します!

g.view.getGroup = g.view.getGroup.wrap(function(normal,v, r, groupRenderer, rowIndex, colIndex, ds)
{
    var cm = g.getColumnModel();
    var id=cm.getColumnId(colIndex);
    var col=cm.getColumnById(id);

    if(col.renderer == formatDateTime)
    {
        v = (new Date(v)).format('m/d/yy');
        groupRenderer = formatDate;
    }

    return normal(v, r, groupRenderer, rowIndex, colIndex, ds);
});

ここgで、GridViewはです。を使用g.view.getGroup.wrapすることで、前の関数をそのまま維持し、Tarnschafの回答のようにパラメーターを変更するだけでよいことがわかりました。また、このメソッドは、列が並べ替えられている場合でも機能しますcolIndex。ハードコーディングされていません。さらに、formatDateTime(日付/時刻の書式設定機能)のレンダラーを持つすべての列に自動的に適用され、formatDategroupRendererに切り替えられます。見出しがきれいに見えます。

于 2009-08-05T16:40:24.007 に答える
1

ストアのレコードタイプを定義するときに、日付形式を指定できると思います。それはあなたの問題を解決するかもしれません。

何かのようなもの

    var reader = new Ext.data.JsonReader(
    fields:[{
        type: 'date',
        dateformat: 'd M Y'
    },{
        .............
        ..............
    },
    .............
    .............
    ]
)

var store = new Ext.data.Store({
    reader: reader,
    data: []
})
于 2009-08-05T00:55:54.043 に答える
0

Do you actually need to reference the time part of the date? If not, you could use a convert function on the field to call clearTime() on the date object.

于 2009-08-05T00:44:16.370 に答える
-1

グリッド列の定義で、構成を定義しますgroupRenderer

{
  groupRenderer : function(v, u, r, row, col, store) {                        
     return //your custom group value
   }
}
于 2015-10-13T11:19:14.443 に答える