在实际的项目开发中我们经常会遇到这样的问题,一个列表页面呈现的内容可能是多个表联合查询的结果,如果我们要更改某个cell当中的值,他可能会涉及到其它多个表内容的修改,如何解决这样的问题?我的思路是使用弹出窗口,在弹出窗口中让用户执行数据的修改操作,然后再把修改后的值返回到cell更新cell的内容,但是dhtmlxgrid当中我还没有发现有弹出窗口的这项功能,没办法只好自己扩展,看例子,首先我要增加一种xcell的类型oWin
在dhtmlXGridCell.js文件中添加如下代码
js 代码
- /****************/
- function eXcell_oWin(cell)
- {
- var cellVal="";
- try
- {
- this.cell = cell;
- this.grid = this.cell.parentNode.grid;
- }catch(er){}
- this.edit = function(){
- this.val = this.cell.val;
- eval(this.val.split("^")[1]);
- this.cell._cediton=true;
- }
- this.getValue = function(){
- }
- this.setValue = function(val){
- var valsAr = val.split("^");
- if(valsAr.length==1)
- valsAr[0] = "";
- this.cell.innerHTML=valsAr[0];
- this.cell.val=val;
- }
- }
- eXcell_oWin.prototype = new eXcell;
然后在grid.xml的定义如下
xml 代码
xml 代码
- <?xml version="1.0" encoding="UTF-8"?>
- <rows>
- <row id="1">
- <cell>1</cell>
- <cell>John Grisham^modUserName('John Grisham')</cell>
- </row>
- <row id="2">
- <cell>2</cell>
- <cell>Stephen King^modUserName('Stephen King')</cell>
- </row>
- </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的值更新了,具体请看附件的例子。