如题,我感觉我的代码是正确的,可是一直不出数据。看了好多帖子,试了各种办法,都没用,我快要崩溃了。请各位帮帮忙
我的前台代码:
<div id="dd"></div>  $(function () {
  $('#dd').datagrid({
             title: "测试 ",
             width: "auto",
             striped: true,
             singleSelect: true,
             loadMsg: "正在加载,请稍等...",
             url: '/test/GetGridData',  //获取数据地址 
             pagination: true,
             rownumbers: true,
             pageList: [5, 10, 15, 20],
             pageSize: 10,
             idField: "id",
             columns: [[
        { title: "测试1", field: "productid", width: "180", align: "center" },
        { title: "测试2", field: "productname", width: "300", align: "center" },
        { title: "测试3", field: "city", width: "300", align: "center" }
        ]]
         });
});
后台代码:
  public JsonResult GetGridData(int rows, int page)
        {
          
            //result为json数据格式测试
            string result = "";
            result += "{\"total\":" + (rows *page)+ " ";
            result += "rows:{[  ";
            for (int i = 0; i <= rows; i++)
            {
                result += "{\"productid\":编号" + i + ",\"productname\":姓名" + i + ",\"city\":城市" + i + "\"}";
            }
            result += "]}";            JsonResult js = Json(result, JsonRequestBehavior.AllowGet);
            return js;
        }

解决方案 »

  1.   

    1.你后台调用GetGridData这个方法时,传递了两个参数,为int型,没有传值;rows和page没有定义。
    2.你可以判断下,是不是后台数据没有穿过去,或者,后台数据出错,你可以在前台,使用ajax,调用你的url,看看返回的data是什么(就是你return的那个js)
    3.
      

  2.   

    或者是你的url没有写对,没有调用到,可以测试一下。
      

  3.   

    {"total":10 rows:{[  {"productid":编号0,"productname":姓名0,"city":城市0"}{"productid":编号1,"productname":姓名1,"city":城市1"}{"productid":编号2,"productname":姓名2,"city":城市2"}{"productid":编号3,"productname":姓名3,"city":城市3"}{"productid":编号4,"productname":姓名4,"city":城市4"}{"productid":编号5,"productname":姓名5,"city":城市5"}{"productid":编号6,"productname":姓名6,"city":城市6"}{"productid":编号7,"productname":姓名7,"city":城市7"}{"productid":编号8,"productname":姓名8,"city":城市8"}{"productid":编号9,"productname":姓名9,"city":城市9"}{"productid":编号10,"productname":姓名10,"city":城市10"}]}
    这是我的后台GetGridData得到的数据,所以你的1和3是错误的,,至于你的第二点,我不知道在哪个地方alert这个数据出来
      

  4.   

    返回的数据不标准,rows属性名称用双引号括起result += "\"rows\":{[  ";不是有第三方序列化为json字符串的类库吗,干嘛要自己组合起来。。麻烦死,其他属性名缺少双引号的还得自己括起,内容包含双引号的还得转移过Web开发学习资料推荐
    easyui datebox设置日期范围
    easyui开发技巧
      

  5.   

    { "total": 30,"page": 1 , "rows": [{"HTH":2000,"HTDM":"2","HSFS":0,"GHDWDM":"006470","WLDW_NAME":"路威酩轩香水化妆品(上海)有限公司","YSHTH":"10000009","DEPTID":585,"DEPT_NAME":"翠珠宝化妆采购部","QDDD":null,"QDSJ":null,"HTYXQ_START":"2014-01-01T00:00:00","HTYXQ_END":"2015-12-31T00:00:00","DFDW_RY":null,"STATUS":3,"NOTES":null,"DJSJ":"2013-07-01T00:00:00","DJR_NAME":"汪娅","SHR_NAME":"谭薇","QDR_NAME":null,"HTY_NAME":"杨雅丽"},{"HTH":600042000,"HTDM":"600042","HSFS":0,"GHDWDM":"000080","WLDW_NAME":"北京利德尔服装服饰有限责任公司","YSHTH":null,"DEPTID":585,"DEPT_NAME":"翠珠宝化妆采购部","QDDD":null,"QDSJ":null,"HTYXQ_START":"2017-09-21T00:00:00","HTYXQ_END":"2018-09-21T00:00:00","DFDW_RY":null,"STATUS":3,"NOTES":null,"DJSJ":"2017-09-21T15:04:51","DJR_NAME":"闫乐军","SHR_NAME":"闫乐军","QDR_NAME":null,"HTY_NAME":"日处理启动"}]};这个是我项目中返回的json格式的数据,你可以照着测试一下数据。
      

  6.   

    使用,这样,就可以加载数据。$("#HTCLsSearchDg").datagrid("loadData", $.parseJSON(datas).rows);
      

  7.   


    我后来发现,已经改过来了,可是还是没有数据。
      result += "{\"total\":" + (rows * page) + " ,";
                result += "\"rows\":{[  ";
                for (int i = 0; i <= rows; i++)
                {
                    //result += "{\"productid\":\"编号" + i + ",\"productname\":\"姓名" + i + ",\"city\":城市" + i + "\"}";
                    result += "{\"productid\":\"编号" + i + "\",\"productname\":\"姓名" + i + "\",\"city\":\"城市" + i + "\"}";
                }
                result += "]}";
    我只是想自己拼接,做个测试,然后再从数据库里面调。如果我连基本的字符串都绑定不了,那调用数据库的不是更不能行吗
      

  8.   


    if(i!=0)
    result += "{\"productid\":\"编号" + i + "\",\"productname\":\"姓名" + i + "\",\"city\":\"城市" + i + "\"},";
    else
    result += "{\"productid\":\"编号" + i + "\",\"productname\":\"姓名" + i + "\",\"city\":\"城市" + i + "\"}";
      

  9.   


    返回的内容:
    {"total":10 ,"rows":[{"productid":"编号0","productname":"姓名0","city":"城市0"}{"productid":"编号1","productname":"姓名1","city":"城市1"}{"productid":"编号2","productname":"姓名2","city":"城市2"}{"productid":"编号3","productname":"姓名3","city":"城市3"}{"productid":"编号4","productname":"姓名4","city":"城市4"}{"productid":"编号5","productname":"姓名5","city":"城市5"}{"productid":"编号6","productname":"姓名6","city":"城市6"}{"productid":"编号7","productname":"姓名7","city":"城市7"}{"productid":"编号8","productname":"姓名8","city":"城市8"}{"productid":"编号9","productname":"姓名9","city":"城市9"}{"productid":"编号10","productname":"姓名10","city":"城市10"}]}
      

  10.   

    随便在哪里引用下就行啊,类似这样啊
    $.ajax({
    beforeSend: function(xhr) {
    xhr.setRequestHeader('Authorization', 'Bearer ' + $.session.get("token"));
    },
    url: _server + _url,
    type: "post",
    contentType: 'application/json;charset=utf-8',
    dataType: "json",
    data: JSON.stringify(_data),//这里是传递的数据,没有可以写null
    success:  function(data) {
    console.log(data);//data就是后台传递过来的值
    },
    async: true,
    error: function(er) {
    alert('错误:' + JSON.stringify(er));
    }
    });
      

  11.   

    你这个rows对应数据中是不是少了个逗号???
      

  12.   


    我是说在  $('#dd').datagrid({})里面怎么alert出得到的数据,,用这种方法我是已经alert出返回结果了的。。
    这是我用另外一个方法,弹出的数据我后面加了“逗号”,,最后一个没加,,还是没有数据出来。。头疼啊
      

  13.   

      你要不然试试这样$('#dd').datagrid({});将其中的url置空,不写,先初始化,再然后使用ajax,调用url这样返回success中的data。返回的data直接loadData进去就行。
      

  14.   

    给里面定义一个page为当前第一页,“page”:1
      

  15.   

    同志们,谁能告诉我到底是咋回事。难道我用了一个假的easyUI嘛
      

  16.   

    你将datagrid里面的url置空为‘’;在后面加上
    $.ajax({
    beforeSend: function(xhr) {
    xhr.setRequestHeader('Authorization', 'Bearer ' + $.session.get("token"));
    },
    url: url,
    type: "post",
    contentType: 'application/json;charset=utf-8',
    dataType: "json",
    data: null,//这里是传递的数据,没有可以写null
    success:  function(data) {
    console.log(data);//data就是后台传递过来的值
    $("#id").datagrid("loadData", $.parseJSON(data).rows);//给传递过来的data中加入一个字段,就是“page”:1
    },
    async: true,
    error: function(er) {
    alert('错误:' + JSON.stringify(er));
    }
    });
      

  17.   

    我用我的第一种写法,easyUI表格中终于有了数据,可是分页好像没有用。官方文档上面是要把URL写在datagrid里面,才会带入分页行数和页数的。所以还是没有完成。哪位大神,帮帮忙啊
      

  18.   

    给datagrid中加入几个属性,pageSize:100,//默认每页显示的条数
                                                 pagination: true,//分页栏显示
      

  19.   

    属性pageList: [500, 1000, 1500, 2000],//默认显示,每页条数。。就是你下拉框里的值
      

  20.   

    pageList这个有的,,我是说点击以后多少列没有反应。照道理是点击了10列,显示10列,,点击20列,显示20列。。可是没有用,分页参数不起作用
      

  21.   

    pageSize:10,
    pageList: [10, 20, 30,40]//这两个要一起存在,不能单独使用,你说的点击每页显示条数不起作用,这个。。是不是测试数据太少了。。没遇到过。
      

  22.   

    后台没有写分页吧,前台传过去的page和rows你没用用到,所以拼完json传回来的是全部数据。
      

  23.   

    你先在后台获取下rows和page看下传值是否正确,然后针对list拼一个分页的写法出来
      

  24.   

    页面加载进去的时候,执行后台的方法是正确的,,rous和page的值,前台也能看出来啊。
    我现在说的是下拉列表的点击,和上一页下一页那些按钮的那些点击事件,根本就没有走后台方法。又何来的传值是否正确呢
      

  25.   

    $(function(){
        var page_json= {
        pageSize: 10,//每页显示的记录条数,默认为10
        pageList: [10,20,50],//可以设置每页记录条数的列表 
        displayMsg: '当前显示 {from} - {to} 条记录   共 {total} 条记录',
        onSelectPage: function (pageNumber, pageSize) {
            pageChange(pageNumber, pageSize);
        },
        layout: ['list', 'sep', 'first', 'prev', 'links', 'next', 'last', 'sep', 'refresh']
    };
     $(pid).datagrid('getPager').pagination(page_json);//初始化设置分页
    });
    function pageChange(index, size) {
        //在后台分页,ajax重新获取数据,返回data
        $(pid).datagrid('loadData', data);
    }
      

  26.   

    首先用loadData的这种数据加载方式,是不能使用datagrid自己的分页逻辑和事件的,除非你自己加上这些逻辑,如果你用loadData数据能出来,而后台的url出不来,那就是url返回的数据格式有问题。关于url返回数据正确后,分页的后台逻辑是要自己写的,easyui的前台是你传多少数据,就会显示多少数据,比如你传了1页10条,但你返回的是20条,它也会都显示出来,这是需要前后台配合的。后台请求有没有发出,要用浏览器调试看,不是没反应就是没发出请求。为了显示,我写了个假的url,虽然页面无反应,但是请求是发出了的。看form data数据
      

  27.   


    说的很有道理。经过这一步一步的测试下来,我写的能出数据的方法是因为在前台ajax里面将数据进行了转换,所以easyUI表格出现了数据,如果我直接传出来,页面不出数据的原因,确实是数据格式有问题,因为js里面提示 那个rows为null,说明easyUI没有接收到可是我在后台里面用了json转对象的方法的,,,还是报这个错误。这是我写的后台方法
      

  28.   

    json序列化后的jsonData格式再拼接result的字符串是什么,确定是json格式的吗
      

  29.   

    不知道问题解决没有,但是rows是不是空,json数据是否符合,在请求的response里查看一下就看到了。
      

  30.   

    搞的好麻烦 还用了ajax在外面看数据,easyui的datagrid有个loadFilter 方法,原本用法是过滤从后台传回的数据的,可以在此函数中加工回传的数据,在return时就会加载加工后的数组,当然如果有需要也可以用来查看你的数据是否正确,还有调试时最好用console.log打印,alert的数据显示有时候是不完整的
    这里建议你检查一下你回传的数据中的key是否与数据行中的field匹配
    如果数据一切都匹配,建议就在loadFilter 中做一次字符串转json的步骤在return出去试试
      

  31.   

    补充一下 loadFilter 是属性,参数是方法
      

  32.   

    loadFilter : function(data){
     //过滤数据操作
     return value;
    }
      

  33.   


    分页真有那么难吗?把要返回的list分页,在通过gson转换下就好啦
      

  34.   

    外部引入,要用easyui的分页组件做,意思就需要加载两个easyui的组件
      

  35.   

    回答上述几个点:
    1、easyui datagrid组件中的分页参数如果设置了显示,有默认参数,至于组件内数据有没有分页与这些参数的确有关系,但是别人做这个组件的人不是傻瓜,不会没意识到你漏加或者不加该参数造成的BUG的,默认参数我记得是5,10,15
    2、在datagrid中使用url获取数据的方式,easyui会自动将一些分页需要的参数传给后台,可以在后台打印出来看看,easyui此处用的是ajax提交
    3、如果使用外部传参的方式,分页函数要自己在调用easyui的分页组件,是比较麻烦的做法
    4、datagrid有提供loadFilter的属性,可以在这个方法属性中得到后台返回后且还没有被grid加载的数据,这种方式也可以用来加工数据字段