【问题标题】:SlickGrid is displayed but data is not populated in the grid显示 SlickGrid,但网格中未填充数据
【发布时间】:2014-10-05 14:54:40
【问题描述】:

SlickGrid 已显示,但数据未填充到网格中。直接ajax调用很好,但是dataview的问题请任何人帮助我

  var jqxhr = $.getJSON('http://localhost:50305/Service1.svc/json/Projects', function (data) {
                          for (var i = 0; i < data.length; i++) {
                                      slickdata[i] = {
                                          ProjectID: data[i].ProjectID,
                                          ProjectTypeID: data[i].ProjectTypeID,
                                          ProjectName: data[i].ProjectName,
                                      };
                                  }
                                  console.log("slickdata is" + slickdata);
                              dataView.onRowCountChanged.subscribe(function (e, args) {
                                      grid.updateRowCount();
                                      grid.render();
                                  });

                                  dataView.onRowsChanged.subscribe(function (e, args) {
                                      grid.invalidateRows(dataView.rows);
                                     grid.render();
                                  });

                                  dataView.beginUpdate();
                                  dataView.setItems(slickdata, "ProjectID");
                                  dataView.endUpdate();

                          dataView = new Slick.Data.DataView({ inlineFilters: true });
                        grid = new Slick.Grid("#teamGrid", dataView, columns, options);

【问题讨论】:

  • 输出在哪里 - 你能把它添加到问题中吗?
  • 我无法插入输出图像,它只显示列名和 div

标签: json slickgrid


【解决方案1】:

一旦定义了网格,你就需要做

grid.init();

因为

alert(data);

是一个 json 对象,警报是正确的。将数据发送到控制台,您可以在那里看到 json 对象

【讨论】:

  • 看看dataview link 需要将数据添加到dataview(你使用'mydata'的地方),然后应该调用grid.init()
  • 我正在像这样使用 DataView var dataview = new Slick.Data.DataView(); grid = new Slick.Grid("#teamGrid", dataview, columns, options);但数据不会添加到数据视图中。
【解决方案2】:

如果您想使用评论中提到的Dataview。您需要几行代码,还需要将data 添加到dataview 对象。请参阅以下内容:

// create DataView & Grid object
var dataView = new Slick.Data.DataView();
var grid = new Slick.Grid("#myGrid", dataView, columns, options);

// then bind data to the DataView object
dataView.beginUpdate();
dataView.setItems(data);
dataView.endUpdate();

您可以在此处查看更完整的 DataView 示例:Example4-model


编辑
您的问题似乎在您的数据中没有唯一的 id 属性,尽管 SlickGrid 特别需要它并且如果您没有 id 会在控制台中引发错误。我通常更喜欢在服务器端解决这个问题(PHP 或您使用的任何语言)。您还可以通过 javascript 添加 id 属性,如下所示:

for (var i = 0; i < data.length; i++) {
  data.id = data[i].ProjectID; // clone your ProjectID into a new 'id' property
}

// then bind data to the DataView object
dataView.beginUpdate();
dataView.setItems(data);
dataView.endUpdate();

【讨论】:

  • 我正在按照您的建议更新我的问题,但数据没有绑定
  • 在您的问题中,我看到 2 个可能的问题... 1- SlickGrid 依赖于具有 id 属性的数据数组(也都是小写),并且必须是唯一的 id 并且在您的内部例如,您似乎有未命名为 id 的“ProjectID”,我建议您在源(服务器端)更改它... 2-您为什么要执行 for 循环?不用了,直接把数据传成这个dataView.setItems(data);
  • 而不是将 ProjectId 更改为 id 我这样写 dataView.setItems(slickdata, "ProjectID");我正在尝试两种方式直接传递“数据”并将数据转换为数组并将数据添加到数据视图中。上次遇到同样的问题,因为 json 数据的格式不同,但现在我无法理解这里的问题,我会以任何方式更改并尝试我的服务器代码来更改 id
  • 感谢您的回复,我知道了 grid = new Slick.Grid("#teamGrid", dataView.rows, columns, options);这里我绑定 dataView.rows 而不是 dataView
  • 抱歉,我不明白您的评论...但作为建议,您应该安装 Firebug(Firefox 扩展)以进行故障排除。如果您还没有,那应该会对您有所帮助。
猜你喜欢
  • 2017-01-29
  • 2016-04-08
  • 1970-01-01
  • 2014-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多