jQuery MiniUI

标题: DataGrid使用疑问 [打印本页]

作者: athrun    时间: 2012-6-9 09:31:43     标题: DataGrid使用疑问

1,我不希望DataGrid分页,也就是说pageSize我不进行设置,这样可以List出来所有数据吗?

2,以下是一个datagrid,我希望在Qty,Price编辑的时候来执行CountAmount方法计算金额出来.可在做的时候我发现我没有办法取Qty,Price的值,用row.Qty到的是原来load时的旧值,而用var textbox = e.sender;textbox.value这个取的是当前触发事件的物件内的值,这个是最新的值,可我又没办法得到另一个Price的新值.
  1.     <div id="datagrid1" class="mini-datagrid" style="width:100%;height:210px; margin-top:5px;" showFooter="false" url="order.php?act=getdtl&OrderOID={$OID}" idField="id" ajaxMethod="GET" allowResize="false" allowAlternating="true" frozenStartColumn="0" frozenEndColumn="1" showSummaryRow="true" onload="onGridLoad" >
  2.         <div property="columns">
  3.             <div cellCls="actionIcons" name="action" width="40" headerAlign="center" align="center" renderer="onActionRenderer" cellStyle="padding:0;">#</div>               
  4.             <div field="ProductPN" displayField="ProductPN" width="100" headerAlign="center" align="left" allowSort="false">商品編號
  5.                 <input property="editor" class="mini-buttonedit" style="width:100%;" onbuttonclick="onProductPNButtonEdit" required="true" />
  6.             </div>
  7.             <div field="ProductName" name="ProductName" width="*" headerAlign="center" align="left" allowSort="false">商品名稱</div>
  8.             <div field="Unit" name="Unit" width="60" headerAlign="center" align="center" allowSort="false">單位</div>            
  9.             <div field="Qty" name="Qty" width="100" headerAlign="center" align="right" allowSort="false">數量
  10.                 <input property="editor" name="QtyEditor" class="mini-textbox rightAlign" style="width:100%;" required="true" onvalidation="onQtyValidation" onvaluechanged="CountAmount" />
  11.             </div>
  12.             <div field="Price" name="Price" width="100" headerAlign="center" align="right" allowSort="false">單價
  13.                 <input property="editor" name="PriceEditor" class="mini-textbox rightAlign" style="width:100%;" required="true" onvalidation="onPriceValidation" onvaluechanged="CountAmount" />
  14.             </div>
  15.             <div field="Amount" name="Amount" width="150" headerAlign="center" align="right" allowSort="false">金額</div>
  16.         </div>
  17.     </div>
复制代码

上面的问题,后来我用了以下办法.代码如下:
  1. function CountAmount(e){
  2. var source = e.source;
  3. var textbox = e.sender;
  4. var row = grid.getEditorOwnerRow(textbox);
  5. if(textbox.name=='QtyEditor'){
  6. grid.updateRow(row,{"Qty":textbox.value});
  7. }else{
  8. grid.updateRow(row,{"Price":textbox.value});
  9. }
  10. grid.beginEditRow(row);
  11. alert(row.Qty);
  12. alert(row.Price);
  13. }
复制代码
可这个方法写的怪怪的,先是updateRow,再beginEditRow.

对了,再处的过程中我还试了另一个办法,就是先commitEditRow ,再beginEditRow.最后再用row.name的方法取值,结果程式会报this.el是null的错误.可以查查这个bug.

網頁錯誤詳細資料
訊息: 'this.el' 是 null 或不是一個物件
行: 1
字元: 1
程式碼: 0



作者: athrun    时间: 2012-6-9 09:32:15

问题一,我已经试了是可以的.
作者: niko    时间: 2012-6-9 09:37:02

var edit = grid.getCellEditor("aaa");
edit就是编辑器
var value = edit.getValue();

作者: athrun    时间: 2012-6-9 10:13:24

本帖最后由 athrun 于 2012-6-9 10:22 编辑
niko 发表于 2012-6-9 09:37
var edit = grid.getCellEditor("aaa");
edit就是编辑器
var value = edit.getValue();

谢谢,getCellEditor ( column, row )这个应该是可以取到的.对了,我怎么遍历某一column?比如我现在要遍历Amount然后计算出总金额.此grid的行都是未提交的编辑状态
作者: niko    时间: 2012-6-9 18:15:09

你是要遍历行的属性,还是遍历行?
作者: athrun    时间: 2012-6-11 08:54:46

niko 发表于 2012-6-9 18:15
你是要遍历行的属性,还是遍历行?

就像上面的代码中不是有一栏是金额吗,同时我在此grid下增加了
  1. function onGridLoad(e) {
  2.         var result = e.result;
  3.         var grid = e.sender;
  4.         var cellEl = grid.getSummaryCellEl("Amount");
  5.         cellEl.style.cssText = "text-align:right";
  6.         cellEl.innerHTML = "<span style='color:Brown;'>金额合计="+FormatFloat(SummaryAmount,4)+"</span>";
  7. }
复制代码
因此我希望我在修改每一行的单价或数量的同时会更新grid上面的金额以及我增加的Summary金额合计两个栏位.最简单的方法就是直接遍历所有行中的Amount栏位进行加总再更新Summary就够了,这样有办法可以实现吗?
作者: niko    时间: 2012-6-11 09:27:03

var data = grid.getData();
data是一个数组,你遍历计算,最后设置给汇总单元格就可以了。
作者: athrun    时间: 2012-6-11 10:00:45

niko 发表于 2012-6-11 09:27
var data = grid.getData();
data是一个数组,你遍历计算,最后设置给汇总单元格就可以了。 ...

这个我也想到了,目前也实现了,只是在这里我想一下,没有提供相应的方法来遍历grid的行,以及行中的column中处理编辑状态或非编辑时的值.这样对我操作grid来说会更加灵活.
作者: niko    时间: 2012-6-11 14:59:37

var data = grid.getData();
var all = 0;
for(var i=0,l=data.length; i<l; i++){
    var row = data[i];
     all += row.price;
}
alert(all);
作者: athrun    时间: 2012-6-12 08:09:20

niko 发表于 2012-6-11 14:59
var data = grid.getData();
var all = 0;
for(var i=0,l=data.length; i

谢谢,已经处理好了.




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