JqGrid в asp.net не является обязательным - PullRequest
0 голосов
/ 14 сентября 2011

Я пытаюсь реализовать jqGrid в asp.net.

Вот мой код.

    <script type="text/javascript" src="../js/i18n/grid.locale-en.js"></script>
    <script type="text/javascript" src="../js/jquery.jqGrid.min.js"></script>
    <script type="text/javascript" src="../js/jquery.jqGrid.src.js"></script>
    <script src="../js/plugins/grid.postext.js" type="text/javascript"></script>


     <script type="text/javascript">
    $(document).ready(function(){
    jQuery("#tdList").jqGrid({
    type: "POST",
        datatype: function() {
            $.ajax
            ({

                url: "WebService1.asmx/GetDataFromDB",
                 data: "{}",
                datatype: 'json',
                contentType: "application/json; charset=utf-8",


            });
        },

        height: "100%",
        width: "100%",
        forceFit: true,
        colNames: ['EmpID', 'Name', 'MGR'],
        colModel: [
                    { name: 'EmpID', index: 'EmpID', key: true, hidden: true },
                    { name: 'Name', index: 'Name', width: 100 },
                    { name: 'MGR', index: 'MGR', width: 100 }
                  ],
        rowNum: 10,
        rowList: [5, 10, 15],
        pager: $('#pager'),
        sortname: 'EmpID',
        viewrecords: true,
        sortorder: "desc",
        caption: "Customer List"



    }).navGrid('#pager', { del: false, add: false, edit: false });
    });

и код позади

namespace JqGrid_App{    
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]

[System.Web.Script.Services.ScriptService]
public class WebService1 : System.Web.Services.WebService
{

    [WebMethod]
    public string HelloWorld()
    {
        return "Hello World";
    }

    [WebMethod(EnableSession = false)]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = true)]
    public string GetDataFromDB()
    {
        _Default OGetData = new _Default();
       return  OGetData.GetDataFromDB();
    }
}}

Возвращаемый JSONData имеет формат

{
"total":1,
"page":1,
"records":1,
"rows":[
    {"id":"6","cell":["Robbie","2"]}
       ]
}

Но сетка не является обязательной для данных.

Пожалуйста, помогите. Что я здесь не так делаю. Я пытаюсь исправить это за последние 2 дня.

С наилучшими пожеланиями, MLG

1 Ответ

1 голос
/ 14 сентября 2011

Вы делаете слишком много ошибок в своем коде:

  • Вы включили query.jqGrid.min.js и query.jqGrid.src.js вместо использования только один из файлов.
  • Ваш GetDataFromDB возвращает значение метора как string, что неверно.Вы должны вернуть объект со свойствами total, page, rows и так далее.В настоящее время вы выполняете сериализацию JSON вручную, и полученная строка будет сериализована еще раз .
  • Вы используете datatype как функцию, которая была необходима много лет назад, прежде чем были введены новые параметры, описанные, например, здесь .Ваша текущая реализация функции datatype неверна, потому что она выполняет асинхронный вызов Ajax и возвращает его до того, как получит какие-либо результаты от сервера.Результаты сервера будут отброшены.
  • Ваши данные JSON, возвращаемые с сервера, содержат две строки для строки сетки (["Robbie","2"]), но вы определяете tree columns
  • ...

Я могу продолжить ...

Поэтому я предлагаю вам взглянуть на другой пример кода, который использует веб-сервисы ASMX с jqGrid, Здесь например, вы можете загрузить одну рабочую демоверсию.В ответе вы найдете еще одну демонстрацию.

...