0

jquery 1.6.2.mins と最新の jqGrid - jqGrid 4.5.4 を使用して jqGrid を表示しようとしています。

私のプロジェクトのセットアップは次のとおりです。ASP.NET - Visual Studio 2010 を使用した MVC2。フレームワークは .Net 4.0 です。

問題: 私の C# クラスでは、ある時点で使用するデータベースからすべての行を追加しています。最初に 2 つの行を表示したいだけです ( NAME, DESCRIPTION)。

jqGrid には 2 つの行が表示されますが、[説明] 列に表示されるものを表示する必要がある最初の行に私の ID の行が表示されます。基本的に何が起こっているかというと、行が右にシフトされており、列のマッピングが機能していません。 NAME = 'NAME_TXT'、しかし、何らかの理由で、ディスプレイに表示されるのはNAME = ID;

colNames: ['NAME', 'DESCRIPTION'],
colModel: [
    { name: 'NAME', index: 'NAME_TXT', align: 'left' },
    { name: 'DESCRIPTION', index: 'DESCRIPTION_TXT', align: 'left'}
],

また、JSON データが C# コードから返されたものをすべて表示するにはどうすればよいか、 でオブジェクトを表示するにはどうすればよいかなども知りたいconsole.log("JSON DATATYPE: " + $datatype)です。

ありがとうございました。

JavaScript コード:

$(function () {
    $grid = $("#grid");

    $grid.jqGrid({
        type: 'GET',
        contentType: "application/json; charset=utf-8",
        url: '/csc/devapp1/Home/LinqGridData/',
        datatype: 'json',
        colNames: ['NAME', 'DESCRIPTION'],
        colModel: [
            { name: 'NAME', index: 'NAME_TXT', align: 'left' },
            { name: 'DESCRIPTION', index: 'DESCRIPTION_TXT', align: 'left'}],    
        sortname: 'NAME_TXT',
        sortorder: "desc",
        repeatitems: false,
        viewrecords: true,
        height: '500px',
        autowidth: true});
});

C# コード:

public ActionResult LinqGridData(string sidx, string sord, int page, int rows)
{
    var context = new CSCEntities();

    var jsonData = new
    {
        total = 1,
        page = page,
        records = context.tbl_Quickfix_Toolbar.Count(),
        rows = context.tbl_Quickfix_Toolbar.AsEnumerable().Select(n =>
            new { n.QUICKFIX_ID, 
                cell = new string[] { 
                    n.QUICKFIX_ID.ToString(), 
                    n.NAME_TXT.ToString(), 
                    n.DESCRIPTION_TXT.ToString(), 
                    n.INSTRUCTIONS_TXT.ToString(),
                    n.TYPE_TXT.ToString(),
                    n.FIXLINK_TXT.ToString()} 
            }).ToArray()
    };
    return Json(jsonData, JsonRequestBehavior.AllowGet);
}

私が過去に試した他の C# コードは動作しませんでした:

public ActionResult GridData(string sidx, string sord, int page, int rows)
    {
        CSCEntities entities = new CSCEntities();
        int pageIndex = Convert.ToInt32(page) - 1;
        int pageSize = rows;
        int totalRecords = entities.tbl_Quickfix_Toolbar.Count();
        int totalPages = (int)Math.Ceiling((float)totalRecords / (float)pageSize);

        var jsonData = new {
            total = totalPages,
            page = page,
            records = totalRecords,

            rows = (
                from entity in entities.tbl_Quickfix_Toolbar

                select new {
                    id = entity.QUICKFIX_ID,
                    cell = new string[] {

                        entity.NAME_TXT.ToString(),
                        entity.DESCRIPTION_TXT.ToString(), 
                        entity.QUICKFIX_ID.ToString(),
                        entity.INSTRUCTIONS_TXT.ToString() }
                    }).ToArray()
        };
        return Json(jsonData, JsonRequestBehavior.AllowGet);
    }
4

1 に答える 1

1

あなたが投稿したコードには、クライアント側とサーバー側の両方で多くの問題があります。問題の一部だけを紹介します。

主な問題は、使用するサーバー コードにあります。サーバーコードで現在使用している

...
new { n.QUICKFIX_ID, 
    cell = new string[] { 
        n.QUICKFIX_ID.ToString(), 
        n.NAME_TXT.ToString(), 
        n.DESCRIPTION_TXT.ToString(), 
        n.INSTRUCTIONS_TXT.ToString(),
        n.TYPE_TXT.ToString(),
        n.FIXLINK_TXT.ToString()} 
}
...

に変更する必要があるようです

...
new {
    id = n.QUICKFIX_ID, 
    cell = new [] { 
        n.NAME_TXT.ToString(), 
        n.DESCRIPTION_TXT.ToString()
    }
}
...

さらに、適用後に削除.AsEnumerable()または移動することを検討する必要selectがあります。

まず第一に、indexプロパティはサーバー側の並べ替えでは意味を持ちません。sidxあなたが投稿したサーバーコードは、sordパラメータを使用しません。したがって、 からすべてのプロパティを削除する必要があります。プロパティが指定されていない場合、jqGrid はvalueプロパティと同じ値を使用します。これは、99% のシナリオで必要なものです。したがって、プロパティを指定しないことをお勧めします。アイテムの配列形式を使用しているため (プロパティの選択は自由です。のように同じように使用できます。データベース内の列の名前が であり、個人的には.indexcolModelindexindexnameindexcell = new string[] {...}namename: 'NAME_TXT'name: 'NAME'NAME_TXTDESCRIPTION_TXTname

プロパティのデフォルト値alignはすでに'left'です。したがって、 から不要なalign: 'left'プロパティを削除することをお勧めしますcolModel'500px'forheightオプションの値が間違っています。正しい値は、文字列"auto"または文字列"100%"またはのような整数値ですheight: 500。私は個人的に使用するのが好きheight: "auto"です。

jqGrid にはオプションがありませんcontentTypecontentTypeHTTP リクエストを指定する必要がある場合は、{ajaxGridOptions: { contentType: "application/json; charset=utf-8" }代わりに使用する必要があります。オプションrepeatitemsは存在しないため、削除する必要があります。反対に、jqGrid にgridview: trueとの 2 つのオプションを追加することをお勧めしますautoencode: true

もう 1 つの非常に重要なオプションはrowNum. デフォルト値は です20。この値は、パラメーターの値としてサーバーに送信されrowsます ( のパラメーターを参照LinqGridData)。サーバーはrows、 でソートされたデータ項目のみを返す必要がありますsidx。サーバーがより多くのrowsアイテム (20 アイテム以上) を返す場合でも、jqGrid は最初のrowsアイテムのみ (最初の 20 アイテムのみ) を表示します。通常、グリッドには、グリッドの下部または上部にページャー バーがあります。したがって、ユーザーは別のページに移動できます。現在、どちらpagetoppagerオプションも使用していません。その結果、グリッドには最大 20 行が含まれ、ユーザーはページングを使用して残りのデータを表示することができなくなります。またはを使用することをお勧めしますpagertoppager: trueオプションまたは少なくともrowNum: 10000、サーバーから返された最大 10000 行を表示するオプションを含める必要があります。

サーバー側のページング、データの並べ替え、およびフィルタリングを実装していない場合は、すべてのデータを jqGrid に返すことができloadonce: trueますが、jqGrid のオプションを使用してください。すべてのデータがローカルに保存され、サーバーからの最初の読み込み後datatypeに変更される場合、ユーザーはローカルでデータを並べ替えたり、追加のコードを記述することなくページングを使用したりできます。表示する必要のあるデータ ( ) が大きすぎない場合、これは非常に実用的なオプションです。"local"tbl_Quickfix_Toolbar

于 2013-11-09T21:17:54.153 に答える