使用jqGrid tableToGrid函数时需要冻结列

时间:2013-02-21 06:05:59

标签: asp.net jqgrid

我有一个c#asp.net应用程序,它使用Listview控件来呈现一个宽表(很多列)。

为了使这个问题更加通用,Listview只是呈现一个HTML表,并且是该问题的偶然问题。

我想使用jqGrid的“tableToGrid”函数来冻结标题并处理垂直和水平滚动,最好冻结生成的HTML表的第1列。冷冻标题和滚动工作正在进行,但经过大量研究后,我似乎无法“将各个部分放在一起”来冻结列。

除非必要,否则我不想为表中的所有列显示创建colNames和colModel,因为这是由tableToGrid函数处理的,所以我使用了更改冻结列的示例并想出了这个javascript:

tableToGrid($('#parcelTable'),
{
 sortable: false,
 multiselect: false,
 shrinkToFit: false,
 width: 952,
 height: 300
})
.jqGrid('destroyFrozenColumns')
.jqGrid("setColProp", "rowEdit", { frozen: true })
.jqGrid("setFrozenColumns")
.trigger('reloadGrid');   

当我尝试上述操作时,收到消息 Microsoft JScript运行时错误:'undefined'为null或不是对象
我也尝试不链接冻结列的代码,如中         $( '#parcelTable')JQ( 'destroyFrozenColumns');
        $('#parcelTable')。(jqGrid(“setColProp”,“rowEdit”,{frozen:true})等等
得到了同样的信息。

我毫无疑问地做了一些愚蠢的语法或用法错误,但我不知道从哪里开始,并且不知道这是否是最好的方法。 任何帮助表示赞赏 - 谢谢!

1 个答案:

答案 0 :(得分:0)

要冻结标题,您可以使用:

 $("#gridId").setLabel("Column Index",'Label',"jqgridheaderLocked");

这可以在jqgrid

loadComplete()中执行

对于冻结列,您只需将该类添加到列定义

即可
  classes:'jqgridbodyLock' 

例如:

 {name:"Col1",index:"Col1",width:80,eight:50,sortable:false,classes:'jqgridbodyLock'},

还将以下css定义添加到您的publical css文件

.jqgridbodyLock{
    position:relative; 
    left: expression(parentNode.parentNode.parentNode.parentNode.parentNode.scrollLeft);
    z-index: 10;
}

.jqgridheaderLocked{
    position:relative;
    left: expression(parentNode.parentNode.parentNode.parentNode.parentNode.scrollLeft); /* IE5+ only */
    z-index:30;
}