jQuery MiniUI

标题: datagrid增加行问题 [打印本页]

作者: xss511    时间: 2014-7-24 14:42:40     标题: datagrid增加行问题

当datagrid加载完成后,需要添加一行合计,不过合计行先出现,会被后面出现的数据覆盖,这个问题该怎么解决?

作者: felt    时间: 2014-7-24 14:51:35

什么意思,看不明白
作者: xss511    时间: 2014-7-24 15:02:33

felt 发表于 2014-7-24 14:51
什么意思,看不明白

我直接贴代码吧
            //查询数据
            function search() {
            var concode = mini.get("btnEditC").getValue();
            var pcode = mini.get("btnEditP").getValue();
            var startDate = mini.get("startDate").getFormValue();
            var endDate = mini.get("endDate").getFormValue();
            var divs = document.getElementById("showDiv");
            divs.style.display='block';
            setDate(startDate,endDate);
            var stMonth = mini.get("hdstMonth").getValue();
            var endMonth = mini.get("hdEndMonth").getValue();
            var theYear = mini.get("hdYear").getValue();
            grid.setUrl("${pageContext.request.contextPath}/budget/cptPayAlsController/pageInfo");
            grid.load({ stMonth: stMonth ,endMonth:endMonth,theYear:theYear});
        }
            
            //设置显示的时间
            function setDate(startDate,endDate){
                    //获取统计年份
                    var theYear = endDate.split("-");
                    var thisYear = theYear[0];
                    //判断月份前面是否需要加1
                    var startCheck = startDate.charAt(5);
                    var endCheck = endDate.charAt(5);
                    //得到月份
                    var stMonth = 0;
                    var endMonth = 0;
                    if(startCheck  == 0) stMonth = startDate.charAt(6);
                    if(startCheck  == 1) stMonth = 1+startDate.charAt(6);
                    if(endCheck == 0) endMonth = endDate.charAt(6);
                    if(endCheck == 1) endMonth = 1+endDate.charAt(6);
                     
                    //显示选择的时间
                    $("#stMonth").html(stMonth);
                    $("#endMonth").html(endMonth);
                    $("#years").html(thisYear);
                   
                    mini.get("hdYear").setValue(thisYear);
                    mini.get("hdstMonth").setValue(stMonth);
            mini.get("hdEndMonth").setValue(endMonth);
            createGrid(stMonth,endMonth);
            }
            
            
            //动态添加列
            function createGrid(stMonth,endMonth) {
                    var  columns=[
                              { type: "indexcolumn" , width: 40, headerAlign: "center", allowSort: true,header:"行次"},
                              { field: "pcode", width: 80, headerAlign: "center", allowSort: true, header: "项目编码"},
                              { field: "year_budget", width: 80, headerAlign: "center", allowSort: true, header: "年度预算"},
                              { field: "allbud", width: 80, headerAlign: "center", allowSort: true, header: "月度现金预<br/>算合计"},
                              { field: "allpay", width: 80, headerAlign: "center", allowSort: true, header: "实际支出合<br/>计"},
                              { headerAlign: "center", allowSort: true, header: "现金预算执行情况",columns:[]}
                           ];
                for(var i = stMonth;i<=endMonth;i++){
                            var theMonth = months[i-1];
                            var newColumns = {headerAlign: "center", allowSort: true, header: theMonth,columns:[
                                      {field: "bun_mon"+i, width: 50, headerAlign: "center", allowSort: true, header: "预算"},
                                     {field: "pay_mon"+i, width: 50, headerAlign: "center", allowSort: true, header: "执行"},   
                                     {field: "wcl"+i, width: 50, headerAlign: "center", allowSort: true, header: "完成率"}
                                                                ]
                                          };
                            columns[5].columns.push(newColumns);
                    }
                grid.setColumns(columns);
                var indexs = grid.data.length;
                //grid.load();
                totalAll(stMonth, endMonth,indexs);
                
            }
            
            //添加合计行
            function totalAll(stMonth,endMonth){
                    var total = 0;
                for (var i = 0, l = grid.data.length; i < l; i++) {
                    var row = grid.data;
                    var num = new Number(row.lj);
                    var t=parseFloat(num.toFixed(1));
                    if (isNaN(t)) continue;
                    total += t;
                }
                var row = {
                            pcode:"<label style='font-weight: bolder;'>合计</label>",
                                bun_mon6:"50.1",
                                bun_mon7:"50.1"
                                };
                    //rows.push(row);
                        grid.addRow(row, grid.data.length+1);
            }
作者: felt    时间: 2014-7-24 15:21:52

xss511 发表于 2014-7-24 15:02
我直接贴代码吧
            //查询数据
            function search() {

用表格自带的合计行好了
http://www.miniui.com/demo/#src=datagrid/summary.html
你的代码是在里面添加一行,固定的添加,如果数据有变动肯定加的那行就没了
作者: xss511    时间: 2014-7-24 15:30:36

felt 发表于 2014-7-24 15:21
用表格自带的合计行好了
http://www.miniui.com/demo/#src=datagrid/summary.html
你的代码是在里面添加 ...

这个自带的合计,可以像手动添加那样,控制合计和数据的显示位置吗?因为要合计的有多列,如果用自带的,显示效果就不好了。
作者: felt    时间: 2014-7-24 16:24:56

xss511 发表于 2014-7-24 15:30
这个自带的合计,可以像手动添加那样,控制合计和数据的显示位置吗?因为要合计的有多列,如果用自带的, ...

你这样增加只能在表格操作的最后执行,如果有其他的表格操作,你这加的行肯定就被混掉了
所以还是建议用我们的汇总行
请参考我们的例子
http://www.miniui.com/demo/#src=datagrid/summary.html
作者: xss511    时间: 2014-7-25 09:41:42

felt 发表于 2014-7-24 16:24
你这样增加只能在表格操作的最后执行,如果有其他的表格操作,你这加的行肯定就被混掉了
所以还是建议用 ...

使用汇总行计算出来的数据,怎么能获取到呢?
作者: felt    时间: 2014-7-25 10:35:30

xss511 发表于 2014-7-25 09:41
使用汇总行计算出来的数据,怎么能获取到呢?

1 汇总行我们提供了简单的计算方法,列上设置summaryType=ount|min|max|sum|avg,保证精确的话指定数据类型dataType="string|int|float|date|boolean|currency“
2 如果你要自己计算的话,可以在ondrawsummarycell事件里处理
http://www.miniui.com/demo/#src=datagrid/summary.html
3 你3楼贴的方法最大的问题是你添加行的时机不对,你数据加载grid.load在你添加行的方法setData之后,肯定就被覆盖了    你要用也必须在回调里处理grid.load({...},function(e){ setDate...})
作者: xss511    时间: 2014-7-25 11:06:51

felt 发表于 2014-7-25 10:35
1 汇总行我们提供了简单的计算方法,列上设置summaryType=ount|min|max|sum|avg,保证精确的话指定数据类 ...

[attach]4885[/attach]
如图,我是想把合计这一行的数据传到服务器,可是我不知道怎么去获取这一列的数据?

作者: felt    时间: 2014-7-25 14:32:38

xss511 发表于 2014-7-25 11:06
如图,我是想把合计这一行的数据传到服务器,可是我不知道怎么去获取这一列的数据?
...

这个数据只有在ondrawsummarycell的时候获取
你设置一个全局变量,在这个事件的方法里取到数据,保存在变量里,后台提交的时候就把这个变量的数据取出来
作者: xss511    时间: 2014-7-28 11:10:51

felt 发表于 2014-7-25 14:32
这个数据只有在ondrawsummarycell的时候获取
你设置一个全局变量,在这个事件的方法里取到数据,保存在变 ...

//汇总
                  function onDrawSummaryCell(e) {
            var grid = e.sender;
            if(e.field == "pcode"){
                    e.cellHtml = "<b>合计</b>";
            }
            totals = e.cellHtml;
        }
作者: xss511    时间: 2014-7-28 11:11:27

felt 发表于 2014-7-25 14:32
这个数据只有在ondrawsummarycell的时候获取
你设置一个全局变量,在这个事件的方法里取到数据,保存在变 ...

像这样定义全局变量,是不是错了,怎么获取不到?   
            //汇总
                  function onDrawSummaryCell(e) {
            var grid = e.sender;
            if(e.field == "pcode"){
                    e.cellHtml = "<b>合计</b>";
            }
            totals = e.cellHtml;
        }
作者: xss511    时间: 2014-7-28 16:11:14

felt 发表于 2014-7-25 14:32
这个数据只有在ondrawsummarycell的时候获取
你设置一个全局变量,在这个事件的方法里取到数据,保存在变 ...

我直接使用
变量 = e.cellHtml,可是获取不到数据,请问该怎么获取?
作者: dforce    时间: 2014-7-28 16:22:54

xss511 发表于 2014-7-28 16:11
我直接使用
变量 = e.cellHtml,可是获取不到数据,请问该怎么获取?

var totals;
function onDrawSummaryCell(e) {
            var grid = e.sender;
            if(e.field == "pcode"){
                    e.cellHtml = "<b>合计</b>";
            }
            totals = e.cellHtml;
        }

作者: xss511    时间: 2014-7-28 16:54:47

dforce 发表于 2014-7-28 16:22
var totals;
function onDrawSummaryCell(e) {
            var grid = e.sender;

[attach]4910[/attach]
页面有数据
                  var totals;
                function onDrawSummaryCell(e) {
            var grid = e.sender;
            totals = e.cellHtml;
            if(e.field == "pcode"){
                    e.cellHtml = "<b>合计</b>";
            }
        }

我这样写了,可以通过其他方法alert(totals);时什么也没有啊?

作者: felt    时间: 2014-7-28 17:25:15

xss511 发表于 2014-7-28 16:54
页面有数据
                  var totals;
                function onDrawSummaryCell(e) {

看你其他方法触发的时机了,如果是在drawsummary事件前,肯定就是没有
作者: xss511    时间: 2014-7-28 17:57:31

felt 发表于 2014-7-28 17:25
看你其他方法触发的时机了,如果是在drawsummary事件前,肯定就是没有

加载完成后,我点击其他按钮,alert这个参数没值。这应该是drawsummary事件后了
作者: felt    时间: 2014-7-28 20:37:29

xss511 发表于 2014-7-28 17:57
加载完成后,我点击其他按钮,alert这个参数没值。这应该是drawsummary事件后了 ...

drawsummarycell是有一列绘制一次,你这样写不就前面的被后面的覆盖掉了吗
你totals要存什么
vat totals={};
function ...{
   if(field=="pcode"){
     totals.pcode=e.value;
    e.cellHtml=...
   }
}
你要存哪个列的值直接放字段里好了
作者: xss511    时间: 2014-7-29 09:48:43

felt 发表于 2014-7-28 20:37
drawsummarycell是有一列绘制一次,你这样写不就前面的被后面的覆盖掉了吗
你totals要存什么
vat totals= ...

var totalbud = {};
                  var totalpay = {};
                function onDrawSummaryCell(e) {
            var grid = e.sender;
            if(e.field == "pcode"){
                            totalbud.pcode = e.vaule;
                    e.cellHtml = "<b>合计</b>";
            }
            if(e.field == "bud_mon1"){
                    totalbud.bud_mon1 = e.vaule;
                    e.cellHtml=e.cellHtml;
            }
            if(e.field == "bud_mon2"){
                    totalbud.bud_mon2 = e.vaule;
                    e.cellHtml=e.cellHtml;
            }
            if(e.field == "pay_mon1"){
                    totalpay.pay_mon1 = e.vaule;
                    e.cellHtml=e.cellHtml;
            }
            if(e.field == "pay_mon2"){
                    totalpay.pay_mon2 = e.vaule;
                    e.cellHtml=e.cellHtml;
            }
        }
存数据
function showView(){
                    var json = mini.encode([totalbud]);
                    alert(json.pcode);
                    alert(mini.encode([totalpay.pay_mon1]);
            }
然后打印,第一个是undefined,第二个为空,是不是哪里写错了?
作者: felt    时间: 2014-7-29 10:16:38

xss511 发表于 2014-7-29 09:48
var totalbud = {};
                  var totalpay = {};
                function onDrawSummaryCell(e) {

你用encode干什么
不是直接totalbud.pcode
totalpay.pay_mon1
作者: xss511    时间: 2014-7-29 10:19:08

felt 发表于 2014-7-29 10:16
你用encode干什么
不是直接totalbud.pcode
totalpay.pay_mon1

直接totalpay.pcode也是undefined,哎,这个是不是不行啊
作者: felt    时间: 2014-7-29 10:30:30

xss511 发表于 2014-7-29 10:19
直接totalpay.pcode也是undefined,哎,这个是不是不行啊

[attach]4911[/attach]

作者: xss511    时间: 2014-7-29 10:44:10

felt 发表于 2014-7-29 10:30

可以了,谢谢




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