jqGrid が空の場合、グリッド内に単一の空の行を表示し、データがないという情報メッセージを表示したいと考えています。これはどのように可能ですか?ありがとう
8 に答える
これに対する答えを探していて、次の解決策を思いつきましたが、サーバーと話しているわけではないので、「loadComplete」イベント以外のものを使用する必要があります。「gridComplete」イベントにフックして、レコードがあるかどうかを確認しました。そうでない場合は空のテキストを表示し、そうでない場合は非表示にします。
jQuery('#test').jqGrid({
... // some settings
gridComplete: loadCompleteFunction,
emptyDataText:'There are no records. If you would like to add one, click the "Add New ..." button below.', // you can name this parameter whatever you want.
... // more settings
});
function LoadComplete()
{
if ($('test').getGridParam('records') == 0) // are there any records?
DisplayEmptyText(true);
else
DisplayEmptyText(false);
}
function DisplayEmptyText( display)
{
var grid = $('#test');
var emptyText = grid.getGridParam('emptyDataText'); // get the empty text
var container = grid.parents('.ui-jqgrid-view'); // find the grid's container
if (display) {
container.find('.ui-jqgrid-hdiv, .ui-jqgrid-bdiv').hide(); // hide the column headers and the cells below
container.find('.ui-jqgrid-titlebar').after('' + emptyText + ''); // insert the empty data text
}
else {
container.find('.ui-jqgrid-hdiv, .ui-jqgrid-bdiv').show(); // show the column headers
container.find('#EmptyData' + dataObject).remove(); // remove the empty data text
}
}
$('#grid').jqGrid({
loadComplete: function() {
if ($("#grid").getGridParam("records")==0) {
$("#grid").addRowData(
$("#grid")
.empty()
.append('<tr class="yourClass"><td>No records to display</td></tr>')
);
}
}
});
- json 配列に"rows":[]を設定します
成功時にエラーコンテナを次のように追加します
onLoadSuccess: function() { **var rows = $(this).datagrid("getRows");** if(rows.length == 0) { $("#errordiv").show(); $(".datagrid-view").append('<div class="errordiv" id="errordiv">Ur Message</div>'); } else $("#errordiv").hide(); }
ややこしいのは、メッセージを列全体に広げて表示することです。それを行う簡単な方法はないと思います。たとえば、最初の列を除くすべての列を非表示にし、最初の列の幅をグリッドに合わせて設定し、メッセージを最初の列に配置する必要があります。その後、リロードすると、すべて元に戻す必要があります。うまくいくはずですが、ちょっと面倒です。
ただし、メッセージを最初の列に入れ、残りを空のままにしたいとします。基本的に、「loadComplete」イベント関数を実装し、グリッドのコンテンツを操作します。
次のように、グリッド オブジェクトにプロパティを追加します。
//Various other grid properties...
loadComplete: function() {
if (jQuery("#grid_id").getGridParam("records")==0) {
jQuery("#grid_id").addRowData(
"blankRow", {"firstCol":"No data was found". "secondCol":"", "thirdCol":""
);
}
}
「#grid_id」はグリッド コンテナーの ID、「blankRow」は追加した新しい行に指定した任意の ID、「firstCol」、「secondCol」などは列の名前です。 .
これを実行し、グリッドで処理できるようにする最善の方法は、行のないデフォルトのパラメーターを返すことです。たとえば、JSONデータを使用しているので、これがリターンJSONになります。
{"d":"{"page":"1","total":"0","records":"0","rows":[]}"}
私はそれを次のように実装しました(ただし、これは提供されたページャー機能を使用していたという事実に依存します)。レコードが返されない場合に表示されるのは、キャプションバーと「表示するレコードがありません」を表示する1つのページャーバーだけです。
jqGridのデフォルトオプションを早期に設定したコードの抜粋(グリッドがページに読み込まれる前):
// jQuery jqGrid default options
$.extend($.jgrid.defaults, {
pager: '#gridPager',
emptyrecords: "No records to view", // Unnecessary (default in grid.locale-en.js)
recordpos: 'left',
recordtext: "Viewing {0} - {1} of {2}", // Overriding value in grid.locale-en.js
viewrecords: true
});
jqGridのロードからの私のコードの抜粋:
$('#grid').jqGrid({
loadComplete: function () {
// Hide column headers and top pager if no records were returned
if ($('#grid').getGridParam('records') === 0) {
$('#grid_toppager').hide(); // I used top & bottom pagers, so I hid one
$('.ui-jqgrid-htable').hide();
}
}
});
編集:この回答を参照することもできますデータが返されないときにjqgridを完全に非表示にするにはどうすればよいですか?そして、次の2つのいずれかを実行します。
1)メッセージを1つのdivに配置し、グリッドを別のdivに配置します。グリッドを非表示にしてメッセージを表示します。
2)グリッドのすぐ下のdivにメッセージを配置します。上記の私のアプローチに従いますが、すべてのポケットベル(1つだけではなく)を非表示にします。同じイベントハンドラーでdivを表示します。表示されるのは、キャプションバーとメッセージdivだけです。
メッセージをスタイル付きのdiv内に配置します:非表示。これをポケットベルdiv内に配置します。
loadCompleteイベントで、次のようにします。
if($('#results').getGridParam("records")==0) {
$("#noResultsDiv").show();
}
この質問は少し古いことは知っていますが、私にとってはこれでうまくいきました:
$('#tableid').jqGrid({
...
datatype: dataLoad,
...
})
function dataLoad(postdata, sid) {
var id = sid.replace('load_', '');
var result = loadDataFromServer('/my/server/url', postdata);
if (result) {
if (result.records > 0) {
var thegrid = $("#"+id)[0];
thegrid.addJSONData(result);
}
else
$("#"+id+" tbody")
.empty()
.append('<tr><td class="emptyDataMsg">This table is empty</td></tr>');
}
}
基本的に私がしていることは、サーバーからデータをロードし、いくつかのレコードを取得するかどうかを確認し、テーブル内のすべての行を空にするだけでなく、幅が 1 つの行だけをカスタム テキストで追加することです。いくつかの CSS を使用すると、結果は非常にきれいになります。
.emptyDataMsg {
background-color: #EEEEEE;
border-bottom: 1px solid #CCCCCC;
color: #666666;
font-size: 1.2em;
font-weight: bold;
padding: 5px;
text-align: center;
}