1. 程式人生 > >extjs中grid中checkbox的用法,ext中grid獲取checkbox的值

extjs中grid中checkbox的用法,ext中grid獲取checkbox的值

轉自:http://blog.csdn.net/simaweier/article/details/8111923

grid每列前面加checkbox: (我用的而是第一種,後臺一個string陣列接受就可以了)

    一般的grid使用一個Ext.grid.ColumnModel就可以了,要加入一個多選的列,一種方法是加入一個多選列模板Ext.grid.CheckboxSelectionModel:
var sm = new Ext.grid.CheckboxSelectionModel();
var cm = new Ext.grid.ColumnModel([ sm, {
    id : 'company',
    header : "Company",
    width : 60,
    sortable : true,
    dataIndex : 'company'
}, ]);
    另外,例項化EditorGridPanel時還必須指定這個sm為selModel.
    如果不指定EditorGridPanel的selModel,將無法勾選checkbox。
grid = new Ext.grid.rGridPanel({
    id : 'editGridTestAjax',
    width : 700,
    height : 500,
    el : 'topic-grid',
    store : ds,
    cm : cm,
    clickToEdit : 2,// 雙擊後進入編輯狀態
    selModel : sm
// 這個 selModel 可簡寫為sm
});

獲取checkbox的值
function modfiy() {
    if (grid.getSelectionModel().hasSelection()) {
        var records = grid.getSelectionModel().getSelections();
        var mycars = new Array();
        for ( var i = 0; i < records.length; i++) {
            mycars[i] = records[i].data.xwbh;
        }
        alert(mycars.length);
        return mycars
    } else {
        alert('請選中要操作的記錄!');
    }
}


function deleteall() {
    var values = modfiy();
    Ext.MessageBox.confirm("請確認", "是否要刪除選中資訊", function(button, text) {
        if (button == 'yes') {
            Ext.Ajax.request({
                url : 'news_query.do',
                method : 'post',
                params : {
                    values : 'values'
                },
                success : function(req) {
                    var responseObj = Ext.util.JSON.decode(req.responseText);
                    if (responseObj.success == 'true') {
                        Ext.Msg.alert("成功提示", responseObj.infor);
                    } else {
                        Ext.Msg.alert("錯誤提示", responseObj.infor);
                        return;
                    }
                }
            });
        } else {
            return;
        }
    });
}    
    
grid.getSelectionModel().on('rowselect', function(sm, rowIdx, r) {
    alert('勾選了checkbox後,獲得選中行的name:' + grid.store.getAt(rowIdx).get('name'));
});
// 處理checkbox的取消勾選事件
grid.getSelectionModel().on(
        'rowdeselect',
        function(sm, rowIdx, r) {
            alert('取消勾選checkbox後,獲得的record 中的name:'
                    + grid.store.getAt(rowIdx).get('name'));
        });
// 另一種方法是在ColumnModel中自己寫一個checkbox列
function changeCheck(value, cellmeta, record, rowIndex, columnIndex, store) {
    return "<input type='checkbox' name='adds_checkbox' onclick=oneclick(this) id='adds_checkbox_'"
            + value + "></input>";
}
// 上面的oneclick方法定義在Ext.onReady()外面
var cm = new Ext.grid.ColumnModel(
        [

        {// 自定義的多選列
            header : "<input id='allcheckbox' type='checkbox' onclick=checkall(this)></input>",
            dataIndex : 'addsid',
            renderer : changeCheck,
            width : 20,
            sortable : false
        } ]

);


亦或這樣寫:

我在用到這部分知識的時候是這樣寫的:

var sm = new Ext.grid.CheckboxSelectionModel({

    // singleSelect: true,

    listeners : {

        // 選中

        'rowselect' : function(grid, rowIndex, e) {

            // 使用這種方法會在先點選最後一組資料的時候報錯

            // var row=grid.getSelections();

            // var val=row[rowIndex].get('id');

            var grid = Ext.getCmp('shopGrid');

            var val = grid.getStore().getAt(rowIndex).get('id');

            sendUsersId.push(val);// 存放使用者id

            // alert(sendUsersId.toString());

        },

        // 取消選中

        'rowdeselect' : function(grid, rowIndex, e) {

            var grid = Ext.getCmp('shopGrid');

            var val = grid.getStore().getAt(rowIndex).get('id');

            sendUsersId.remove(val);// 移除使用者id

            // alert(sendUsersId.toString());

        }

    }

});