之前使用jqGrid时列都是固定的,但是前几天遇到一个问题,需要根据某个条件动态为jqGrid添加列,在网上搜了一下没有找到具体的解决方法,没办法,只能自力更生。最后做出来的效果是这样的。其中,前5列是固定的,后几列是根据条件的不同,从数据库取的不同字段。
代码是这样的,首先是js代码,因为是动态的列,所以colModel数组写成前5项固定,后几项是通过循环添加进去的:
在action中赋给dataRows的列表是这样的List< StdTaskListItem >,其中,StdTaskListItem类的结构如下:
StdTaskListItem类的前几个字段对应的jqGrid的固定列,List<StdTaskSubListItem> stdTaskSubList对应的就是动态列,js里通过循环加载stdTaskSubList中的每一项。
for( a = 0; a < count; a++ )
{
var amountCol = {
label : labelName,
name : 'stdTaskSubList[' + a + '].amount',
sortable : false,
width : 80,
fixed : false,
align : "center"
};
}
StdTaskSubListItem类的结构:
整个过程就是这样,需要注意的是,jqGrid的colModel中每一列的name对应的是赋给dataRows的列表List< StdTaskListItem >中StdTaskListItem类的字段名称,而不是其它什么名称。
不知道整个过程我有没有说清楚,或者是这样做会有什么问题。做完后再重新看一遍感觉不是很麻烦,但其实在做的过程中,是通过反复猜测和实验才成形的,这才是真正乐趣所在。