jQuery MiniUI

标题: DataGrid 动态加载列未显示?? [打印本页]

作者: linda931    时间: 2013-9-16 09:16:42     标题: DataGrid 动态加载列未显示??

function onSearch() {
            var form = new mini.Form("#form1");
            form.validate();
            if (form.isValid() == false) return;
            var data = form.getData();
            var json = mini.encode(data);
            $.ajax({
                url: "../SaleManager/SysModel.aspx?method=GetSaleColums",
                data: { data: json },
                cache: false,
                success: function (text) {
                    grid.set(text);
                }
            });
         
//            grid.set({
//                columns: [
//            { type: "indexcolumn" },
//            { field: "机构", width: 100, headerAlign: "center", header: "机构" },
//            { field: "纯净水18.9数量", width: 100, headerAlign: "center", header: "纯净水18.9数量" },
//            { field: "纯净水18.9金额", width: 100, headerAlign: "center", header: "纯净水18.9金额" },
//            { field: "数量合计", width: 100, headerAlign: "center", header: "数量合计" },
//            { field: "金额合计", width: 100, headerAlign: "center", header: "金额合计" }
//            ]});
            grid.setUrl("../Sytem/SysDate.aspx?method=GetSaleDay");
            grid.load({ data: json });

        }

以上代码注释掉的为GetSaleColums 获取的表头信息。但是在这种写法下没有显示获取到的结果集?
但是总记录数数是正确的。


作者: lost    时间: 2013-9-16 09:19:05

http://www.miniui.com/demo/#src=datagrid/setcolumns.html
参考这个示例demo做
作者: linda931    时间: 2013-9-16 09:19:22

如果在程序中直接使用grid.set()方法中注释的程序是可以正确的显示的。这是什么原因?
作者: linda931    时间: 2013-9-16 09:27:35

lost 发表于 2013-9-16 09:19
http://www.miniui.com/demo/#src=datagrid/setcolumns.html
参考这个示例demo做

我就是参照那个列子,但是我使用方法获取数据列后再使用grid.set()方法并没有显示出列记录,只是在底部显示了共多少条记录?
作者: lost    时间: 2013-9-16 10:23:01

linda931 发表于 2013-9-16 09:27
我就是参照那个列子,但是我使用方法获取数据列后再使用grid.set()方法并没有显示出列记录,只是在底部显 ...

数据不能显示是你field的写错误了,field对应的是你数据库中的数据的名称(name),header自定义是列的名称。
作者: linda931    时间: 2013-9-16 10:36:56

lost 发表于 2013-9-16 09:19
http://www.miniui.com/demo/#src=datagrid/setcolumns.html
参考这个示例demo做

??  看看这样能解决吗???
作者: linda931    时间: 2013-9-16 10:39:12

lost 发表于 2013-9-16 09:19
http://www.miniui.com/demo/#src=datagrid/setcolumns.html
参考这个示例demo做

我使用方法获取的列是不确定的? 为什么不显示结果?
作者: linda931    时间: 2013-9-16 10:55:08

lost 发表于 2013-9-16 10:23
数据不能显示是你field的写错误了,field对应的是你数据库中的数据的名称(name),header自定义是列的名 ...

field 没有写错,我是在后台直接获取datatable的数据列名的。
作者: factory    时间: 2013-9-16 11:14:45

linda931 发表于 2013-9-16 10:55
field 没有写错,我是在后台直接获取datatable的数据列名的。

如果是动态的列,那你得先grid.setColumns(columns)
给表格设定新的列,然后再通过url去加载数据
作者: linda931    时间: 2013-9-16 11:19:50

本帖最后由 linda931 于 2013-9-16 11:21 编辑
factory 发表于 2013-9-16 11:14
如果是动态的列,那你得先grid.setColumns(columns)
给表格设定新的列,然后再通过url去加载数据 ...

那grid.setColumns(columns)中的columns还是这种格式吗?
{  columns: [
            { type: "indexcolumn" },
            { field: "机构", width: 100, headerAlign: "center", header: "机构" },
            { field: "纯净水18.9数量", width: 100, headerAlign: "center", header: "纯净水18.9数量" },
            { field: "纯净水18.9金额", width: 100, headerAlign: "center", header: "纯净水18.9金额" },
            { field: "数量合计", width: 100, headerAlign: "center", header: "数量合计" },
            { field: "金额合计", width: 100, headerAlign: "center", header: "金额合计" }
            ]}

如果还是这种格式也没有显示出来

作者: linda931    时间: 2013-9-16 11:22:48

factory 发表于 2013-9-16 11:14
如果是动态的列,那你得先grid.setColumns(columns)
给表格设定新的列,然后再通过url去加载数据 ...

function onSearch() {
            var form = new mini.Form("#form1");
            form.validate();
            if (form.isValid() == false) return;
            var data = form.getData();
            var json = mini.encode(data);
            $.ajax({
                url: "../SaleManager/SysModel.aspx?method=GetSaleColums",
                data: { data: json },
                cache: false,
                success: function (text) {
                    grid.set(text);
                }
            });  
            grid.setUrl("../Sytem/SysDate.aspx?method=GetSaleDay");
            grid.load({ data: json });

        }

是把上面的  grid.set(text); 修改成grid.setColumns(text)??

作者: factory    时间: 2013-9-16 11:31:45

linda931 发表于 2013-9-16 11:22
function onSearch() {
            var form = new mini.Form("#form1");
            form.validate(); ...

对,grid.set(..)你需要给到他属性啊,不然不知道你这个text是给的表头?还是数据?还是url?

grid.setColumns(text)
或者grid.set({
   columns:text
})
作者: linda931    时间: 2013-9-16 11:34:52

factory 发表于 2013-9-16 11:31
对,grid.set(..)你需要给到他属性啊,不然不知道你这个text是给的表头?还是数据?还是url?

grid.setColumn ...

{
                columns: [
            { type: "indexcolumn" },
            { field: "机构", width: 100, headerAlign: "center", header: "机构" },
            { field: "纯净水18.9数量", width: 100, headerAlign: "center", header: "纯净水18.9数量" },
            { field: "纯净水18.9金额", width: 100, headerAlign: "center", header: "纯净水18.9金额" },
            { field: "数量合计", width: 100, headerAlign: "center", header: "数量合计" },
            { field: "金额合计", width: 100, headerAlign: "center", header: "金额合计" }
            ]}
这就是text的内容
只有机构后面的列是变化的

作者: factory    时间: 2013-9-16 11:41:24

linda931 发表于 2013-9-16 11:34
{
                columns: [
            { type: "indexcolumn" },

grid.setColumns(text.columns)
参数必须为数组

动态修改列,只能是重新setColumns()全部列
不能只修改列中一列,或者几列,其他不变.
作者: linda931    时间: 2013-9-16 11:41:38

本帖最后由 linda931 于 2013-9-16 11:43 编辑
lost 发表于 2013-9-16 11:34
field是对应到数据库字段的名称,不可能是中文的。
http://www.miniui.com/demo/#src=datagrid/mergecolu ...

我这是使用存储过程做一个查询报表 表头是产品信息名称,第一列是机构名称。
类似:一下数据
姓名 科目  分数
001   语文  99
001   数学  89
002   英语  87
002   数学  90
显示报表结果(或者在C#Datatable中的结果就是这样的)
姓名     语文   数学  英语
001     99       89     0
002      0        90     87


作者: linda931    时间: 2013-9-16 11:46:20

factory 发表于 2013-9-16 11:41
grid.setColumns(text.columns)
参数必须为数组

我写的查询方法中就有一个方法:
$.ajax({
                url: "../SaleManager/SysModel.aspx?method=GetSaleColums",
                data: { data: json },
                cache: false,
                success: function (text) {
                    grid.set(text);
                }
            });  
就是来从新修改全部的列。 只不过第一序号、和机构在结果中总是存在的
作者: factory    时间: 2013-9-16 13:28:57

linda931 发表于 2013-9-16 11:46
我写的查询方法中就有一个方法:
$.ajax({
                url: "../SaleManager/SysModel.aspx?method ...

那你的数据总得有个字段名吧?
比如{name:"001",lesson:"语文",point:"99"}

那你的 列应该是这样的
[
    {field:"name",header:"姓名"},
    {fiedl:"lesson",header:科目"},
    {field:"point",header:"分数"}
]
作者: linda931    时间: 2013-9-16 14:13:42

factory 发表于 2013-9-16 13:28
那你的数据总得有个字段名吧?
比如{name:"001",lesson:"语文",point:"99"}

[{ type: "indexcolumn" },{ field: "机构",width: 100, headerAlign: "center", header:"机构"},{ field: "纯净水11.3升数量",width: 100, headerAlign: "center", header:"纯净水11.3升数量"},{ field: "纯净水11.3升金额",width: 100, headerAlign: "center", header:"纯净水11.3升金额"},{ field: "纯净水18.9数量",width: 100, headerAlign: "center", header:"纯净水18.9数量"},{ field: "纯净水18.9金额",width: 100, headerAlign: "center", header:"纯净水18.9金额"},{ field: "精包装纯净水11.3数量",width: 100, headerAlign: "center", header:"精包装纯净水11.3数量"},{ field: "精包装纯净水11.3金额",width: 100, headerAlign: "center", header:"精包装纯净水11.3金额"},{ field: "矿物质水11.3数量",width: 100, headerAlign: "center", header:"矿物质水11.3数量"},{ field: "矿物质水11.3金额",width: 100, headerAlign: "center", header:"矿物质水11.3金额"},{ field: "矿物质水18.9数量",width: 100, headerAlign: "center", header:"矿物质水18.9数量"},{ field: "矿物质水18.9金额",width: 100, headerAlign: "center", header:"矿物质水18.9金额"},{ field: "矿物质水9升数量",width: 100, headerAlign: "center", header:"矿物质水9升数量"},{ field: "矿物质水9升金额",width: 100, headerAlign: "center", header:"矿物质水9升金额"},{ field: "数量合计",width: 100, headerAlign: "center", header:"数量合计"},{ field: "金额合计",width: 100, headerAlign: "center", header:"金额合计"}]

这是 grid.setColumns(text);中的text内容。

作者: linda931    时间: 2013-9-16 14:16:13

本帖最后由 linda931 于 2013-9-16 14:20 编辑
factory 发表于 2013-9-16 13:28
那你的数据总得有个字段名吧?
比如{name:"001",lesson:"语文",point:"99"}
{"total":20,"data":[{"矿物质水18.9金额":0.00,"金额合计":6.80,"精包装纯净水11.3金额":0.00,"矿物质水11.3金额":0.00,"数量合计":1.00,"矿物质水9升数量":0.00,"矿物质水11.3数量":0.00,"纯净水18.9数量":1.00,"矿物质水18.9数量":0.00,"精包装纯净水11.3数量":0.00,"纯净水11.3升金额":0.00,"纯净水18.9金额":6.80,"纯净水11.3升数量":0.00,"矿物质水9升金额":0.00,"机构":"测试公司"},{"矿物质水18.9金额":0.00,"金额合计":13.60,"精包装纯净水11.3金额":0.00,"矿物质水11.3金额":0.00,"数量合计":2.00,"矿物质水9升数量":0.00,"矿物质水11.3数量":0.00,"纯净水18.9数量":2.00,"矿物质水18.9数量":0.00,"精包装纯净水11.3数量":0.00,"纯净水11.3升金额":0.00,"纯净水18.9金额":13.60,"纯净水11.3升数量":0.00,"矿物质水9升金额":0.00,"机构":"北12"},{"矿物质水18.9金额":19.60,"金额合计":19.60,"精包装纯净水11.3金额":0.00,"矿物质水11.3金额":0.00,"数量合计":2.00,"矿物质水9升数量":0.00,"矿物质水11.3数量":0.00,"纯净水18.9数量":0.00,"矿物质水18.9数量":2.00,"精包装纯净水11.3数量":0.00,"纯净水11.3升金额":0.00,"纯净水18.9金额":0.00,"纯净水11.3升数量":0.00,"矿物质水9升金额":0.00,"机构":"北345"},{"矿物质水18.9金额":0.00,"金额合计":36.40,"精包装纯净水11.3金额":0.00,"矿物质水11.3金额":0.00,"数量合计":7.00,"矿物质水9升数量":0.00,"矿物质水11.3数量":0.00,"纯净水18.9数量":7.00,"矿物质水18.9数量":0.00,"精包装纯净水11.3数量":0.00,"纯净水11.3升金额":0.00,"纯净水18.9金额":36.40,"纯净水11.3升数量":0.00,"矿物质水9升金额":0.00,"机构":"小区自提点"},{"矿物质水18.9金额":0.00,"金额合计":109.20,"精包装纯净水11.3金额":0.00,"矿物质水11.3金额":0.00,"数量合计":21.00,"矿物质水9升数量":0.00,"矿物质水11.3数量":0.00,"纯净水18.9数量":21.00,"矿物质水18.9数量":0.00,"精包装纯净水11.3数量":0.00,"纯净水11.3升金额":0.00,"纯净水18.9金额":109.20,"纯净水11.3升数量":0.00,"矿物质水9升金额":0.00,"机构":"sa自提点"},{"矿物质水18.9金额":29.40,"金额合计":138.20,"精包装纯净水11.3金额":0.00,"矿物质水11.3金额":0.00,"数量合计":19.00,"矿物质水9升数量":0.00,"矿物质水11.3数量":0.00,"纯净水18.9数量":16.00,"矿物质水18.9数量":3.00,"精包装纯净水11.3数量":0.00,"纯净水11.3升金额":0.00,"纯净水18.9金额":108.80,"纯净水11.3升数量":0.00,"矿物质水9升金额":0.00,"机构":"北区送水点"},{"矿物质水18.9金额":29.40,"金额合计":138.20,"精包装纯净水11.3金额":0.00,"矿物质水11.3金额":0.00,"数量合计":19.00,"矿物质水9升数量":0.00,"矿物质水11.3数量":0.00,"纯净水18.9数量":16.00,"矿物质水18.9数量":3.00,"精包装纯净水11.3数量":0.00,"纯净水11.3升金额":0.00,"纯净水18.9金额":108.80,"纯净水11.3升数量":0.00,"矿物质水9升金额":0.00,"机构":"东区送水公司"},{"矿物质水18.9金额":58.80,"金额合计":303.60,"精包装纯净水11.3金额":0.00,"矿物质水11.3金额":0.00,"数量合计":42.00,"矿物质水9升数量":0.00,"矿物质水11.3数量":0.00,"纯净水18.9数量":36.00,"矿物质水18.9数量":6.00,"精包装纯净水11.3数量":0.00,"纯净水11.3升金额":0.00,"纯净水18.9金额":244.80,"纯净水11.3升数量":0.00,"矿物质水9升金额":0.00,"机构":"西区送水公司"},{"矿物质水18.9金额":39.20,"金额合计":306.00,"精包装纯净水11.3金额":0.00,"矿物质水11.3金额":8.80,"数量合计":43.00,"矿物质水9升数量":0.00,"矿物质水11.3数量":1.00,"纯净水18.9数量":38.00,"矿物质水18.9数量":4.00,"精包装纯净水11.3数量":0.00,"纯净水11.3升金额":0.00,"纯净水18.9金额":258.00,"纯净水11.3升数量":0.00,"矿物质水9升金额":0.00,"机构":"派送公司"},{"矿物质水18.9金额":41.00,"金额合计":347.80,"精包装纯净水11.3金额":0.00,"矿物质水11.3金额":0.00,"数量合计":64.00,"矿物质水9升数量":0.00,"矿物质水11.3数量":0.00,"纯净水18.9数量":59.00,"矿物质水18.9数量":5.00,"精包装纯净水11.3数量":0.00,"纯净水11.3升金额":0.00,"纯净水18.9金额":306.80,"纯净水11.3升数量":0.00,"矿物质水9升金额":0.00,"机构":"传媒自提点"},{"矿物质水18.9金额":73.80,"金额合计":503.20,"精包装纯净水11.3金额":6.20,"矿物质水11.3金额":7.20,"数量合计":97.00,"矿物质水9升数量":5.00,"矿物质水11.3数量":1.00,"纯净水18.9数量":81.00,"矿物质水18.9数量":9.00,"精包装纯净水11.3数量":1.00,"纯净水11.3升金额":0.00,"纯净水18.9金额":385.80,"纯净水11.3升数量":0.00,"矿物质水9升金额":30.20,"机构":"测试自提点"},{"矿物质水18.9金额":24.60,"金额合计":621.40,"精包装纯净水11.3金额":12.40,"矿物质水11.3金额":7.20,"数量合计":117.00,"矿物质水9升数量":0.00,"矿物质水11.3数量":1.00,"纯净水18.9数量":111.00,"矿物质水18.9数量":3.00,"精包装纯净水11.3数量":2.00,"纯净水11.3升金额":0.00,"纯净水18.9金额":577.20,"纯净水11.3升数量":0.00,"矿物质水9升金额":0.00,"机构":"we自提点"},{"矿物质水18.9金额":123.00,"金额合计":971.40,"精包装纯净水11.3金额":18.60,"矿物质水11.3金额":0.00,"数量合计":175.00,"矿物质水9升数量":6.00,"矿物质水11.3数量":0.00,"纯净水18.9数量":151.00,"矿物质水18.9数量":15.00,"精包装纯净水11.3数量":3.00,"纯净水11.3升金额":0.00,"纯净水18.9金额":793.80,"纯净水11.3升数量":0.00,"矿物质水9升金额":36.00,"机构":"自提点"},{"矿物质水18.9金额":172.20,"金额合计":1194.80,"精包装纯净水11.3金额":31.00,"矿物质水11.3金额":28.80,"数量合计":215.00,"矿物质水9升数量":1.00,"矿物质水11.3数量":4.00,"纯净水18.9数量":183.00,"矿物质水18.9数量":21.00,"精包装纯净水11.3数量":5.00,"纯净水11.3升金额":5.00,"纯净水18.9金额":951.60,"纯净水11.3升数量":1.00,"矿物质水9升金额":6.20,"机构":"大厅自提点"},{"矿物质水18.9金额":294.00,"金额合计":1563.60,"精包装纯净水11.3金额":7.80,"矿物质水11.3金额":17.60,"数量合计":216.00,"矿物质水9升数量":0.00,"矿物质水11.3数量":2.00,"纯净水18.9数量":183.00,"矿物质水18.9数量":30.00,"精包装纯净水11.3数量":1.00,"纯净水11.3升金额":0.00,"纯净水18.9金额":1244.20,"纯净水11.3升数量":0.00,"矿物质水9升金额":0.00,"机构":"西12"}]}

这是datagrid的数据。但是就是不显示结果
作者: linda931    时间: 2013-9-16 14:26:22

本帖最后由 linda931 于 2013-9-16 14:28 编辑
factory 发表于 2013-9-16 13:28
那你的数据总得有个字段名吧?
比如{name:"001",lesson:"语文",point:"99"}

也就是说我如果直接在grid.setColumns()中把调试出的结果写在里面是可以直接显示出结果来的。

那你们能否使用我上面的方法把结果显示出来??即使用方法获取显示的结构再使用grid.setColumns()把结果显示出来,而
不是把grid.setColumns()设置的列在前台写好了在把结果显示出来
作者: linda931    时间: 2013-9-16 16:30:39

factory 发表于 2013-9-16 13:28
那你的数据总得有个字段名吧?
比如{name:"001",lesson:"语文",point:"99"}

能帮忙找出问题来吗?
作者: factory    时间: 2013-9-16 16:42:48

linda931 发表于 2013-9-16 14:26
也就是说我如果直接在grid.setColumns()中把调试出的结果写在里面是可以直接显示出结果来的。

那你们能否 ...

不是,你setColumns()是设置的表头

数据的话,要么url加载后台返回的json字符串,如果是你自己用ajax交互的,返回数据之后
grid.setData(text.data)
grid.setTotalCount(text.total)
作者: linda931    时间: 2013-9-16 16:46:10

本帖最后由 linda931 于 2013-9-16 16:51 编辑
factory 发表于 2013-9-16 16:42
不是,你setColumns()是设置的表头

数据的话,要么url加载后台返回的json字符串,如果是你自己用ajax交互的 ...

怎么感觉你没有看懂我的意思

function onSearch() {
            var form = new mini.Form("#form1");
            form.validate();
            if (form.isValid() == false) return;
            var data = form.getData();
            var json = mini.encode(data);
            $.ajax({
                url: "../SaleManager/SysModel.aspx?method=GetSaleColums",
                data: { data: json },
                cache: false,
                success: function (text) {
                     grid.setColumns(text);
                }
            });        

            grid.setUrl("../Sytem/SysDate.aspx?method=GetSaleDay");
            grid.load({ data: json });
        }

上面的方法中:下面的代码是获取表头信息(表头的信息可以看 上面18#回复内容)
$.ajax({
                url: "../SaleManager/SysModel.aspx?method=GetSaleColums",
                data: { data: json },
                cache: false,
                success: function (text) {
                     grid.setColumns(text);
                }
            });        

下面的代码是获取数据(上面19#是实际数据内容)
grid.setUrl("../Sytem/SysDate.aspx?method=GetSaleDay");
            grid.load({ data: json });

但是最终就是不显示结果。
如果把18#的内容直接用  grid.setColumns()方法则数据可以正常呈现。
作者: linda931    时间: 2013-9-16 17:27:19

factory 发表于 2013-9-16 16:42
不是,你setColumns()是设置的表头

数据的话,要么url加载后台返回的json字符串,如果是你自己用ajax交互的 ...

能告诉我到底问题出在那吗???

作者: factory    时间: 2013-9-16 17:40:41

linda931 发表于 2013-9-16 17:27
能告诉我到底问题出在那吗???

你18楼贴的是你的表头信息,用grid.setColumns()是对的啊.
另外,你ajax返回的如果是json字符串,需要转回数组能用grid.setColumns()

var columns = mini.decode(text);
grid.setColumns(columns)
作者: factory    时间: 2013-9-16 17:47:21

本帖最后由 factory 于 2013-9-16 18:19 编辑
linda931 发表于 2013-9-16 17:27
能告诉我到底问题出在那吗???

另外,你的field如果带.号 那么我们会把你的数据当成复杂对象处理

比如
{
    name:{a:"2"}
}

那么field="name.a"
会把你数据当成上面这种结构来解析.  而不是{name.a:2},导致你的数据不存在
你把a.b改成a_b,把. 换掉

作者: linda931    时间: 2013-9-17 09:00:46

factory 发表于 2013-9-16 17:47
另外,你的field如果带.号 那么我们会把你的数据当成复杂对象处理

比如

这样基本解决了。但是把  . 换成别的符号就是不直观了。

但是至少我知道问题出在那了。




作者: factory    时间: 2013-9-17 09:30:59

linda931 发表于 2013-9-17 09:00
这样基本解决了。但是把  . 换成别的符号就是不直观了。

但是至少我知道问题出在那了。

因为很多客户的数据数据就是上面这种格式的,所以a.b就是对应那种格式




欢迎光临 jQuery MiniUI (http://miniui.com/discuss/) Powered by Discuz! X2