解决infragistics的webgrid嵌套子表列名在ajax下(xml paging)出现的乱码问题

webgrid的嵌套子表的功能很强,但我用了xml paging功能时,发现问题:
当子表的列名(Header.Caption)为中文时,展开子表就会出现乱码.而不用xml paging展开子表就没有问题.我郁闷了一上午,最后终于找到了解决的办法(详细过程省略了,反正很痛苦)
原因:当用xml paging方式时,webgrid展开子表的过程,其实就是一次无刷新的操作,而原本设置的列名被post后,出现了乱码,我找到了它的ig_WebGrid_dom脚本:
this.XmlHttp.open("POST"this.Url, false);
this.XmlHttp.setRequestHeader("Content-Type""application/x-www-form-urlencoded");
this.XmlHttp.onreadystatechange=new Function("igtbl_onReadyStateChange('"+this.Id+"')");
this.XmlHttp.send("__EVENTTARGET="+this.UniqueID+"&__EVENTARGUMENT=XmlHttpRequest&"+this.UniqueID+"="+igtbl_escape(this.QueryString));
只看出是igtbl_escape()方式,应该和javascript的escape作用差不多,所以直接修改它的脚本好像并不能解决.
   后来我想,既然是用xmlhttprequest来完成子表的展开,那用客户端的AfterXmlHttpResponseProcessed事件应该可以重新给子表的列赋值了(infragistics自己的控件ClientSideEvents).
添加的客户端事件代码:
function UltraWebGrid1_AfterXmlHttpResponseProcessed(gridName){
            var col0 
=igtbl_getElementById("UltraWebGrid1c_1_0");
            
if(col0!=null)
            col0.innerText 
= "接受者";
            var col1 
= igtbl_getElementById("UltraWebGrid1c_1_1");
            
if(col1!=null)
            col1.innerText 
= "状态";
            var col3 
= igtbl_getElementById("UltraWebGrid1c_1_3");
            
if(col3!=null)
            col3.innerText 
= "回复时间";
            var col4 
= igtbl_getElementById("UltraWebGrid1c_1_4");
            
if(col4!=null)
            col4.innerText 
= "回复内容";
        }
UltraWebGrid1c_1_0的意思是取子表的第1列的列名,方式如下:
列的命名方式: "表格名"+"C_" +"Band的序号" + "_" +"列序号"
如UltraWebGrid1c_1_0 的表格名=UltraWebGrid1,Band的序号=1,列序号=0
这样当展开时,列名就会重新写上去,这样就不会出现乱码了.
注:我用的是2005V3版本,不知道刚刚发布的06V3的版本会不会考虑到这个情况.
posted @ 2006-11-16 16:47 zjy 阅读(...) 评论(...) 编辑 收藏