2015年4月4日土曜日

jqgridのeditoptionsでは、勝手にソートされてしまう

Jqgridを使って、各種データの設定がやりやすくはなっているが、ひとつ問題が出てきた。
ResultSet rs2= stmt2.executeQuery("SELECT * FROM shokuin"); 
....
 jQuery("#list").jqGrid({
        data: mydata,
        datatype: "local",
        colNames:['ID', 'グループ名', 'メンバー'],
        // 編集可能にするセルを editable:true にします。
        colModel:[
            {index:'num', name:'num', width:50 },
            {index:'name', name:'name', width:200, editable:true },
            {index:'member', name:'member', width:250,  editable:true ,edittype:'select' ,
            editoptions:{multiple:true,value:{
            <% int cou2=0;
            while(rs2.next()){ if(cou2==0) { %>
              <%=rs2.getString("id")%>:'<%=rs2.getString("name")%>'
<% } else { %>
,<%=rs2.getString("id")%>:'<%=rs2.getString("name")%>'
<% }
cou2=cou2+1; }
stmt2.close();
            %>
            }}},
        ],
.....
といった、具合に、グループのメンバーの登録に使ってきたが、rs2は、id順に勝手にソートされてしまうことに気づいた。ソートはidではなく、別に用意したsidという表示順を指定するための番号でソートしたいのだが、それができない。
 毎年、人の入れ替えで転入者にidが振られるが、そのidの順番で並べて表示するのでなく
sidで並べて表示したいと思い、SQL文にorder by sidを追加してが、だめなのである。
http://www.trirand.com/blog/?page_id=393/discussion/edittype-select-and-editoptions-value-default-sorting
ネットでは唯一上記のリンクに少しヒントらしきものはあったが、どうやら、dataUrlというものを指定して、別のサーブレットから指定した順序にソートしたものを読み出すとよいようだ。
そこで、editoptions以下の部分をこんなふうに書き換えたらなんとか、動作させることができた。
            editoptions:{value:"",multiple:true,dataUrl:'editoption'}
サーブレットのeditoptionは、<select>の要素を返すようにするとよいようだ。ただ、注意しなければならないのは、LFが入ってしまうので、これをreplaceAll("\\n","")などを使って、データベースに保存する前に削除する必要がある。なかなか、細かいところで、調整が必要である。もう少しスマートな方法がありそうだが。


0 件のコメント:

コメントを投稿