论坛首页 Web前端技术论坛

如何给dhtmlxgrid加弹出窗口

浏览 5287 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-04-24  

在实际的项目开发中我们经常会遇到这样的问题,一个列表页面呈现的内容可能是多个表联合查询的结果,如果我们要更改某个cell当中的值,他可能会涉及到其它多个表内容的修改,如何解决这样的问题?我的思路是使用弹出窗口,在弹出窗口中让用户执行数据的修改操作,然后再把修改后的值返回到cell更新cell的内容,但是dhtmlxgrid当中我还没有发现有弹出窗口的这项功能,没办法只好自己扩展,看例子,首先我要增加一种xcell的类型oWin

 在dhtmlXGridCell.js文件中添加如下代码

js 代码
  1. /****************/  
  2.   
  3.   
  4. function eXcell_oWin(cell)   
  5. {   
  6.     var cellVal="";   
  7. try  
  8.     {   
  9. this.cell = cell;   
  10.  this.grid = this.cell.parentNode.grid;   
  11.  }catch(er){}   
  12.   
  13.  this.edit = function(){   
  14.     this.val = this.cell.val;   
  15.     eval(this.val.split("^")[1]);   
  16.     this.cell._cediton=true;   
  17.  }   
  18.  this.getValue = function(){   
  19. }   
  20.   
  21.   
  22.  this.setValue = function(val){   
  23.  var valsAr = val.split("^");   
  24.  if(valsAr.length==1)   
  25.  valsAr[0] = "";   
  26.  this.cell.innerHTML=valsAr[0];   
  27.  this.cell.val=val;   
  28.   
  29. }   
  30.   
  31. }   
  32.   
  33. eXcell_oWin.prototype = new eXcell;  

然后在grid.xml的定义如下

xml 代码

 

xml 代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <rows>  
  3.     <row id="1">  
  4.         <cell>1</cell>  
  5.         <cell>John Grisham^modUserName('John Grisham')</cell>  
  6.            
  7.     </row>  
  8.     <row id="2">  
  9.         <cell>2</cell>  
  10.         <cell>Stephen King^modUserName('Stephen King')</cell>  
  11.            
  12.     </row>  
  13.        
  14.        
  15. </rows>  

 大家注意第二个cell的内容是由两部分组成,前面是cell显示的内容,后面是双击调用的函数modUserName,他们之间用^分开

然后在oWin.html中添加如下代码:
function modUserName(val1)
{//这个函数就是我们在xml中需要调用的,这段代码中我是定义了弹出窗口程序,当然你也可以写成div的。

window.open("win.html", "smallwin","width=400,height=350");

}

同时也要注意mygrid的定义代码更改成mygrid.setColTypes("ro,oWin");

此时浏览oWin.html,双击第二列cell,弹出窗口,在弹出窗口的文本框中输入文字,点击提交,datagrid中相应的cell的值更新了,具体请看附件的例子。

论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics