13

mvc4 で jqgrids を使用している IM では、単純なリストを取得し、Ajax を使用して表示する必要があります。

ページをロードすると、グリッドが Ajax 呼び出しを開始します。グリッドには user_id と name の 2 つの列しかありません。

Json が読み込まれると、Google chrome で次のエラーが表示されます。

キャッチされていない Typesetter: 未定義のプロパティ 'integer' を読み取ることができません

そしてFirefoxでは、firebug:

TypeError: b.jgrid.formatter が定義されていません

jquery.jqGrid.src.js:122 で

また、グリッドには「未定義」のメッセージが表示されます。また、現在のページャー コントロールは読み込まれていませんが、データは

 <table id="GridUsuarios"></table>
    <div id="PagerUsuarios"></div>


  <script type="text/javascript"> 
        $(document).ready(function() {
            jQuery("#GridUsuarios").jqGrid({
                url: '@Url.Action("UsuariosGridData","Usuarios")',
                datatype: "json",
                myType: 'GET',
                contentType: "application/json; charset-utf-8",                
                colNames: ['Usuario', 'Nombre'],
                colModel: [
                    { name: 'user_id', index: 'user_id', width: 90},
                    { name: 'nombre', index: 'nombre', width: 200}
                ],
                pager: '#PagerUsuarios',
                rowNum: 10,
                rowList: [10, 20, 30],
                viewrecords: true,
                height: 'auto',
                sortname: 'nombre',
                sortorder: 'desc',
                caption: "Usuarios",
                jsonReader: {
                    root: "rows",
                    total: "total",
                    page: "page",
                    records: "records",
                    repeatitems: false,
                    id: "user_id"
                },
            });            
        });
    </script>

そして私のコントローラー:

    public JsonResult UsuariosGridData(string sidx = "" , string sord = "", int page = 1, int rows = 10)
    {
        var resultado = db_hms.Users//.OrderByDescending(ur => ur.id_user)
                        .Join(db_hms.v_natural_person_short, ur => ur.id_employee, np => np.id_natural_person, (ur, np) => new { Users = ur, Natural_Person = np })//cambiar el idUser por idEmployee la relacion es alrevez XD                            
                        .Select(s => new { user_id = s.Users.id_user, nombre = s.Natural_Person.name_full })
                        .ToList();



        int vpage = page;
        int vrows = rows;  
        int counter = (int)Math.Ceiling((float)resultado.Count() / (float)vrows);            
        switch (sidx)
        {
            case "nombre":
                {
                            if(sord == "desc")
                            {
                                resultado = resultado.OrderByDescending(s => s.nombre).Skip(vrows * vpage).Take(vrows).ToList();
                            }
                            else
                            {
                                resultado = resultado.OrderBy(s => s.nombre).Skip(vrows * vpage).Take(vrows).ToList(); ;
                            }
                    break;
                }
            case "user_id":
                {
                            if(sord == "desc")
                            {
                                resultado = resultado.OrderByDescending(s => s.user_id).Skip(vrows * vpage).Take(vrows).ToList();
                            }
                            else
                            {
                                resultado = resultado.OrderByDescending(s => s.user_id).Skip(vrows * vpage).Take(vrows).ToList();
                            }
                    break;
                }
        }
        var retornar = new
        {
            total = counter,
            page = vpage,
            records = vrows,
            rows = resultado
        };

        return Json(retornar, JsonRequestBehavior.AllowGet);

    }

そして小さなjsonの例:

{"total":101,"page":1,"records":303,
 "rows":[{"user_id":"titito","nombre":"EL bonito, tito "},
        {"user_id":"noro","nombre":"ElMoro, Noro "},
        {"user_id":"maka","nombre":"Martinez, Macanencio "}]}
4

2 に答える 2

39

またはの前に必要な言語ファイルgrid.locale-XX.js(たとえば、ドキュメントの jqGrid の使用例を参照してください。grid.locale-en.js jquery.jqGrid.min.jsjquery.jqGrid.src.js

さらに、jqGrid にオプションを追加し、存在しないものを削除しgridview: true(デフォルト値の場合はオプションがあります)、 に減らし、すべてのプロパティを削除し(プロパティの値と同じ値を使用するため)、追加することをお勧めします。列の定義。autoencode: truemyType: 'GET'mtype"GET"jsonReaderjsonReader: {repeatitems: false, id: "user_id"}indexcolModelnamekey: true'user_id'

データのサーバー側ページングを実装していないため、オプションを追加することをお勧めしloadonce: trueます。すべてのデータを一度に返すことができUsuariosGridData、jqGrid はクライアント側の並べ替え、ページング、またはオプションでデータのフィルタリング/検索を実装します。

于 2013-05-23T15:46:37.247 に答える