webabcd - 专注于asp.net, Silverlight

ASP.NET
从现在开始 一切都不晚
posts - 205, comments - 5701, trackbacks - 594, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理
[最后更新:2008.03.28]
GridView既强大又好用。为了让它更强大、更好用,我们来写一个继承自GridView的控件。
[源码下载(C#)]
[源码下载(VB)] 感谢旌浪提供VB版本 相关文章地址


扩展GridView控件(索引) - 增加多个常用功能


作者:webabcd


/*正式版的实现 开始*/

文章索引
扩展GridView控件(0) - 基本架构、增加事件和要点汇总
扩展GridView控件(1) - 鼠标经过行时改变行的样式
扩展GridView控件(2) - 复合排序和排序状态提示
扩展GridView控件(3) - 根据按钮的CommandName设置其客户端属性
扩展GridView控件(4) - 联动复选框(复选框的全选和取消全选)
扩展GridView控件(5) - 固定指定行、指定列
扩展GridView控件(6) - 响应行的单击事件和双击事件
扩展GridView控件(7) - 行的指定复选框选中时改变行的样式
扩展GridView控件(8) - 导出数据源的数据为Excel、Word或Text
扩展GridView控件(9) - 给数据行增加右键菜单
扩展GridView控件(10) - 自定义分页样式
扩展GridView控件(11) - 合并指定列的相邻且内容相同的单元格
注:除了“固定指定行、指定列”仅支持IE外,其它均同时支持IE和FF


控件截图



控件使用
1、鼠标经过行的时候改变该行的样式,鼠标离开行的时候恢复该行的样式
使用方法(设置属性): 
MouseOverCssClass - 鼠标经过行时行的 CSS 类名

2、对多个字段进行复合排序;升序、降序的排序状态提示
使用方法(设置SmartSorting复合属性):
AllowSortTip - 是否启用排序提示
AllowMultiSorting - 是否启用复合排序
SortAscImageUrl - 升序提示图片的URL(不设置则使用默认图片)
SortDescImageUrl - 降序提示图片的URL(不设置则使用默认图片)
SortAscText - 升序提示文本
SortDescText - 降序提示文本

3、根据按钮的CommandName设置其客户端属性
使用方法(设置ClientButtons集合属性):
BoundCommandName - 需要绑定的CommandName
AttributeKey - 属性的名称
AttributeValue - 属性的值(两个占位符:{0} - CommandArgument;{1} - Text)
Position - 属性的值的位置

4、联动复选框(复选框的全选和取消全选)。选中指定的父复选框,则设置指定的所有子复选框为选中状态;取消选中指定的父复选框,则设置指定的所有子复选框为取消选中状态
使用方法(设置CascadeCheckboxes集合属性):
ParentCheckboxID - 模板列中 父复选框ID
ChildCheckboxID - 模板列中 子复选框ID
YYControls.Helper.SmartGridView中的静态方法
List GetCheckedDataKey(GridView gv, int columnIndex)
List GetCheckedDataKey(GridView gv, string checkboxId)

5、固定指定行、指定列,根据RowType固定行,根据RowState固定行
使用方法(设置FixRowColumn复合属性):
FixRowType - 需要固定的行的RowType(用逗号“,”分隔)
FixRowState - 需要固定的行的RowState(用逗号“,”分隔)
FixRows - 需要固定的行的索引(用逗号“,”分隔)
FixColumns - 需要固定的列的索引(用逗号“,”分隔)
TableWidth - 表格的宽度
TableHeight - 表格的高度

6、响应行的单击事件和双击事件,并在服务端处理
使用方法(设置属性):
BoundRowClickCommandName - 行的单击事件需要绑定的CommandName
BoundRowDoubleClickCommandName - 行的双击事件需要绑定的CommandName

7、行的指定复选框选中的时候改变该行的样式,行的指定复选框取消选中的时候恢复该行的样式
使用方法(设置CheckedRowCssClass复合属性):
CheckBoxID - 模板列中 数据行的复选框ID
CssClass - 选中的行的 CSS 类名

8、导出数据源的数据为Excel、Word或Text(应保证数据源的类型为DataTable或DataSet)
使用方法:
为SmartGridView添加的方法
Export(string fileName)
Export(string fileName, ExportFormat exportFormat)
Export(string fileName, ExportFormat exportFormat, Encoding encoding)
Export(string fileName, int[] columnIndexList, ExportFormat exportFormat, Encoding encoding)
Export(string fileName, int[] columnIndexList, string[] headers, ExportFormat exportFormat, Encoding encoding)
Export(string fileName, string[] columnNameList, ExportFormat exportFormat, Encoding encoding)
Export(string fileName, string[] columnNameList, string[] headers, ExportFormat exportFormat, Encoding encoding)


9、给数据行增加右键菜单,响应服务端事件或超级链接
使用方法(设置ContextMenus集合属性):
Text - 菜单的文本内容
BoundCommandName - 需要绑定的CommandName
NavigateUrl - 链接的URL
Target - 链接的目标窗口或框架
SmartGridView的属性ContextMenuCssClass - 右键菜单的级联样式表 CSS 类名(右键菜单的结构div ul li a)

10、自定义分页样式。显示总记录数、每页记录数、当前页数、总页数、首页、上一页、下一页、末页和分页按钮
使用方法(设置CustomPagerSettings复合属性):
PagingMode - 自定义分页的显示模式
TextFormat - 自定义分页的文本显示样式(四个占位符:{0}-每页显示记录数;{1}-总记录数;{2}-当前页数;{3}-总页数)

11、合并指定列的相邻且内容相同的单元格
使用方法(设置属性):
MergeCells -  需要合并单元格的列的索引(用逗号“,”分隔)

/*正式版的实现 结束*/


/*测试版的实现 开始*/

控件开发
扩展GridView控件(一)——鼠标经过行时改变行的样式

扩展GridView控件(二)——给字段标题加上排序状态

扩展GridView控件(三)——单击命令按钮弹出确认框

扩展GridView控件(四)——每行复选框的全选与取消全选

扩展GridView控件(五)——固定表头、指定行或指定列

扩展GridView控件(六)——数据行响应鼠标的单击和双击事件

扩展GridView控件(七)——改变通过复选框选中的行的样式

扩展GridView控件(八)——导出为Excel

扩展GridView控件(九)——给数据行增加右键菜单

扩展GridView控件(十)——扩展分页功能


控件截图



控件使用
1、鼠标经过行时改变行的样式
CssClassMouseOver - 鼠标经过行时行的样式的CSS类名

2、给字段标题加上排序状态
设置其SortTip下的4个属性即可
SortAscImage - 升序提示图片
SortAscText - 升序提示文本
SortDescImage - 降序提示图片
SortDescText - 降序提示文本

3、单击命令按钮弹出确认框
设置其ConfirmButtons属性
CommandName - 命令按钮的CommandName属性
ConfirmMessage - 弹出的确认框所显示的文字

4、每行复选框的全选与取消全选
在模板列的头模板处添加一个复选框,在模板列的项模板处添加一个复选框,然后设置控件的CheckboxAlls属性
CheckboxAllID - 模板列全选复选框ID
CheckboxItemID - 模板列项复选框ID

5、固定表头、指定行或指定列
设置其FixRowCol下的6个属性
IsFixHeader - 固定表头否?
IsFixPager - 固定分页行否?
FixRowIndices - 需要固定的行的索引(用逗号“,”分隔)
FixColumnIndices - 需要固定的列的索引(用逗号“,”分隔)
TableWidth - 表格的宽度
TableHeight - 表格的高度
EnableScrollState - 是否保持滚动条的状态

6、数据行响应鼠标的单击和双击事件
RowClickButtonID - 行单击事件所对应的按钮的ID
RowDoubleClickButtonID - 行双击事件所对应的按钮的ID

7、改变通过CheckBox选中的行的样式
CheckBoxID - 模板列的项复选框的ID
CssClassRowSelected - 选中行的样式的CSS类名

8、导出为Excel
在GridView内加一个按钮
CommandName属性设置为“ExportToExcel”
CommandArgument属性的值用“;”做分隔符分为两部分,左边的部分为导出Excel的文件名称,右边的部分为需要隐藏的列的索引(列索引用“,”分开)

9、给数据行增加右键菜单
ItemType - 右键菜单的项的类别(Link,Command,Custom,Separator)
Icon - 文字左边的图标的链接
Text - 菜单的文字
CommandButtonId - 所调用的命令按钮的ID
NavigateUrl - 链接的url
Target - 链接的target(Blank,Self,Top)
Key - 自定义属性key
Value - 自定义属性value

10、扩展分页功能
设置PagingStyle属性为Default
设置GridView的原有属性PageButtonCount,FirstPageText,PreviousPageText,NextPageText,LastPageText,FirstPageImageUrl,PreviousPageImageUrl,NextPageImageUrl,LastPageImageUrl

/*测试版的实现 结束*/


OK
[源码下载]

Feedback

评论共6页: 上一页 1 2 3 4 5 6 

#501楼   回复  引用    

2008-05-30 00:21 by dfsolo[未注册用户]
动态载模板的话,如下
BoundField bc = new BoundField();
bc.HeaderText = header;
bc.HeaderStyle.HorizontalAlign = HorizontalAlign.Left;
bc.HeaderStyle.Wrap = false;
bc.DataField = colname;
bc.ItemStyle.Wrap = false;
bc.DataFormatString = "{0}";
bc.SortExpression = colname;
bc.HtmlEncode = false;
_sgv.Columns.Add(bc);
最后显示的时候多了这一列,搞不懂啊.
注:加了一条this._sgv.Load += new EventHandler(_sgv_Load);
在其中写的,真是整不明白了,哪位帮忙解释一下啊.

#502楼   回复  引用    

2008-05-30 00:34 by dfsolo[未注册用户]
全部应该是这样的:
if (edit.Equals("datetime")) {
TemplateField DropField = new TemplateField();
DropField.ItemTemplate = new TextBoxTemplate(DataControlRowType.DataRow, colname);
_sgv.Columns.Add(DropField);
}
else {
BoundField bc = new BoundField();
bc.HeaderText = header;
bc.HeaderStyle.HorizontalAlign = HorizontalAlign.Left;
bc.HeaderStyle.Wrap = false;
bc.DataField = colname;
bc.ItemStyle.Wrap = false;
bc.DataFormatString = "{0}";
bc.SortExpression = colname;
bc.HtmlEncode = false;
_sgv.Columns.Add(bc);
}
最后发现多出了整个表,即原来列还在.
在前面加入_sgv.Columns.Clear();也不成.
疯了!
睡了.

#503楼[楼主]   回复  引用  查看    

2008-05-30 08:34 by webabcd      
@dfsolo
参考
http://www.cnblogs.com/webabcd/archive/2006/12/19/596349.html" target="_new">http://www.cnblogs.com/webabcd/archive/2006/12/19/596349.html
http://www.cnblogs.com/webabcd/archive/2006/12/21/598819.html" target="_new">http://www.cnblogs.com/webabcd/archive/2006/12/21/598819.html

#504楼   回复  引用  查看    

2008-06-20 16:40 by 克隆      
能否考虑将多选功能完善一下,支持夸页多选?

还有行的单击和双击最好也支持客户端事件

#505楼[楼主]   回复  引用  查看    

2008-06-23 08:26 by webabcd      
@克隆
嗯,都是很好的建议
不过最近是不可能了,忙得很啊。。。

#506楼   回复  引用  查看    

2008-06-25 15:57 by 求知无傲      
飘过

#507楼[楼主]   回复  引用  查看    

2008-06-25 18:01 by webabcd      
@求知无傲
。。。
什么时候再飘回来

#508楼   回复  引用  查看    

2008-06-27 14:04 by 克隆      
忙没关系,问题先记下来,有空再改
当表头固定时,样式表也被锁定了,比如粗线问题

#509楼[楼主]   回复  引用  查看    

2008-06-27 19:05 by webabcd      
@克隆
:)
其实也还有好多别的想法
呵呵,不知道什么时候才能有空闲时间并且不犯懒了

#510楼   回复  引用  查看    

2008-07-01 10:09 by 克隆      
其实你的控件我已经感觉很是好用,而且设计思路很清晰,我也从中受教不少
你能写出来已经是很有国际主义精神了
希望继续加油

#511楼[楼主]   回复  引用  查看    

2008-07-01 13:07 by webabcd      
@克隆
:)
过奖了
持续努力中。。。

#512楼   回复  引用    

2008-07-17 15:04 by 飒风[未注册用户]
关于GroupView右键加图片那个例子,在GridView上根据不同条件,来变化ContextMenu上的显示内容

#513楼   回复  引用    

2008-07-17 15:06 by 飒风[未注册用户]
SmartGridViewAlpha,加入两个这Gridview右键显示的信息都是一样得,并且第二个GridView还不能用,

#514楼[楼主]   回复  引用  查看    

2008-07-17 18:35 by webabcd      
@飒风
是的
Alpha版本的问题多多

请用SmartGridView正式版

#515楼   回复  引用    

2008-07-24 14:44 by shark0304[未注册用户]
控件在firefox下的firbug报错:
[Exception... "'JavaScript component does not have a method named: "handleEvent"' when calling method: [nsIDOMEventListener::handleEvent]" nsresult: "0x80570030 (NS_ERROR_XPC_JSOBJECT_HAS_NO_FUNCTION_NAMED)" location: "<unknown>" data: no]
今天把SmartGridView/Resources/ScriptLibraryDebug.js
中的最后其中一条代码注释掉,就不出这个错了,代码是
// window.addEventListener('load', yy_sgv_rightMenu = new yy_sgv_rightMenu(), false);
可能注释了gridview右键用不了了,望斑主改一下,要不在firfox中用firfox调试项目,有时会有上百个错误信息,全是这个,看着不舒服。

#516楼[楼主]   回复  引用  查看    

2008-07-24 15:25 by webabcd      
@shark0304
呵呵,终于被发现了,虽然不影响使用,但是,确实firebug会报错

咳,惭愧啊,曾经试图解决过,但是没搞定

#517楼   回复  引用    

2008-08-09 09:49 by hellsar[未注册用户]
哥们,感谢你的奉献!!^_^

#518楼[楼主]   回复  引用  查看    

2008-08-11 08:23 by webabcd      
@hellsar
:)
不谢

#519楼   回复  引用    

2008-08-12 16:27 by 米黄色衬衫[未注册用户]
vs 2008 环境中在页面的设计视图中总是报错“创建控件时出错”,提示和页面其它某控件ID冲突,但该ID是唯一的。

#520楼   回复  引用    

2008-08-12 16:30 by 米黄色衬衫[未注册用户]
最好能提供使用说明文档,谢谢!

#521楼[楼主]   回复  引用  查看    

2008-08-12 18:52 by webabcd      
@米黄色衬衫
没精力继续更新这个了
不过,我也是用VS2008,没出现过你所说的情况

使用文档已经在文中写了,呵呵,很简单
开发文档的话,看注释吧,都很详细

#522楼   回复  引用    

2008-08-15 11:49 by ozai[未注册用户]
请问非动态创建怎么能够让这个控件的宽度跟页面的宽度相同呢?我动态创建的时候设置sgv1.Width = Unit.Percentage(100);就可以,但是按照例子中的创建方式,在page_load里面这样设置就不行

#523楼[楼主]   回复  引用  查看    

2008-08-15 13:39 by webabcd      
@ozai
“非动态创建”的话,直接在aspx中设置GridView的Width不就行吗

#524楼   回复  引用    

2008-08-15 13:51 by ozai[未注册用户]
直接在aspx中设置GridView的Width,只是增加滚动条的长度,好像是只对里面的表格的整体宽度有效,感觉控件外面还有一层似的,不知道我的表达你是否明白

#525楼   回复  引用    

2008-08-15 13:59 by ozai[未注册用户]
你在示例代码里面设一下就明白了
不知道有没有什么办法能解决呢

#526楼   回复  引用    

2008-08-17 22:57 by monsoon[未注册用户]
这个控件的确省了很多力气
但是有个问题,在点击页数时会验证本页的textbox,CausesValidation=true
还有就是无法固定列的宽度了,找了好多方法都不能实现,用了其他的GridView扩展控件也不行,不知道是什么缘故

#527楼[楼主]   回复  引用  查看    

2008-08-18 08:56 by webabcd      
@ozai
如果使用固定行、列的功能的话
因为外面要包一个div
所以要设置外面的width的话,可以设置FixRowColumn的TableWidth

#528楼[楼主]   回复  引用  查看    

2008-08-18 08:57 by webabcd      
@monsoon
通过设置ValidationGroup属性解决

#529楼   回复  引用    

2008-08-28 16:26 by Derek.shi[未注册用户]
先感谢楼主提供了这么好的控件给大家。

我最近使用vs2008开发,出现了一个问题,不知道怎么回事

只要在updatepanel中使用SmartGridView控件,经常会出现视图状态与代码不同步的情况,就是有时候明明在属性设置里改动了某个属性,视图状态也有了改变,代码却没变,然后也不能保存,重新关闭打开这个文件后又恢复到没有改变之前的样子了。

3月份的时候我们刚开始做项目,本来打算用vs2008,结果发现了这个问题,还一直以为是vs2008的bug,几个同事的电脑上都是一样的,这段时间sp1出来了,我就再安装了2008试了一下,结果还是同样的问题,而且更频繁了,以前只是时不是,现在每次都这样。我是专门重新安装了操作系统测试过的,然后用vs2008将你的代码重新编译过,问题依旧,我在想@米黄色衬衫应该是跟我相同的问题,因为我这里也是这样。

#530楼[楼主]   回复  引用  查看    

2008-08-28 18:07 by webabcd      
@Derek.shi
抱歉了,很难定位问题

之前我也用过updatepanel+smartgridview开发过的,并没有此类问题

如果有问题的话,和vs版本也是没关系的

#531楼   回复  引用    

2008-08-29 08:53 by Derek.shi[未注册用户]
@webabcd

在vs2005里是完全没有问题的,2008就不行了。

#532楼[楼主]   回复  引用  查看    

2008-08-29 13:02 by webabcd      
@Derek.shi
那就怪了
程序是根据.net版本走的,和vs没关系的
gridview调用的都是.net2.0(clr)的

#533楼   回复  引用    

2008-08-29 14:50 by Derek.shi[未注册用户]
@webabcd
我的同事电脑上只要使用vs2008就有这样的问题,我也重装系统试过了,应该不是我一个人才有这样的问题啊,你有条件的话试一下吧,就是在updatepanel里边放smartgridview,我是很想用你这个控件的,但项目又要求vs2008,没办法取舍啊,或者你有什么其它的推荐?像你这个这样的。

#534楼   回复  引用    

2008-08-29 15:42 by Derek.shi[未注册用户]
@webabcd
其实也不是在vs2008下有问题,只是在vs2008下的updatepanel控件中会有问题,只要页面上不放updatepanel就啥问题都没有。

#535楼   回复  引用    

2008-08-29 15:54 by Derek.shi[未注册用户]
@webabcd
还有一个现象,在页面上面了updatepanel之后,在updatepanel之外添加一个smartgridview没问题,只要把smartgridview拖到updatepanel里边,这个smartgridview在代码里边就消失了,没有它的代码了,但视图里又看得到,这个时候只要在视图状态里边点右键刷新,这个smartgridview在视图里也消失了,但只要不刷新或关了文件重打开,再把smartgridview拖到updatepanel之外,代码视图又会恢复正常。

#536楼   回复  引用    

2008-08-29 15:56 by 米黄色衬衫[未注册用户]
SmartGridView若使用EmptyDataTemplate,EmptyDataTemplate放了一个表格,滚动条出现异常,两个滚动条在滚动的过程中不断变短,但无论如何也滚不到另一端,请你测试一下,但不固定任何表头、列就没有问题(去掉FixRowColumn)。

#537楼   回复  引用    

2008-08-29 16:04 by 米黄色衬衫[未注册用户]
问题出现在没有数据的情况下,即使用EmptyDataTemplate的情况下,有数据时则没有问题,滚动正常。我在EmptyDataTemplate放置了一个最简单的没有用任何样式的table也是出现问题。

#538楼   回复  引用    

2008-08-29 16:04 by Derek.shi[未注册用户]
@米黄色衬衫
这个是IE7下面出现的,IE6正常,我也刚好遇到。

#539楼   回复  引用    

2008-08-29 16:23 by 米黄色衬衫[未注册用户]
可我用的是IE6 SP2

#540楼   回复  引用    

2008-08-31 01:44 by shark0304[未注册用户]
@webabcd
能否考虑把主子表功能也加进去?

#541楼[楼主]   回复  引用  查看    

2008-09-03 08:26 by webabcd      
@Derek.shi
那确实很难理解了

我的项目中也有updatepanel加smartgridview
每什么问题

推荐的话,extjs里有不错的表格控件

#542楼[楼主]   回复  引用  查看    

2008-09-03 08:32 by webabcd      
@米黄色衬衫
@Derek.shi
EmptyDataTemplate
里的内容要与相应的GridView生出来的HTML结构一致才可以

#543楼[楼主]   回复  引用  查看    

2008-09-03 08:34 by webabcd      
@shark0304
比较麻烦,特别是数据源的绑定上
还是网上找找例子,然后应用到项目中吧

#544楼   回复  引用    

2008-09-22 21:48 by MVC不是三层[未注册用户]
楼主,感觉你的控件做的很不错。谢谢!
我试用过SmartGrid这个控件。感觉也比较符合国人的习惯。
楼主有时间研究一下SmartGrid,丰富一下YYControls。
呵呵。
再次感谢!!!

#545楼[楼主]   回复  引用  查看    

2008-09-23 08:17 by webabcd      
@MVC不是三层
:)
过奖了
好的控件确实是很多,有时间的话一定会多写几个的

#546楼   回复  引用    

2008-10-06 15:46 by -可乐[未注册用户]
你好,这个控件中,导出数据时,如果表头为数字或字母开头、或包含特殊字符的话就会报错,请问这是什么原因

#547楼[楼主]   回复  引用  查看    

2008-10-07 07:32 by webabcd      
@-可乐
刚才测试了几个有数字和字母的表头
导出时没问题啊

#548楼   回复  引用    

2008-10-07 09:35 by -可乐[未注册用户]
@webabcd
请你试试以数字或字母开头,或特殊字符

#549楼   回复  引用    

2008-10-07 09:52 by -可乐[未注册用户]
--引用--------------------------------------------------
蜗牛身上的一只蚂蚁: 我是存在ViewState了,可是在哪个方法,或哪个事件里加上要显示的代码呢?。因为点“下一页”或&quot;上一页&quot;。他们的事件方法是重新取出数据值来的啊。
<br> /// &lt;summary&gt;
<br> /// 获取或设置选中项的集合
<br> /// &lt;/summary&gt;
<br> protected ArrayList SelectedItems
<br> {
<br> get
<br> {
<br> return (ViewState[&quot;itemCheckBoxProvinceValues&quot;] != null) ? (ArrayList)ViewState[&quot;itemCheckBoxProvinceValues&quot;] : null;
<br> }
<br> set
<br> {
<br> ViewState[&quot;itemCheckBoxProvinceValues&quot;] = value;
<br> }
<br> }
<br>
<br> //这里的处理是为了回显之前选中的情况--
<br>//这代码放哪个事件或方法里面啊。
<br> if (SelectedItemsValues.Count != 0)
<br> {
<br>
<br> for (int i = 0; i &lt; gv.Rows.Count; i++)
<br> {
<br> string id = gv.Rows[i].Cells[1].Text;
<br> CheckBox cb = gv.Rows[i].FindControl(&quot;itemCheckBoxProvince&quot;) as CheckBox;
<br> if (SelectedItemsValues.Contains(id))
<br> cb.Checked = true;
<br> else
<br> cb.Checked = false;
<br> }
<br>
<br> }
<br>谢谢。。。
--------------------------------------------------------


CheckBox的选中状态在哪里保存进ViewState里的,能将这一功能所有代码贴出来吗,谢谢

#550楼[楼主]   回复  引用  查看    

2008-10-07 12:18 by webabcd      
@-可乐
试过以数字或字母开头,没问题

部分代码,参考一下
#region 记录复选框选中状态的逻辑
void SetCheckedItems()
{
var checkedItems = new List<string>();

CheckBox chkParent = null;
HiddenField hdnProductId = null;
ListView lvChild = null;

checkedItems = CheckedItems;
foreach (ListViewItem lvi in lvParent.Items)
{
chkParent = lvi.Controls[0].FindControl("chkParent") as CheckBox;
hdnProductId = lvi.Controls[0].FindControl("hdnProductId") as HiddenField;
lvChild = lvi.Controls[0].FindControl("lvChild") as ListView;

if (chkParent.Checked)
{
if (!checkedItems.Contains(hdnProductId.Value))
checkedItems.Add(hdnProductId.Value);
}
else
{
checkedItems.Remove(hdnProductId.Value);
}

if (lvChild != null)
{
CheckBox chkChild = null;
foreach (ListViewItem lviChild in lvChild.Items)
{
chkChild = lviChild.Controls[0].FindControl("chkChild") as CheckBox;
hdnProductId = lviChild.Controls[0].FindControl("hdnProductId") as HiddenField;

if (chkChild.Checked)
{
if (!checkedItems.Contains(hdnProductId.Value))
checkedItems.Add(hdnProductId.Value);
}
else
{
checkedItems.Remove(hdnProductId.Value);
}
}
}
}

CheckedItems = checkedItems;
}

public List<string> CheckedItems
{
get
{
if (ViewState["CheckedItems"] == null)
return new List<string>();

return ViewState["CheckedItems"] as List<string>;
}
set
{
ViewState["CheckedItems"] = value;
}
}
#endregion

#551楼   回复  引用  查看    

2008-10-07 17:23 by 蜗牛身上的一只蚂蚁      
@-可乐
List<string> selectedItems = null;
if (AdminWebUtility.SelectedUnPicFolderItems == null)
selectedItems = new List<string>();
else
selectedItems = AdminWebUtility.SelectedUnPicFolderItems;

for (int i = 0; i < this.gvVideoFilePicUnCatalog.Rows.Count; i++)
{
string id = this.gvVideoFilePicUnCatalog.Rows[i].Cells[1].Text;
CheckBox cb = this.gvVideoFilePicUnCatalog.Rows[i].FindControl("itemCheckBoxUnPicFolder") as CheckBox;
if (selectedItems.Contains(id) && !cb.Checked)
selectedItems.Remove(id);
if (!selectedItems.Contains(id) && cb.Checked)
selectedItems.Add(id);
}
就是先定义一个数组对象A(我现在这个定义的是一个List<string>,它跟数组ArrayList 差不多)。循环当前选中的项。如果选中则存在A中。。。最后把A给它就行了。。。

#552楼   回复  引用  查看    

2008-10-07 17:24 by 蜗牛身上的一只蚂蚁      
再次感谢LZ大大的分享。。。谢谢。。。。

#553楼   回复  引用  查看    

2008-10-07 17:33 by -可乐      
@webabcd
谢谢,还有一个问题,就是如上面引用的代码中的问题一样,不知道在哪里调用初始化代码,如果在PageIndexChanged里调用会有问题

#554楼   回复  引用  查看    

2008-10-07 20:48 by -可乐      
虽然效率很低,但搞了一天终于搞定了,打算改源码来提高效率。可以在OnDataBound里调用初始化函数,实现翻页选中和选中导出了,谢谢LZ和蜗牛身上的一只蚂蚁

#555楼[楼主]   回复  引用  查看    

2008-10-08 07:38 by webabcd      
@蜗牛身上的一只蚂蚁
@-可乐
看来没什么需要我回的了
谢谢大家

#556楼   回复  引用  查看    

2008-10-08 09:52 by 蜗牛身上的一只蚂蚁      
@webabcd
感谢LZ大大的分享。嘎嘎。。。

@-可乐
改好后分享下。嘎嘎。。。
最近看他们的MVC呢。。。。

#557楼   回复  引用    

2008-10-08 10:56 by lucasxie[未注册用户]
非常感谢,太热情了,有你这样的人真好

#558楼[楼主]   回复  引用  查看    

2008-10-08 12:39 by webabcd      
@蜗牛身上的一只蚂蚁
@lucasxie
:)
大家多交流,共同提高

#559楼   回复  引用    

2008-10-15 13:47 by Levi[未注册用户]
你好!谢谢你的努力!真的佩服你!呵呵!
但是我现在我有个问题,项目后台的数据库是Oracle,数据量比较大,所以想实现分页功能,那我怎么去处理呢?应该返回什么值,并且绑定到你的控件什么属性上呢?如果使用你的自定义分页功能的话,怎么处理呢》谢谢你的回答!急需等待中!

#560楼   回复  引用    

2008-10-15 14:15 by Levi[未注册用户]
再接着追加问题,就是如果我想把这个控件做为显示搜索结果作用,那我是不是在objectdatasource写个类文件,返回搜索结果集,然后再绑定到objectdatasource 就可以了,是吗?还有就是右键可以怎么获得该列的datakey的值?

#561楼   回复  引用    

2008-10-15 15:23 by Levi[未注册用户]
再接着追加问题,就是如果我想把这个控件做为显示搜索结果作用,那我是不是在objectdatasource写个类文件,返回搜索结果集,然后再绑定到objectdatasource 就可以了,是吗?还有就是右键可以怎么获得该列的datakey的值?然后跨页传递值到另外页面.

#562楼[楼主]   回复  引用  查看    

2008-10-15 18:22 by webabcd      
@Levi
如果数据源控件的话,那么实现大数据量分页还是很方便的
这里有一个LINQ+GridView的大数据量分页DEMO
http://www.cnblogs.com/webabcd/archive/2007/10/23/933896.html" target="_new">http://www.cnblogs.com/webabcd/archive/2007/10/23/933896.html

把行的datakey放到页面里,右键的时候js读取相应的行的datakey

#563楼   回复  引用    

2008-10-15 23:06 by Levi[未注册用户]
谢谢你提供的链接资料!但是对于获取相应行的datakey值,还不是很清楚你的意思?Js读取相应行的datakey,在哪里添加呢?
-----------------------------------------------
@GoogleFans
都是客户端操作,那就更简单了
在生成的右键菜单的li中增加一个标识用的attribute
----------------------------------------
像上面你回答的那样吗?你这边有demo吗?

#564楼[楼主]   回复  引用  查看    

2008-10-16 07:43 by webabcd      
@Levi
做个隐藏控件或tr的属性,放到相应的行里

没有Demo,其实他说的也很清楚了

#565楼   回复  引用  查看    

2008-10-22 15:38 by 阿一      
请问一下,能否解决没有数据时也显示表头。

#566楼   回复  引用  查看    

2008-10-22 15:42 by 阿一      
还有你那脚本库的JS是怎么压缩成一行的!用什么工具,能否共享一份给小弟。
goansonpan@126.com

#567楼[楼主]   回复  引用  查看    

2008-10-23 07:35 by webabcd      
@阿一
参考
http://code.msdn.microsoft.com/AlwaysShowHeaderFoot" target="_new">http://code.msdn.microsoft.com/AlwaysShowHeaderFoot

压缩js的那个工具是网上找的,完了叫什么名字了,google一下吧

#568楼   回复  引用    

2008-10-23 15:06 by shark0304[未注册用户]
版主,这个可以实现复杂表头吗

#569楼[楼主]   回复  引用  查看    

2008-10-23 19:07 by webabcd      
@shark0304
不可以,要自己写代码

#570楼   回复  引用    

2008-11-12 16:59 by howgoo[未注册用户]
VS2008中,视图界面,老是“创建控件出错”,未能对属性XX设置XX。怎么办啊。老看不到视图设计界面

#571楼[楼主]   回复  引用  查看    

2008-11-12 18:28 by webabcd      
@howgoo
是这个控件吗,刚才用这个demo在vs2008下测试了一下,没问题啊

#572楼   回复  引用    

2008-11-13 10:51 by howgoo[未注册用户]
@webabcd
我要退出vs2008,打开解决方案,才可以在视图界面看到SmartGridView的表格,才不会出现那个错误。
有时候,还要删除C:\Documents and Settings\Administrator\Local Settings\Application Data\Microsoft\VisualStudio\9.0\ProjectAssemblies中的文件,才能正常。
我怀疑可能是Vs2008的问题

#573楼[楼主]   回复  引用  查看    

2008-11-13 12:24 by webabcd      
@howgoo
奇怪了,我倒是没遇到过
呵呵,也许是因为很少在设计视图中写代码的原因

#574楼   回复  引用  查看    

2009-02-23 16:53 by 四喜      
马克之,ths!

#575楼[楼主]   回复  引用  查看    

2009-02-23 17:39 by webabcd      
@四喜
:)
马克之是好习惯啊

#576楼   回复  引用    

2009-03-09 23:55 by Jake2009 [未注册用户]
"result".InnerHtml = s + "<br />";
这个说是当前个result“这个名称不存在呢???这个是为什么呢????

#577楼[楼主]   回复  引用  查看    

2009-03-10 07:31 by webabcd      
@Jake2009
。。。
当然不能是字符串.
而应该是对象.

#578楼   回复  引用    

2009-03-16 16:46 by 雪界冰河
非常感谢楼主,向你学习

#579楼[楼主]   回复  引用  查看    

2009-03-17 07:37 by webabcd      
@雪界冰河
:)
大家互相学习,共同提高

#580楼   回复  引用    

2009-05-14 15:43 by xmlys[未注册用户]
能否在不使用复选框的情况下单击某行(的任一部分)改变该行的样式?(使被点击的行突出显示)

#581楼[楼主]   回复  引用  查看    

2009-05-14 17:27 by webabcd      
@xmlys
这个控件实现不了。其实这个需求的话直接写js也不麻烦

#582楼   回复  引用    

2009-05-22 14:47 by DanieHung[未注册用户]
result.InnerHtml = s + "<br />";

请问上面这一行要怎麽改才能正常执行?
我一直卡在这一行

#583楼[楼主]   回复  引用  查看    

2009-05-22 17:12 by webabcd      
@DanieHung
。。。
没太明白是什么问题,能不能再说详细点?

#584楼   回复  引用  查看    

2009-05-26 17:35 by 小狼狗      
mark

#585楼[楼主]   回复  引用  查看    

2009-05-27 07:40 by webabcd      
@小狼狗
:)
mark是个好习惯

#586楼   回复  引用    

2009-05-27 15:05 by DanieHung[未注册用户]
@webabcd
我已经可以正常执行了
谢谢您

#587楼[楼主]   回复  引用  查看    

2009-05-27 18:10 by webabcd      
@DanieHung
:)
客气了,我应该是什么忙都没帮上,哈

#588楼   回复  引用    

2009-05-29 15:00 by DanieHung[未注册用户]
@webabcd
请问~采用fixrow的资源占用有办法改善吗?
因为我如果有很多笔资料又想fix栏位
可是画面就会变得非常慢
有没有比较好的方法使用呢?

#589楼   回复  引用    

2009-05-29 18:06 by DanieHung[未注册用户]
@webabcd
还有一个问题
就是如果用了fixrow的效果
会有scrollbar
但是当我把scrollbar往下移动之後按了submit的动作
scrollbar又会跑到最上面去了
有没有办法可以让它自动停在我上次停留的位置?
感激不尽!

#590楼[楼主]   回复  引用  查看    

2009-05-30 13:47 by webabcd      
@DanieHung
效率低是没办法的
因为用的是css+expression来实现的
建议别用了,这个到ie8就不支持了

滚动条的话,可以在postback前记下滚动条的位置并以其postback,然后render的时候,再根据此值设置滚动条的位置。可以参考一下alpha版,那个版本实现了这个功能

#591楼   回复  引用    

2009-07-01 16:46 by wumingxiaozu[未注册用户]
可不可以添加,拖动列宽的功能啊!!!!!!

#592楼[楼主]   回复  引用  查看    

2009-07-02 07:39 by webabcd      
@wumingxiaozu
我写的这个不行
不过记得有人实现过这个功能,可以google一下,应该有现成的控件
评论共6页: 上一页 1 2 3 4 5 6 



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 639830 urc6Ieg8ogs=



相关文章:

相关链接: