【问题标题】:JQGrid - next and last button are not displaying the fetched data from the local databaseJQGrid - 下一个和最后一个按钮不显示从本地数据库获取的数据
【发布时间】:2013-01-24 15:22:31
【问题描述】:
<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 行,然后当用户单击网格中的下一个按钮时,我再次点击 db 调用如果我调试方法,现在得到接下来的 20 行,我可以看到我的数据进入方法调用,但是网格转到第二页并且什么也不显示。我的意思是网格正在显示加载标志,然后即使最后一个按钮也没有任何反应,我没有得到任何数据,但在寻呼机上它显示总共 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);

【问题讨论】:

  • 首先你应该修复postData内部的JavaScript代码:你应该使用postData: { IdParam: function () { return $('#LogID').val(); } }而不是postData: { IdParam: function () return $('#LogID').val(); }
  • 抱歉,这是一个错字。我在通话中正确使用了它,因为几天前你帮我解决了这个问题。@Oleg
  • 您的 totalPages 分配似乎过于复杂。您是否看到您的控制器尝试返回不同的数据集以响应网格页面操作?

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


【解决方案1】:

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

您应该正在构建并传递给 jqGrid

int totalRecords = queryOfData.Count();

然后您将其作为 jSon 值传递给您的网格。例

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

【讨论】:

  • 我在上面的编辑中添加了受控方法....但是我能够通过返回方法获取数据,即..return Json(gridData);..所以我不认为那里那个电话有什么问题吗
  • 你是对的,我没有将正确的数据列表传递给网格。我从 store-proc 获取数据,然后尝试对其进行排序。像这样
  • items = Log .OrderBy(u => u.LogId) .AsQueryable() .Skip((pageIndex) * pageSize) .Take(pageSize);
  • 这使内容再次空白..感谢您的时间
猜你喜欢
  • 2013-04-02
  • 2020-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-19
  • 2015-02-18
  • 1970-01-01
相关资源
最近更新 更多