Как я заставляю jqGrid работать с помощью ASP.NET + JSON на бэкенде?

Вам необходимо внести 2 изменения в код, как показано ниже, и фильтры должны работать нормально:

df <- data.frame(ID=c(1,2,3,4,5,6), 
   Date=c("1900-01-12","2010-12-29","1934-03-17", "1989-09-19","1978-11-27","2010-01-13"),
   stringsAsFactors = F) # Ensure your dates are initially strings and not factors

# Actually convert the character dates to Date before writing them to excel
df$Date <- as.Date(df$Date) 
6
задан Mihai Limbășan 7 April 2009 в 20:48
поделиться

7 ответов

Вот простой пример ...

Вам понадобится https://github.com/douglascrockford/JSON-js/blob/master/json2.js чтобы это работало ...

и, конечно же, обычные файлы jquery.

Вставьте это в веб-службу

// The lower case properties here are required to be lower case
// I cant find a way to rename them when they are serialized to JSON
// XmlElement("yournamehere") does not work for JSON :(
public class JQGrid
{
    public class Row
    {
        public int id { get; set; }
        public List<string> cell { get; set; }

        public Row()
        {
            cell = new List<string>();
        }
    }

    public int page { get; set; }
    public int total { get; set; }
    public int records { get; set; }
    public List<Row> rows { get; set; }

    public JQGrid()
    {
        rows = new List<Row>();
    }
}


[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService]
public class MyWebService : System.Web.Services.WebService
{

    [WebMethod(EnableSession = true)]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]    
    public JQGrid GetJQGrid(int page, int pageSize, string sortIndex, string sortDirection)
    {
        DataSet ds = SqlHelper.ExecuteDataset(SqlHelper.CONN_STRING, "udsp_GetMyData",pageIndex, pageSize);

        if (ds == null || ds.Tables.Count < 1)
            throw new Exception("Unable to retrieve data.");

        JQGrid jqGrid = new JQGrid();

        int i = 1;
        foreach (DataRow dataRow in ds.Tables[0].Rows)
        {
            JQGrid.Row row = new JQGrid.Row();

            row.id = Convert.ToInt32(dataRow["MyIdColumn"]);

            row.cell.Add(dataRow["MyIdColumn"].ToString());

            row.cell.Add(dataRow["MyColumn"].ToString());


            projectGrid.rows.Add(row);
        }

        jqGrid.page = 1; // Set this when you are actually doing paging... this is just a sample
        jqGrid.records = jqGrid.rows.Count;
        jqGrid.total = jqGrid.rows.Count;  // Set this to total pages in your result...

        return jqGrid;
    }
}

Вставьте это на свою страницу aspx

<script type="text/javascript">
function getData(pdata) {
    var params = new Object();
    params.page = pdata.page;
    params.pageSize = pdata.rows;
    params.sortIndex = pdata.sidx;
    params.sortDirection = pdata.sord;


    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "/CLM/CLM.asmx/GetProjectGrid2",
        data: JSON.stringify(params),
        dataType: "json",
        success: function(data, textStatus) {
            if (textStatus == "success") {
                var thegrid = $("#testGrid")[0];
                thegrid.addJSONData(data.d);
            }
        },
        error: function(data, textStatus) {
            alert('An error has occured retrieving data!');
        }
    });
}

var gridimgpath = '/clm/css/ui-lightness/images';
$(document).ready(function() {
    $("#testGrid").jqGrid({
        datatype: function(pdata) {
            getData(pdata);
        },
        colNames: ['My Id Column', 'My Column'],
        colModel: [
            { name: 'MyIdColumn', index: 'MyIdColumn', width: 150 },
            { name: 'My Column', index: 'MyColumn', width: 250 }
        ],
        rowNum: 10,
        rowList: [10, 20, 30],
        imgpath: gridimgpath,
        pager: jQuery('#pagerdt'),
        sortname: 'id',
        viewrecords: false,
        sortorder: "desc",
        caption: "Projects",
        cellEdit: false
    });
});
</script>
10
ответ дан 8 December 2019 в 14:47
поделиться

Вы проверили, что tbl переменная получает ссылку на Ваш jqgrid экземпляр?

Попытайтесь добавить идентификатор к своему элементу таблицы и получите ссылку на jqgrid как:

var thegrid = jQuery("#mytableid")[0];
1
ответ дан 8 December 2019 в 14:47
поделиться

хорошо я вижу одну вещь неправильно здесь:

var tbl = jQuery('table.scroll')[0];  
 //tbl.addJSONData(objGridData); //error received: addJSONData not a function  

если Вы действительно задаетесь вопросом, почему Вы получаете эту ошибку, это - потому что tbl не имеет той функции.

Править: я стал любопытным, и проверил, добавил ли jqGrid те методы к ссылочному объекту DOM. и они сделали. (я проверил поджигателя использования здесь: http://trirand.com/jqgrid/jqgrid.html).

Одна вещь, которая может происходить здесь, состоит в том, что у Вас есть несколько таблиц класса 'прокрутка', и Ваш jQuery возвращает неправильный.

1
ответ дан 8 December 2019 в 14:47
поделиться

Обычно, когда при использовании jqGrid вы получите ошибку «бла, это не функция», потому что не был загружен правильный модуль. Функция addJSONData определена в файле grid.base.js. Можете ли вы проверить свою функцию jqGridInclude () в файле jquery.jqGrid.js и убедиться, что grid.base.js включен как часть инициализации переменной модулей?

3
ответ дан 8 December 2019 в 14:47
поделиться

Поскольку у нас было много вопросов по ASP.NET WebForms и jqGrid, мы решили пойти по «компонентному» пути и реализовать что-то очень похожее на asp: GridView. Таким образом, вы можете управлять jqGrid, используя знакомый жизненный цикл страницы ASP.NET, события, источники данных и т. Д.

Вы можете увидеть бета-версию этого в Интернете здесь - в настоящее время доступно более 30 примеров:

http: // www .trirand.net / demo. aspx

Скорее всего, он вырастет и в коммерческий продукт (будут доступны лицензии с открытым исходным кодом), если в этом есть интерес. Между тем, вы можете использовать Reflector для проверки источников для справки (пока мы не найдем способ сделать источник доступным в Интернете). Мы используем SVN для ASP.NET, а не gitHub для ядра js, поэтому у нас есть работа в этом направлении.

Мы надеемся, что это поможет сообществу.

Румен Станков Триранд

0
ответ дан 8 December 2019 в 14:47
поделиться
1
ответ дан 8 December 2019 в 14:47
поделиться

Это очень старый вопрос, однако совсем недавно у меня была такая же проблема. Я написал, как я этого добился, в новом блоге, который я пытаюсь начать.

Возможно, есть более чистые способы сделать это, но этот сработал для меня. Пока что мне удалось довольно легко расширить масштабы на основе этого примера. Мое следующее препятствие - заставить работать loadonce.

Вы можете найти мой пример здесь:

http://programming.webdad3.com/?p=3

0
ответ дан 8 December 2019 в 14:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: