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的版本会不会考虑到这个情况.