PDA

View Full Version : チェックボックス付きグリッドパネルのsubmitについて



tomof
16 Mar 2009, 9:03 PM
チェックボックス付きグリッドパネルから、チェックボックスされた値の情報をsubmitしてサーバに送りたいのですが、その方法が分かりません。

下記のようなフォームオブジェクトを作成後、別オブジェクトのイベントから「hogeForm.getForm().submit();」でサーバにデータを送り、サーバ側で全てのget,post値を取得&Dumpしてみたのですが、Nameの値は取得できましたが、グリッドのチェックボックスの値は取得できませんでした。



var sm = new Ext.grid.CheckboxSelectionModel({singleSelect:false});


var cm= new Ext.grid.ColumnModel([
sm
,{header: "Item" , width: 50 ,sortable: true, dataIndex: "item", id:'prvlg'}
,{header: "Group" , width: 50 ,sortable: true, dataIndex: "group"}
]);


var hogeForm = new Ext.FormPanel({
id: 'form'
,frame: true
,title: 'Create Domain'
,labelAlign: 'left'
,bodyStyle: 'padding:5px'
,width: 385
,layout: 'fit'
,items: [{
xtype: 'fieldset'
,labelWidth: 120
,border: false
,items: [{
fieldLabel: 'Name'
,xtype: 'textfield'
,name: 'name'
,allowBlank: false
,vtype: 'alphanum'
},{
xtype: 'editorgrid',
border: true,
frame: true,
ds: ds,
cm: cm,
sm: sm,
view:vw
}]
}]
}
]
});
グリッドチェックボックスの値はsubmit前にループしてhiddenに値を入れるなどの対応が必要なのでしょうか?
よろしくお願いします。

yuki
17 Mar 2009, 4:25 PM
Firebugとかで見ると分かりますが、CheckboxSelectionModelのチェックボックスは単なるdivタグだったりします。:D

なので、フォームの送信では送れないので、CheckBoxSelectionModelのgetSlectionsメソッドを使って選択されているレコードを送信前に取得してあげる必要がありますね。

tomof
17 Mar 2009, 5:12 PM
そうですよね。submitする用途では作られていないようですね。
で、いろいろ考えてみたんですがCheckBoxSelectionModelを使わずに、
rendererに下記のような指定をした列を作ってみるといいんじゃないかと思いました。



renderer:function(){return '<input type="checkbox" name="' + insert_an_id_here + '" />'}
いろいろ検索をしていて、こちらのスレッドで発見したんですけどね。:))
http://extjs.com/forum/showthread.php?t=3053


もう少しいじってみて、その後の報告もしたいと思います。

tomof
25 Mar 2009, 3:50 AM
いろいろ悩みましたが、結局下記の方法に落ち着きました。



renderer:function(){return '<input type="checkbox" name="' + insert_an_id_here + '" />'}


submitで値を受け取ることもできました。若干、邪道な気もしますが…:-?
それと余談ですが、Firefoxでは問題ありませんがIE7ではcheckboxを含んだグリッドは少し不格好に
なってしまうのでスタイルシートに下記のような指定をするとよいと思います。



input[type=checkbox],input[type=radio] {
margin: 0;
padding: 0;
height: 11px;
width: 11px;
vertical-align: middle;
}


おそらく、heightとwidthの指定で事足りてるかと。
他のブラウザは見てません…。