dhtmxgrid使用中的一些问题

(摘)

最近在用dhtmlx画界面,遇到不少郁闷的问题。中文资料少得出奇。。。
在线文档也不够详细。还好他们有个论坛,而且论坛的搜索功能做得还行。

1. grid
header中的#master_checkbox,会自动生成一个全选/全不选的checkbox,
本来是个很方便的功能,但是却有一个致命问题:
gird在current_page为第一页的时候,翻到第二页,这时两页的数据全部缓存在客户端了,点击#master_checkbox之后,这两页的checkbox全部被选中了。。。。。。
Master checkbox will affect only rows which is already loaded to the client side.

我只想选中当前页面的checkbox哇。

只好去改源代码 ext/dhtmlxgrid_filter.js:
原来的代码是这样的

dhtmlXGridObject.prototype._in_header_master_checkbox = function(t, i, c) {
t.innerHTML = c[0] + "<input type='checkbox' />" + c[1];
var self = this;
t.firstChild.onclick = function(e) {
self._build_m_order();
var j = self._m_order ? self._m_order[i] : i;
var val = this.checked ? 1 : 0;
self.forEachRow(function(id) {
var c = this.cells(id, j);
if (c.isCheckbox())
c.setValue(val)
});
(e || event).cancelBubble = true
}
};

forEachRow()也是会遍历到所有本地缓存的row。

改成这样的:

dhtmlXGridObject.prototype._in_header_master_checkbox = function(t, i, c) {
t.innerHTML = c[0] + "<input type='checkbox' />" + c[1];
var self = this;
t.firstChild.onclick = function(e) {
self._build_m_order();
var j = self._m_order ? self._m_order[i] : i;
var val = this.checked ? 1 : 0;
/**
* [email protected] 2010 11 27
* to check/uncheck checkboxes only in the current page.
self.forEachRow(function(id) {
var c = this.cells(id, j);
if (c.isCheckbox())
c.setValue(val)
});
**/

var state=self.getStateOfView();
for (var k=state[1]; k<state[2]; k++){
var c=self.cellById(self.getRowId(k),j);
if (c.isCheckbox()) c.setValue(val);
}
/**
* end..
*/

 
(e || event).cancelBubble = true
}
};

2 还是关于#master_checkbox的问题。
比如在当前页做了全选,然后翻页,再翻回来,会发现checkbox仍然是选中状态。
应该在翻页的时候,清除所有checkbox的选中状态,master_checkbox的选中状态也要被清除。

mygrid.attachEvent("onBeforePageChanged", clearCheckedRows);
 
/**
* 翻页时
* 清除checkbox的选中状态
* 清除master_checkbox的选中状态
*
* @return true. 如果返回false会导致翻页的动作没有进行。
*/

 
function clearCheckedRows()
{
 
mygrid.checkAll(false);
 
$("#mygrid_container").find("input").each(function(index){
if ($(this).attr("type") == "checkbox")
{
if ($(this).attr("checked"))
$(this).attr("checked", false);
}
});
return true;
}

注意这个函数一定要返回true,否则就没办法翻页了。

3. dhtmlx的window,挺好用的。
突然发现window里面的页不执行js……
原来attachURL有二种调用方式:
attachURL(url, true);
这种是ajax方式,窗口中的页面不执行js。

attachURL(url);
这种是iframe方式,可以执行js………

4. combobox怎样做readonly

combo_zone1 = new dhtmlXCombo("combo_zone1", "alfa1", 90);
combo_zone1.readonly(1);
 
而且不能再使用enableFilteringMode(true);

5. 这次是关于JQuery的
The :input selector basically selects all form controls: input, textarea, select and button elements

6. combobox filter的时候,调用的url是怎样的?

combo_zone1.enableFilteringMode(true,'./combo.php', true);
//实际的URL为:combo.php?pos=0&mask=a&a_dhx_rSeed=1290654577000
//mask就是关键词。

7. grid不使用dynamic paging或者smart rendering的时候,
会把所有的数据都加载到客户端,翻页操作完全在本地,不与服务器交互。

如果要dynamic分页,比如每次只返回5页数据给grid,
grid会在翻页动作时,自动附加二个参数: posStart 与 count,
在sql里面可以直接当作 LIMIT posStart, count 来用。

这样的话,grid怎样才能知道总的页数呢?

在返回的xml中,
rows行里面额外加上了二个参数:

<rows total_count="4000" pos="1000">
......
</rows>

total_count是总记录数,
pos就是posStart
……然后grid会拿4000除以pagesize,就得出总页数了。。。
这里再提一下,如果采用分页的toolbar皮肤,它会显示一个下拉框,
里面是下拉形式的第一页,第二页。。。第N页。
如果你的GRID一共有10000页。。。这个下拉框就会有10000个下拉的选项。。
我当时测试的GRID50万页,结果IE狂吃内存啊,单核CPU 100%,查了好久才发现是它的问题。
只能在dhtmlx grid的源码中把这个下拉框去掉!!!

8 grid setColAlign()无效。。。
所有的字段都是左对齐的。

查看了一下代码,发现dhtmlx生成出的代码是:

<TD title=649 valign=middle align=right _cellIndex="2" _clearCell="false" _title="true">649</TD>

这段代码没什么问题。。。
问题在于我的css中,写了一个

TD
{
padding: 0px;
border: 0px;
text-align: left;
 
}

你可能感兴趣的:(grid)