Данные JSON не отображаются в JQGrid

1

Я смотрел на игру с предложениями во всех связанных ответах, но безрезультатно. Я пробовал всевозможные варианты, но снова безрезультатно. Я использую ASP.NET с С# в качестве языка обработки, а Oracle 10g - как механизм базы данных.

Вот мой.aspx файл:

<form id="LocalizationSearch" name="locSearch" defaultbutton="updateButton" runat="server">
   <script language="javascript" type="text/javascript">
    jQuery(document).ready(function () {
        var createLanguageList = function () {
            $("#list").jqGrid({
                url: "KPHandler.ashx?langname=English",
                datatype: "json",
                contentType: "application/json; charset=utf-8", 
                mtype: 'POST',
                //datatype: "local",
                //data: mydata,
                autowidth: true,
                height: 150,
                colNames: ['DelLanguageID', 'DocRecID', 'LanguageID', 'DocPartNumber,', 'NewLanguage', 'ConcentraIDLang', 'ActFromTranslation'],
                colModel: [
                    { name: 'DelLanguageID', index: 'DelLanguageID', width: 65, editable: false },
                    { name: 'DocRecID', index: 'DocRecID', width: 65, editable: false },
                    { name: 'LanguageID', index: 'LanguageID', width: 65, editable: false },
                    { name: 'DocPartNmbr', index: 'DocPartNmbr', width: 65, editable: true },
                    { name: 'NewLanguage', index: 'NewLanguage', editable: true, edittype: 'checkbox', editoptions: { value: "1:0"} },
                    { name: 'ConcentraIDLang', index: 'ConcentraIDLang', width: 65, editable: true },
                    { name: 'ActFromTranslation', index: 'ActFromTranslation', width: 120, editable: true }
                ],
                rowNum: 5,
                rowList: [10, 20, 30],
                pager: '#pager',
                sortname: 'DelLanguageID',
                viewrecords: true,
                //altRows: true,
                //sortorder: "desc",
                caption: "Deliverable Languages",
                //height: "100%",
                loadonce: true, 
                gridview: true, 
                autoencode: true,
                loadError: function (jqXHR, textStatus, errorThrown) {
                    alert('Error: ' + textStatus + errorThrown + jqXHR.responseText);
                }
            });  // JQGrid
        };  // Create function

        $("#btnLanguages").click(function () {
            createLanguageList();
        });

    });   // document ready 

</script>

    <table cellspacing="1" cellpadding="0" width="100%">
        <tr>
            <td valign="top">
                <table id="list"></table>
                <div id="pager"></div>
        </td>
        </tr>
    </table>
    <input type="button" id="btnLanguages" value="Work With Languages"  />

</form>

и вот мой код на С#, который создает объект JSON:

<%@ WebHandler Language="C#" Class="KPHandler" %>

using System;
using System.Web;
using System.Web.Script.Serialization;
using System.Web.Configuration; 
using System.Text;
using System.Data;
using System.Collections.Generic;
using System.Configuration;
using System.Data.OracleClient;

public class KPHandler : IHttpHandler
{
    private DKCL.ReportDK Rpt = new DKCL.ReportDK();

    public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "application/json";
        System.Collections.Specialized.NameValueCollection forms = context.Request.Form;
        string strOperation = forms.Get("oper");

        switch (strOperation)
        {
            case null:  // means this is the first time load
                string strSQL = "SELECT DelLanguageID, DocRecID, LanguageID, DocPartNmbr, NewLanguage, " +
                                "ConcentraIDLang, ActFromTranslation FROM DELLANGUAGES WHERE DOCRECID = 18787";

                DataTable dlLanguages = Rpt.GetDataTable(strSQL);

                context.Response.Write(GetJson(dlLanguages));

                break;
            default:
                break;
        }  // End Switch

    }

    // This is generic function that converts DataTable into JSON object.
    public string GetJson(DataTable dt)
    {
        System.Web.Script.Serialization.JavaScriptSerializer serializer = new

        System.Web.Script.Serialization.JavaScriptSerializer();
        List<Dictionary<string, object>> rows =
          new List<Dictionary<string, object>>();
        Dictionary<string, object> row = null;

        foreach (DataRow dr in dt.Rows)
        {
            row = new Dictionary<string, object>();
            foreach (DataColumn col in dt.Columns)
            {
                row.Add(col.ColumnName.Trim(), dr[col]);
            }
            rows.Add(row);
        }
        return serializer.Serialize(rows);
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

}

и вот данные JSON, возвращенные приведенным выше кодом (я действительно получил это, как показано Fiddler2), и мою собственную отладку кода.:

            [{"DELLANGUAGEID":"4613","DOCRECID":"18787","LANGUAGEID":"12","DOCPARTNMBR":null,"NEWLANGUAGE":0,"CONCENTRAIDLANG":"c02609839","ACTFROMTRANSLATION":null},{"DELLANGUAGEID":"4614","DOCRECID":"18787","LANGUAGEID":"34","DOCPARTNMBR":null,"NEWLANGUAGE":0,"CONCENTRAIDLANG":null,"ACTFROMTRANSLATION":null},{"DELLANGUAGEID":"4615","DOCRECID":"18787","LANGUAGEID":"1","DOCPARTNMBR":null,"NEWLANGUAGE":0,"CONCENTRAIDLANG":"c02606925","ACTFROMTRANSLATION":null},{"DELLANGUAGEID":"4616","DOCRECID":"18787","LANGUAGEID":"13","DOCPARTNMBR":null,"NEWLANGUAGE":0,"CONCENTRAIDLANG":"c02609850","ACTFROMTRANSLATION":null},{"DELLANGUAGEID":"4617","DOCRECID":"18787","LANGUAGEID":"11","DOCPARTNMBR":null,"NEWLANGUAGE":0,"CONCENTRAIDLANG":"c02606924","ACTFROMTRANSLATION":null},{"DELLANGUAGEID":"4618","DOCRECID":"18787","LANGUAGEID":"3","DOCPARTNMBR":null,"NEWLANGUAGE":0,"CONCENTRAIDLANG":"c02606920","ACTFROMTRANSLATION":null},{"DELLANGUAGEID":"4619","DOCRECID":"18787","LANGUAGEID":"21","DOCPARTNMBR":null,"NEWLANGUAGE":0,"CONCENTRAIDLANG":null,"ACTFROMTRANSLATION":null},{"DELLANGUAGEID":"39703","DOCRECID":"18787","LANGUAGEID":"142","DOCPARTNMBR":"593957-001","NEWLANGUAGE":0,"CONCENTRAIDLANG":null,"ACTFROMTRANSLATION":null},{"DELLANGUAGEID":"89446","DOCRECID":"18787","LANGUAGEID":"161","DOCPARTNMBR":null,"NEWLANGUAGE":0,"CONCENTRAIDLANG":null,"ACTFROMTRANSLATION":null},{"DELLANGUAGEID":"97174","DOCRECID":"18787","LANGUAGEID":"162","DOCPARTNMBR":null,"NEWLANGUAGE":0,"CONCENTRAIDLANG":null,"ACTFROMTRANSLATION":null},{"DELLANGUAGEID":"112630","DOCRECID":"18787","LANGUAGEID":"164","DOCPARTNMBR":null,"NEWLANGUAGE":0,"CONCENTRAIDLANG":null,"ACTFROMTRANSLATION":null},{"DELLANGUAGEID":"104902","DOCRECID":"18787","LANGUAGEID":"163","DOCPARTNMBR":null,"NEWLANGUAGE":0,"CONCENTRAIDLANG":null,"ACTFROMTRANSLATION":null}]

Любая идея, что может пойти не так? В сетке отображается правильное количество записей, а также страницы в пейджере. Любая помощь будет оценена по достоинству.
Кстати, я попробовал GET vs POST, json vs jsonstring и многие другие варианты, включая JSON Reader, но не повезло.

  • 0
    Не совсем понятно, о чем вы спрашиваете. Вы заявляете, что сетка показывает строки, равные количеству возвращенных данных, но не фактическим значениям данных?
Теги:
jqgrid

2 ответа

0
Лучший ответ

Свойство index colModel предназначено для точного отражения ключа в результате JSON. См. Документацию:

index: имя передается на сервер, на котором сортируются данные (обратите внимание, что вместо них мы могли бы передавать номера столбцов). Обычно это имя (или имена) из базы данных - это сортировка на стороне сервера, поэтому то, что вы проходите, зависит от того, что ожидает ваш сервер.

Учитывая эту информацию, похоже, что ваши индексы в примере неверно обведены. Попробуйте исправить их в соответствующем случае или используйте числовое значение.

Пример:

colModel: [{ name: 'DelLanguageID', index: 'DELLANGUAGEID', width: 65, editable: false },...
  • 0
    @Kishor Кроме того, посетите этот пример, чтобы увидеть, что происходит jsfiddle.net/wt5ea1jz
  • 0
    Спасибо Strake, это фантастический инструмент!
0

Спасибо, Страйке. Это было болезненно для меня, но довольно образованным. Теперь он отлично работает, просто изменив ** ColModel **. Еще раз спасибо.

  • 0
    Рад, что смог помочь. Пожалуйста, пометьте мой пост как ответ, если он вам помог.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню