JQGrid - 下一个和最后一个按钮不显示本地数据库中提取的数据

时间:2013-01-24 15:22:31

标签: jquery html asp.net-mvc jqgrid jqgrid-asp.net

<script type="text/javascript">

$(document).ready(function () {
    var firstClick = true;
    $('.editor-date > input').datepicker();
    $('.getdata').click(function () {
        if (!firstClick) {
            $("#GridTable").trigger("reloadGrid");
        }
        else
        {
            firstClick = false;
            $('#GridTable').jqGrid({
                url: '<%= Url.Action("GetData", "Report") %>',
                datatype: 'json',
                mtype: 'POST',
                colNames: ['Log ID'],
                colModel: [{ name: 'LogID', index: 'MessageLogID', key: true, formatter: pointercursor }],
                multiselect: true,
                sortname: 'LogID',
                sortorder: "asc",
                viewrecords: true,
                pager: '#pager',
                rowNum: 20,
                rowList: [5, 10, 20, 50],
                postData: { 
                IdParam: function () 
                  { return $('#LogID').val(); } 
                },
                jsonReader: {
                    repeatitems: false,
                    id: 'LogID',
                    records: 'TotalRecords',
                    total: 'TotalPages',
                    page: 'CurrentPage',
                    root: 'Rows'
                },
                loadError: function (xhr, status, error) {
                    messageBox('Error', 'Error occurred loading data.');
                },
                height: 'auto',
                width: 'auto'
            });

        });
}   

Report Controller Method
         public ActionResult GetData(string sidx, string sord, int page, int rows, int IdParam){}

我正在尝试只从数据库加载所需的数据...所以当显示第一页时,我从db获得20行,然后当用户点击网格中的下一个按钮时,我再次点击数据库调用如果我调试方法,现在获得接下来的20行我可以看到我的数据进入方法调用,但是网格进入第2页并且什么也没显示。我的意思是网格显示加载标志,然后即使对于最后一个按钮也没有任何反应我没有得到任何数据但是在寻呼机上它显示总共100页并且我可以继续下一步但只有页面号。增量没有数据显示在网格中..     任何帮助将不胜感激...我试图阅读有关Onpaging事件,但无法弄清楚如何在这种情况下实现它..

快速观察: 如果我将行数从20更改为5 10或50来获取数据并显示在第一页上,那么下一页就不会显示...

控制器方法:

     int pageSize = rows;
     int pageIndex = page - 1;
     int totalPages = 0;

     //call to the db using Entity FrameWork..
     var Log = SERVICE.GetData_sp(IdParam,sidx,sord,page,rows,total).ToList()
     var totalCount = Convert.ToInt32(total.Value); //converting because I am getting it as Output parameter from the Store-Proc in objet.parameter type.
    totalPages = (int)Math.Ceiling(totalCount / (float)pageSize);

JqGridData gridData = new JqGridData { CurrentPage = page, TotalPages = totalPages, TotalRecords = totalCount };//getting the correct values as I cross checked it by just exec the store-proc.
 //storing data in gridData obj from Log.  
    return Json(gridData);

1 个答案:

答案 0 :(得分:0)

您没有在上面显示您的控制器方法,但我认为您可能没有构建jqGrid处理分页的数据。

您应该构建并传递给jqGrid

int totalRecords = queryOfData.Count();

然后你会把它作为jSon值传递给你的网格。实施例

var jsonData = new
{
    total = (totalRecords + rows - 1) / rows,
    page = page,
    records = totalRecords,
    rows = (
    ......