新しいウィンドウを表示するボタンをグリッドの各行に追加したいと考えています。この非常に豊富なコントロールには、この機能はありません。何かが欠けているに違いない
5 に答える
jqGridデモページからの1つの例を次に示します。
jQuery("#rowed2").jqGrid({
url:'server.php?q=3',
datatype: "json",
colNames:['Actions','Inv No','Date', 'Client', 'Amount','Tax','Total','Notes'],
colModel:[
{name:'act', index:'act', width:75,sortable:false},
{name:'id',index:'id', width:55},
{name:'invdate',index:'invdate', width:90, editable:true},
{name:'name',index:'name', width:100,editable:true},
{name:'amount',index:'amount', width:80, align:"right",editable:true},
{name:'tax',index:'tax', width:80, align:"right",editable:true},
{name:'total',index:'total', width:80,align:"right",editable:true},
{name:'note',index:'note', width:150, sortable:false,editable:true}
],
rowNum:10,
rowList:[10,20,30],
imgpath: gridimgpath,
pager: jQuery('#prowed2'),
sortname: 'id',
viewrecords: true,
sortorder: "desc",
gridComplete: function(){
var ids = jQuery("#rowed2").getDataIDs();
for(var i=0;i<ids.length;i++){
var cl = ids[i];
be = "<input style='height:22px;width:20px;' type='button' value='E' onclick=jQuery('#rowed2').editRow("+cl+"); ></ids>";
se = "<input style='height:22px;width:20px;' type='button' value='S' onclick=jQuery('#rowed2').saveRow("+cl+"); />";
ce = "<input style='height:22px;width:20px;' type='button' value='C' onclick=jQuery('#rowed2').restoreRow("+cl+"); />";
jQuery("#rowed2").setRowData(ids[i],{act:be+se+ce})
}
},
editurl: "server.php",
caption:"Custom edit " }
).navGrid("#prowed2",{edit:false,add:false,del:false});
カスタムフォーマッタを使用して行うこともできます。
現在の最高の回答は、カスタムボタンコードをloadComplete内に配置します。それはgridCompleteである必要があります。質問に回答してからAPIが変更された可能性があります。
colModel では、次のコードでフォーマッタを使用してフォーマットできます
formatter:function (cellvalue, options, rowObject) {
return "<input type='button' value='somevalue' onclick='some_function'\>";
}
この例は役に立つかもしれません。このwikiページとOleg からのこの回答を参照してください。
jqgrid を使用して連絡先のリストを表示しています。「役割」という名前の列があり、「定義」というボタンがあり、それをクリックして、その連絡先の役割をプライマリ、セカンダリ、セールス、またはその他として再定義できます。
元々、ボタン要素は XML 経由でグリッド セルに送信されていました。ここで、$rowid は行の ID でした (PHP):
<cell><![CDATA[<button data-idx='{$rowid}' class='contact_role_button btn' title='Define Role...'>Define</button>]]></cell>
autoencode: true
グリッドに設定するまで、これはうまくいきました。このオプションを true に設定すると、列は単純に html を表示していました。
クレイグの答えは同様の動作を示しましたが、それをわずかに変えるとうまくいきました。私は共有したいと思った:
gridcomplete: function() {
var ids = $grid.getDataIDs();
for (var i=0;i<ids.length;i++){
var cl = ids[i],
button = '<button data-idx="'+cl+'" class="contact_role_button btn" title="Define Role...">Define</button>';
if (cl.substr(0,2) !== "jq") {
$('#'+cl).find('td[aria-describedby="list_role"]').html(button);
}
}
}
つまり、setRowData メソッドは autoencode を true に設定すると機能しませんでしたが、Gridcomplete イベント内で必要に応じて DOM を操作できます。