jqGrid не в режиме дерева Почему? - PullRequest
0 голосов
/ 03 ноября 2011

У меня проблема с jqGrid. jqGrid версия 4.2.0 - jQuery Grid сетка показывает загруженные данные не в режиме дерева, только в режиме сетки. Зачем ? Пожалуйста, помогите мне ! Можно по русски. Добавить в шапку

   <link href="../jqGrid/css/ui.jqgrid.css" rel="stylesheet" type="text/css" />
   <script src="jqGrid/js/i18n/grid.locale-ru.js" type="text/javascript"></script>
   <script src="jqGrid/js/jquery.jqGrid.min.js" type="text/javascript"></script>

и моя функция для получения данных из веб-службы.

   function getDataSC(pData) {
   $.ajax({
       type: 'POST',
       contentType: "application/json; charset=utf-8",
       url: '<%= ResolveClientUrl("~/FetchData.asmx/bindSCJson") %>',
       dataType: "json",
       success: function(data, textStatus) {
        if (textStatus == "success")
            ReceivedClientDataSC(JSON.parse(getMain(data)).rows);
    },
    error: function(data, textStatus) {
        alert('An error has occured retrieving data!');
    }
});
}
function ReceivedClientDataSC(data) {
    var thegrid = $("#gridSC");
    thegrid.clearGridData();
    for (var i = 0; i < data.length; i++)
        thegrid.addRowData(i + 1, data[i]);
}
function getMain(dObj) {
    if (dObj.hasOwnProperty('d'))
        return dObj.d;
    else
        return dObj;
}

var lastSel;
$("#gridSC").jqGrid({
datatype: function(pdata) { getDataSC(pdata); },

treeGrid: true, 
treeGridModel : 'adjacency',
ExpandColumn: 'Name',
ExpandColClick: true ,
mtype: 'POST',
treeIcons: {plus:'ui-icon-circle-plus',minus:'ui-icon-circle-minus',leaf:'ui-    
 icon-person'},

height: "100%",
width: 900,
     colNames: ['Id', 'Name', 'CountryName', 'Town', 'Adress', 'Phone', 'Email', 
'Url'],
     colModel: [
                    { name: 'Id', index:'id', width:10, hidden:true,key:true},
                    { name: 'Name', index: 'Name', width: 80},
                    { name: 'CountryName',index:'CountryName', width:80},
                    { name: 'Town', index: 'Town', width: 20 },
                    { name: 'Adress', index: 'Adress', width: 90 },
                    { name: 'Phone', index: 'Phone', width: 20},
                    { name: 'Email', index: 'Email', width: 20 },
                    { name: 'Url', index: 'Url', width: 30}
                  ],
       pager: $('#pjmapSC')
       //rowNum:20,
       //viewrecords: true,
       //gridview: true,
       //rowList:[10,20,30,100],
       //sortname: 'Id',
       //sortorder: 'asc'

    })

    }

JSON из службы сервера (загружен в сетку):

{"d":"{\"total\":1,\"page\":1,\"records\":2,\"rows\":[{\"err\":null,\"Id\":1,\"Parent  
 \":0,\"Name\":\"Сервисные центры\",\"CountryCode\":103,\"Town\":\"Киев\",\"Adress
 \":\"Красных партизан 1\",\"Phone\":\"123-321\",\"Email\":\"mail@mail.ru 
 \",\"CountryName\":\"United Arab Emirates\",\"Url\":\"www.service1\",\"isLeaf\":false,
 \"Expanded\":true,\"Level\":1},{\"err\":null,\"Id\":2,\"Parent\":1,\"Name
 \":\"Сервисный центр 1_1\",\"CountryCode\":103,\"Town\":\"Киев\",\"Adress\":\"Артема
 \",\"Phone\":\"123-321\",\"Email\":\"fert@ukr.net\",\"CountryName\":\"United Arab  
 Emirates\",\"Url\":\"www.service2\",\"isLeaf\":true,\"Expanded\":true,\"Level\":2}],
 \"userData\":null}"}

Помогите пожалуйста! Благодаря.

EDIT:

Спасибо, Олег, но я пытаюсь изменить строку моего сервера на

{"d":{"__type":"_admin.JqGridData","total":3,"page":1,"records":26,"rows":        [{"id":1,"cell":["1","Сервисные центры","United Arab Emirates","Киев","Красных партизан 1","123-321","mail@mail.ru","www.service1","0",null,"False","False"]},{"id":2,"cell":["2","Сервисный центр 1_1","United Arab Emirates","Киев","Артема","123-321","fert@ukr.net","www.service2","1","1","True","False"]},{"id":4,"cell":["4","Сервисный центр 1_2","United Arab Emirates","Донецк","Артема","123-321","fert@ukr.net","www.service2","1","1","True","False"]},{"id":5,"cell":["5","Сервисный центр 1_3","United Arab Emirates","Одесса","Артема","123-321","fert@ukr.net","www.service3","1","1","True","False"]},

и

   $("#gridSC").jqGrid({
   url: '<%= ResolveClientUrl("~/FetchData.asmx/bindSC") %>',
   datatype: 'json',
   mtype: 'POST',
   treeGridModel: 'adjacency',
   ExpandColumn: 'Name',
   ExpandColClick: true,
   ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
   serializeGridData: function (postData) {
     if (postData.searchField === undefined) postData.searchField = null;
     if (postData.searchString === undefined) postData.searchString = null;
     if (postData.searchOper === undefined) postData.searchOper = null;
    //if (postData.filters === undefined) postData.filters = null;
     return JSON.stringify(postData);
  },
 jsonReader: {
     root: function (obj) { return obj.d.rows; },
     page: function (obj) { return obj.d.page; },
     total: function (obj) { return obj.d.total; },
     records: function (obj) { return obj.d.records; }
  },
  colNames: ['Id', 'Name', 'CountryName', 'Town', 'Adress', 'Phone', 'Email', 'Url'],
  colModel: [
                { name: 'Id', index: 'id', width: 10, hidden: true, key: true },
                { name: 'Name', index: 'Name', width: 80 },
                { name: 'CountryName', index: 'CountryName', width: 80 },
                { name: 'Town', index: 'Town', width: 20 },
                { name: 'Adress', index: 'Adress', width: 90 },
                { name: 'Phone', index: 'Phone', width: 20 },
                { name: 'Email', index: 'Email', width: 20 },
                { name: 'Url', index: 'Url', width: 30 }
              ],
  rowNum: 10,
  rowList: [10, 20, 300],
  sortname: 'Name',
  sortorder: "asc",
  pager: "#pjmapSC",
  viewrecords: true,
  gridview: true,
  rownumbers: true,
  height: "100%",
  caption: ''
  })

и тест treeReader: { поле_уровня: «уровень», parent_id_field: "parent", leaf_field: "isLeaf", extended_field: «расширенный» }, ничего не меняется в сетке (не сетка дерева). На стороне сервера мой метод

        int startIndex = (page - 1) * rows;
        int endIndex = (startIndex + rows < recordsCount) ?
                       startIndex + rows : recordsCount;
        List<TableRow> gridRows = new List<TableRow>(rows);

        for (int i = startIndex; i < endIndex; i++)
        {
             gridRows.Add(new TableRow()
               {
                id = lsc[i].Id,
                cell = new List<string>(11) {
                    lsc[i].Id.ToString(), 
                    lsc[i].Name, 
                    lsc[i].CountryName,
                    lsc[i].Town,
                    lsc[i].Adress,
                    lsc[i].Phone,
                    lsc[i].Email,
                    lsc[i].Url,
                    lsc[i].level.ToString(),
                    lsc[i].parent,
                    lsc[i].isLeaf.ToString(),
                    lsc[i].expanded.ToString()

если я перейду на это //string.Format("Name:ndom0} ", lsc [i] .Name) моя сетка загружает некорректно данные

Помогите пожалуйста.


Спасибо, Олег, но я пытаюсь изменить строку моего сервера на

{"d": {"__ type": "_ admin.JqGridData", "total": 3, "page": 1, "records": 26, "lines": [{"id": 1, " ячейка ": [" 1 "," Сервисные центры "," Объединенные Арабские Эмираты "," Киев "," Красных партизан 1 "," 123-321 "," mail@mail.ru "," www.service1 "," 0 ", null," False "," False "]}, {" id ": 2," cell ": [" 2 "," Сервисный центр 1_1 "," Объединенные Арабские Эмираты "," Киев "," Артема " , "123-321", "fert@ukr.net", "www.service2", "1", "1", "True", "False",]}, { "идентификатор": 4, "клетка": ["4", "Сервисный центр 1_2", "Объединенные Арабские Эмираты", "Донецк", "Артема", "123-321", "fert@ukr.net", "www.service2", "1", " 1 "," True "," False "]}, {" id ": 5," cell ": [" 5 "," Сервисный центр 1_3 "," Объединенные Арабские Эмираты "," Одесса "," Артема "," 123-321" , "fert@ukr.net", "www.service3", "1", "1", "Правда", "Ложь"]},

и

   $("#gridSC").jqGrid({
   url: '<%= ResolveClientUrl("~/FetchData.asmx/bindSC") %>',
   datatype: 'json',
   mtype: 'POST',
   treeGridModel: 'adjacency',
   ExpandColumn: 'Name',
   ExpandColClick: true,
   ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
   serializeGridData: function (postData) {
     if (postData.searchField === undefined) postData.searchField = null;
     if (postData.searchString === undefined) postData.searchString = null;
     if (postData.searchOper === undefined) postData.searchOper = null;
    //if (postData.filters === undefined) postData.filters = null;
     return JSON.stringify(postData);
  },
 jsonReader: {
     root: function (obj) { return obj.d.rows; },
     page: function (obj) { return obj.d.page; },
     total: function (obj) { return obj.d.total; },
     records: function (obj) { return obj.d.records; }
  },
  colNames: ['Id', 'Name', 'CountryName', 'Town', 'Adress', 'Phone', 'Email', 'Url'],
  colModel: [
                { name: 'Id', index: 'id', width: 10, hidden: true, key: true },
                { name: 'Name', index: 'Name', width: 80 },
                { name: 'CountryName', index: 'CountryName', width: 80 },
                { name: 'Town', index: 'Town', width: 20 },
                { name: 'Adress', index: 'Adress', width: 90 },
                { name: 'Phone', index: 'Phone', width: 20 },
                { name: 'Email', index: 'Email', width: 20 },
                { name: 'Url', index: 'Url', width: 30 }
              ],
  rowNum: 10,
  rowList: [10, 20, 300],
  sortname: 'Name',
  sortorder: "asc",
  pager: "#pjmapSC",
  viewrecords: true,
  gridview: true,
  rownumbers: true,
  height: "100%",
  caption: ''
  })

и тест treeReader: { поле_уровня: «уровень», parent_id_field: "parent", leaf_field: "isLeaf", extended_field: «расширенный» }, ничего не меняется в сетке (не сетка дерева). На стороне сервера мой метод

        int startIndex = (page - 1) * rows;
        int endIndex = (startIndex + rows < recordsCount) ?
                       startIndex + rows : recordsCount;
        List<TableRow> gridRows = new List<TableRow>(rows);

        for (int i = startIndex; i < endIndex; i++)
        {
             gridRows.Add(new TableRow()
               {
                id = lsc[i].Id,
                cell = new List<string>(11) {
                    lsc[i].Id.ToString(), 
                    lsc[i].Name, 
                    lsc[i].CountryName,
                    lsc[i].Town,
                    lsc[i].Adress,
                    lsc[i].Phone,
                    lsc[i].Email,
                    lsc[i].Url,
                    lsc[i].level.ToString(),
                    lsc[i].parent,
                    lsc[i].isLeaf.ToString(),
                    lsc[i].expanded.ToString()

если я перейду на это //string.Format("Name:ndom0} ", lsc [i] .Name) моя сетка загружает некорректно данные

Помогите пожалуйста.

1 Ответ

0 голосов
/ 03 ноября 2011

Ваша основная ошибка в неправильном регистре имен столбцов Tree Grid, которые вы используете.Это должно быть level, parent, expanded вместо Level, Parent, Expanded, которые вы используете во входных данных JSON.Только isLeaf вы используете правильно.Поэтому вам следует либо исправить столбец, который использует ваш веб-сервис, либо добавить параметр treeReader , который описывает используемые вами имена:

treeReader = {
   level_field: "Level",
   parent_id_field: "Parent",
   leaf_field: "isLeaf",
   expanded_field: "Expanded"
}

Кроме того, я бы порекомендовал вам изменить свой код так, чтобыВы используете datatype: 'json' вместо datatype в качестве функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...