Loading...
扩展GridView控件(全)——增加10个常用功能 - webabcd - 专注于asp.net - 博客园

webabcd - 专注于asp.net

ASP.NET
从现在开始 一切都不晚
posts - 54, comments - 669, trackbacks - 77, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

公告

网名:webabcd
本名:王磊
职业:号称软件工程师
位置:中国 北京

积分与排名

  • 积分 - 168393
  • 排名 - 93

最新随笔

最新评论

GridView既强大又好用。为了让它更强大、更好用,我们来写一个继承自GridView的控件。
[源码下载]


扩展GridView控件(全)——增加10个常用功能



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

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

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

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

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

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

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

扩展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,Separator)
Icon - 文字左边的图标的链接
Text - 菜单的文字
CommandButtonId - 所调用的命令按钮的ID
NavigateUrl - 链接的url
Target - 链接的target(Blank,Self,Top)

10、再增加一种分页样式
设置PagingStyle属性为Default
设置GridView的原有属性PageButtonCount,FirstPageText,PreviousPageText,NextPageText,LastPageText,FirstPageImageUrl,PreviousPageImageUrl,NextPageImageUrl,LastPageImageUrl


OK
[源码下载]

Feedback

# re: 扩展GridView控件[未登录]  回复  更多评论   

2007-02-04 22:29 by Tony Woo
Good job

# re: 扩展GridView控件  回复  更多评论   

2007-02-04 22:39 by ivw
恭喜啊,终于写好了。

# re: 扩展GridView控件  回复  更多评论   

2007-02-04 22:46 by webabcd
@Tony Woo
@ivw
:)

# re: 扩展GridView控件  回复  更多评论   

2007-02-04 22:48 by Jeffrey Zhao
Cool, I like your job!

# re: 扩展GridView控件  回复  更多评论   

2007-02-04 22:52 by Cat Chen
其实,我觉得对GridView如此该法,还不如自己写一个新的控件。这样给GridView增加功能,耦合度太高了,如果导致性能下降之类的也很难优化。可能选择decorate或者facade之类的模式,来增加和封装功能,那样会好一些,而ASP.NET实际上是提供了机制允许你这样做的。

# re: 扩展GridView控件  回复  更多评论   

2007-02-04 23:05 by webabcd
@Jeffrey Zhao
:)
谢谢,不过水平有限啊

# re: 扩展GridView控件  回复  更多评论   

2007-02-04 23:17 by webabcd
@Cat Chen
谢谢指点,不过我还是觉得扩展一下来得简单点,性能下降是没办法避免的啊

关于设计模式,自我感觉还欠火候,怕适得其反

# re: 扩展GridView控件  回复  更多评论   

2007-02-04 23:46 by JesseZhao
最近看了苏鹏的一个webcast,深入讲解了以下GridView控件,上面的大部分功能仿佛GridView自己本身也都可以实现。

# re: 扩展GridView控件  回复  更多评论   

2007-02-04 23:54 by Jeffrey Zhao
@JesseZhao
万物都是HTML,各种功能也就是配合JS或CSS而已。

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 00:59 by Jeffrey Zhao
@Cat Chen
嗯,不过现在这个是个很好的练习,对于了解GridView很有帮助。

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 07:02 by 沧桑雨迢迢
很不错的东西撒~

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 08:20 by 冬冬
不错,参考一下,自己动手写。

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 08:33 by 暮松
太酷了,喜欢这个....

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 08:38 by 孤叶(学习.net框架)
很多时候我们需要这种功能,为了给BC用户更好的感受。
嗯,GOOD JOB.可以再加个字段可以拖拉的功能.像RAD控件中的一样
哈哈

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 08:41 by webabcd
@沧桑雨迢迢
@冬冬
@暮松
:)
见笑了

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 08:41 by webabcd
@孤叶(学习.net框架)
试图加来者,可是失败了

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 08:58 by 代码乱了
很不错,我正需要

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 09:11 by ivw
什么时候做一个用存储过程做的分页控件啊?

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 09:14 by 在北京的湖南人
一般都用repeater,轻量级,而且不产生垃圾代码,容易排版

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 09:17 by webabcd
@代码乱了
:)
见笑了

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 09:17 by webabcd
@ivw
接下来就做

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 09:20 by webabcd
@在北京的湖南人
用repeater的话,编代码太多了,估计我这水平半年也做不成现在的效果

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 09:31 by 代码乱了
@webabcd
我觉得表头固定应该是固定Header而不是第一行,目前你的这个控件可以这样吗?

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 09:36 by webabcd
@代码乱了
现在固定行和固定表头、固定分页行是分开的,设置的是不同的属性

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 09:50 by 数据绑定者
提个建议行不 ?

能不能多页面选取或全选,而不是当前页

//考虑下ViewState或隐藏的lable呵呵

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 09:55 by ivw
如果分页里加个总记录数上去就更好些。

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 09:55 by webabcd
@数据绑定者
确实,曾经也有一些项目有这种需求,解决办法就是放到ViewState里

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 09:57 by webabcd
@ivw
郁闷啊,昨天为了总记录数我想了好几个小时没想出来怎么做

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 09:58 by didasoft
不错,支持

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 10:00 by ivw
我做了个,可能不太好。用session或在控件里加个属性,在
ObjectDataSource1_Selected 事件里把总记录数赋值。
要不就把数据源功能集成进gridview

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 10:38 by CooS
@webabcd
不知道在你机器上有没有性能问题(还是只在我的机器上有这种问题?)
在我的机器上 开着SmartGridView测试 页面
鼠标在GrdiView上 上下移动
SmartGridView测试页面所对应的 iexplore.exe就会狂占cpu

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 11:33 by 苏鹏
好东东啊,写的好

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 12:07 by webabcd
@didasoft
:) 谢谢

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 12:09 by webabcd
@ivw
整合到GridView里就是
在GridView的OnLoad里找到数据源控件,然后给这个数据源控件增加一个Selected的事件处理,然后根据参数ObjectDataSourceStatusEventArgs得到总记录数

呵,刚才测试成功了

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 12:13 by webabcd
@CooS
现在的固定行、列,是用css+javascript实现的,我这里用IE打开也是狂占cpu
还有一种使用div的方法,一点不费资源,不过我们整合进去
咳!水平不够啊

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 12:13 by webabcd
@苏鹏
传说中的苏老师啊
苏老师好,看你的webcast很受用

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 12:44 by wkaka
ASP.net2.0(C#) QQ群:16205966
欢迎大家交流

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 14:26 by 飞天老鼠
楼主真牛。
学习。

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 14:29 by ivw
“整合到GridView里就是
在GridView的OnLoad里找到数据源控件,然后给这个数据源控件增加一个Selected的事件处理,然后根据参数ObjectDataSourceStatusEventArgs得到总记录数”

你加到代码发上来好吗?

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 14:38 by ivw
你是这样做吗?在onload里加上
ObjectDataSource od = (ObjectDataSource)Page.FindControl(this.DataSourceID);
od.Selected += new ObjectDataSourceStatusEventHandler(od_Selected);

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 14:56 by webabcd
@飞天老鼠
还很嫩,大家互相学习

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 14:57 by webabcd
@ivw
我也是这样做的
公司防火墙不让上传东西,回家后我就发上来

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 15:16 by ivw
哦,那谢谢了,这个我之前做好了,你加上去给其它人估个参考吧。

# re: 扩展GridView控件  回复  更多评论   

2007-02-05 15:31 by webabcd
@ivw
:)
好的

# re: 扩展GridView控件  回复  更多评论   

2007-02-06 02:05 by Justin
严重支持,原创开源!

# re: 扩展GridView控件  回复  更多评论   

2007-02-06 07:55 by webabcd
@Justin
谢谢
兄弟还真是好精神啊,那么晚都不睡

# re: 扩展GridView控件  回复  更多评论   

2007-02-06 11:22 by wyssoft
刚测试了一下。不能放入ajax的 UpdatePanel控件内。不知怎么解决?

# re: 扩展GridView控件  回复  更多评论   

2007-02-06 12:57 by webabcd
@wyssoft
我测了一遍,没问题
你的报什么错?

# re: 扩展GridView控件  回复  更多评论   

2007-02-06 14:56 by ivw
不知道楼主有没有想过把改变列宽的功能加上去呢?这样看上去就更人性化了。

# re: 扩展GridView控件  回复  更多评论   

2007-02-06 15:23 by XJY123
支持

# re: 扩展GridView控件  回复  更多评论   

2007-02-06 15:27 by webabcd
@ivw
哈,改变列宽的javascript已经找到了,可是水平有限,集成不进去

# re: 扩展GridView控件  回复  更多评论   

2007-02-06 15:29 by webabcd
@XJY123
:)
谢谢

# re: 扩展GridView控件  回复  更多评论   

2007-02-06 15:39 by ivw
呵呵,我找到的是datagrid的,也试试看能不能集成上去,不过我找到的那份js好像效果不太好

# re: 扩展GridView控件  回复  更多评论   

2007-02-06 15:42 by ivw
不知道楼主有没有找到动态创建模板列更好的解决办法呢?

# re: 扩展GridView控件  回复  更多评论   

2007-02-06 16:01 by webabcd
@ivw
我能想到的解决你问题的办法就是禁用ViewState,然后每次回发服务器都动态创建列

# re: 扩展GridView控件  回复  更多评论   

2007-02-06 16:18 by ivw
能不能用viewstate把模板列记录下来呢?

# re: 扩展GridView控件  回复  更多评论   

2007-02-06 16:31 by webabcd
@ivw
个人感觉不行,因为你动态创建的模板列要映射到数据源相关字段的

# re: 扩展GridView控件  回复  更多评论   

2007-02-06 23:22 by ivw
请问楼主有试过定义一个字符串数组属性吗?下面这样做会出错的。有其它办法吗?
public string[] test
{
get{return viewstate["tt"];}
set{viewstate["tt"=value];}
}

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 08:05 by webabcd
@ivw
try this

public string[] test
{
get{return (string[])ViewState["tt"];}
set{ViewState["tt"] = value;}
}

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 08:52 by ivw
对了上面打错了,我试的是跟你一样的,不行。

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 09:31 by webabcd
@ivw
我测了没问题,看看是不是在get的时候少加了判断,判断ViewState["tt"]是否为null

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 09:36 by wyssoft
我这根本拖不进去,没有什么错误。AJAX 是 http://ajax.asp.net/ 下载下来的。

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 09:44 by ivw
有啊,编译时没说错,但在用的时候就出问题了。这个属性想做出来的效果GridView的datakeyname的效果一样。
(viewstae["tt"]==null)?string.empty:(string[])viewstate["tt"]

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 09:50 by webabcd
@wyssoft
哦?
不会啊,我这里是没问题的,能拖到updatepanel里,而且工作正常

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 09:52 by webabcd
@ivw
如果是null的话应该设置成返回new string[]吧

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 09:53 by ivw
null时没错,但如果添加了内容后就出问题了。你可以试试,

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 10:35 by webabcd
@ivw
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
test = new string[] { "1", "2" };
}

public string[] test
{
get { return (string[])ViewState["tt"]; }
set { ViewState["tt"] = value; }
}

protected void Button1_Click(object sender, EventArgs e)
{
string[] s = test;
}

没问题

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 11:09 by ivw
如果在属性面板里点右边的按钮弹出字符串编辑器,输入后就会出错。内容是“无法从test属性的字符串表示形式 "String[] Array"创建"System.String[]"类型的对象”

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 11:29 by webabcd
@ivw
属性编辑器是没办法编辑string类型的

你要在属性编辑器里写数组的话可以考虑CollectionBase

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 11:38 by ivw
但GridView的DataKeyNames这个属性是怎样实现的呢?

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 11:53 by webabcd
@ivw
DataKeyNames显示到页中是字符串形式,以逗号分隔的。在属性编辑器里用回车分隔的。
我估计是用了类型转换器

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 11:54 by ivw
可以做出来吗?

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 12:20 by webabcd
@ivw
可以做出来是肯定的,但是我不会
看看他的文章吧
http://www.cnblogs.com/Clingingboy/archive/2006/09/17/506741.html

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 14:51 by wyssoft
我的环境是windows server 2003\vs 2005,你的是什么啊?

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 15:10 by webabcd
@wyssoft
一样

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 16:39 by wyssoft
@webabcd

能把加好到updatepanel的工程给我传过来吗。我这真是不行。多谢了

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 16:39 by wyssoft
@webabcd
Wyssoft@163.com

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 16:41 by webabcd
@wyssoft
give me your email address

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 16:42 by wyssoft
@webabcd
Wyssoft@163.com

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 17:01 by ivw
请问楼主,能不能定义一个类,作用就是包含自己定义的控件啊?就像Control一样,里面包含各种控件。不是命名空间

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 17:03 by webabcd
@wyssoft
the email has sent

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 17:05 by webabcd
@ivw
应该可以,你可以写个继承自CompositeControl的类试一试

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 17:12 by wyssoft
@webabcd
不好意思。好像真是好使。可能是我的配置没调好,回头我再测试一下。多谢了。

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 17:12 by ivw
继承自CompositeControl后怎样包含指定的控件呢?

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 17:13 by ivw
不是创建复合控件啊。是像Control一样啊。

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 17:34 by webabcd
@wyssoft
不谢

@ivw
就把你的自定义控件当普通控件用就行,你不是要写一个包含很多控件的控件吗,CompositeControl会很方便

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 17:39 by ivw
我是这样想的,写一个类,里面包含自定义的控件,就像System.Web.UI.WebControls.WebControl 一样,他包含了textbox,button...等等控件。CompositeControl我还没有试过。不知道楼主能不能给个小例子看看呢?

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 17:44 by webabcd
@ivw
哦,那就命名空间是System.Web.UI.WebControls.WebControl,然后textbox,button是这个命名空间下的类就ok了啊


CompositeControl这玩意可以看一下这个例子
http://www.cnblogs.com/webabcd/archive/2006/12/28/605765.html

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 17:52 by ivw
本来就是这样啊
namespace YYControls.SmartGridView
{

public class SmartGridView : GridView
{
.............


我想是能不能用foreach找控件时只找YYControls空间里的控件啊?
foreach (Control controls in pa.Form.Controls)
{}

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 20:30 by webabcd
@ivw
那就遍历的时候检查一下控件的命名空间是否是你所需要的就行了吧

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 20:36 by ivw
用这个?
foreach (Control controls in pa.Form.Controls)
这个只是遍历Control类的控件啊,我试着把它改成自己的控件空间,就出现错误了。

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 21:20 by webabcd
@ivw
foreach (Control c in Page.Controls)
{
if (c.GetType().Namespace == "xxx")
{
// do
}
}

# re: 扩展GridView控件  回复  更多评论   

2007-02-07 21:31 by ivw
原来这样啊,好的,谢谢,试试

# re: 扩展GridView控件  回复  更多评论   

2007-02-08 08:51 by wyssoft
@webabcd
我测了一下。正常情况下是可以拖入UpdatePanel的,没有什么问题。但如果设置了TableWidth和TableHeight两个属性就拖不进去了,或也拖不出来了。这也不是什么大问题,只要先拖里在设置TableWidth和TableHeight就没什么了。我也看到了在UpdatePanel里工作的很好,但有一种没有实现,在编辑的结束的时候不想让滚动条复位到顶部,回头给你发一个工程。看看有没有办法呢。这个问题困扰了我好几天。多谢。

# re: 扩展GridView控件  回复  更多评论   

2007-02-08 09:00 by webabcd
@wyssoft
设置了TableWidth和TableHeight就不行了是因为设置他们之后我就在GridView的外面包了一个div

更新之后还要滚动条回到原来的位置,可以用一个hidden实时存储滚动条的位置,然后每次加载的时候触发一个javascript从hidden中读出来并设置位置

# re: 扩展GridView控件  回复  更多评论   

2007-02-08 09:24 by ivw
请问一下,UpdatePanel跟Panel有什么分别啊,怎么我在控件里找不到UpdatePanel控件啊?

# re: 扩展GridView控件  回复  更多评论   

2007-02-08 09:52 by webabcd
@ivw
asp.net ajax啊
http://ajax.asp.net
下载

入门一下
http://www.cnblogs.com/webabcd/archive/2007/01/15/620490.aspx

# re: 扩展GridView控件  回复  更多评论   

2007-02-08 10:03 by wyssoft
@webabcd
能把那个javascript从hidden中读出来并设置位置关键代码写出来吗。我对javascript不太熟啊。多谢

# re: 扩展GridView控件  回复  更多评论   

2007-02-08 10:15 by ivw
是免费的吗?里面有很多个,下载那一个呢?

# re: 扩展GridView控件  回复  更多评论   

2007-02-08 10:22 by ivw
这个是不是MS开发的ajax啊,跟以前的ajaxPro有什么分别呢?

# re: 扩展GridView控件  回复  更多评论   

2007-02-08 10:51 by ivw
我刚看了
http://www.cnblogs.com/webabcd/archive/2007/01/15/620490.aspx
这个例子基本明白了一点。但我想问一下,用asp.net ajax 开发的项目如果发布后还要在安装asp.net ajax才能运行吗?还有如果在一个已有的项目里用上asp.net ajax功能,要怎样配置呢?谢谢

# re: 扩展GridView控件  回复  更多评论   

2007-02-08 11:12 by webabcd
@ivw
ajax的东西
看这些
http://www.cnblogs.com/dflying/category/52328.html
http://www.cnblogs.com/JeffreyZhao/category/73433.html
http://www.cnblogs.com/Terrylee/archive/2006/11/12/ASPNET_AJAX_QuickStarts.html

导一个dll,配一下web.config,isapi加一个.axd就ok了
具体的看上面那些文章吧,你该补课了

# re: 扩展GridView控件  回复  更多评论   

2007-02-08 11:18 by ivw
应该了。原来Atlas 就是asp.net ajax ,我太"out"了,我之前用的是ajaxpro还真没有试过altas

# re: 扩展GridView控件  回复  更多评论   

2007-02-08 11:31 by webabcd
@ivw
嗯,兄弟加油

# re: 扩展GridView控件  回复  更多评论   

2007-02-08 15:27 by ivw
请问在updatepanel 里使用gridview +ObjectDataSource 读数据时,如果执行了插入等操作时一定要做一次databind,控件才会更新。有没有办法可以方便些啊

# re: 扩展GridView控件  回复  更多评论   

2007-02-08 16:13 by webabcd
@ivw
这个和updatepanel没关系吧

# re: 扩展GridView控件  回复  更多评论   

2007-02-08 16:17 by ivw
但如果平时页面里按一个按钮执行插入后不用加databind回发后都会刷新。假如跟updatepanel没关系,有没有办法可以方便些,不用每次都加一句bind啊

# re: 扩展GridView控件  回复  更多评论   

2007-02-08 16:37 by webabcd
@ivw
看看是不是没有正确的设置Triggers

# re: 扩展GridView控件  回复  更多评论   

2007-02-08 17:00 by ivw
第二个updatepanel已经设置了triggers,我在里面放了文本框,内容也能改变,就是gridview没有刷新。放到同一个updatepanel里都是一样。

# re: 扩展GridView控件  回复  更多评论   

2007-02-08 18:05 by webabcd
@ivw
不太明白你的情况啊,发来代码看看

# re: 扩展GridView控件  回复  更多评论   

2007-02-08 18:09 by ivw
怎样发啊?你上QQ吗

# re: 扩展GridView控件  回复  更多评论   

2007-02-08 18:17 by ivw
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Collections.Generic" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Data" %>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Enter New Employees</title>
<script runat="server">
private List<Employee> EmployeeList;

protected void Page_Load()
{

}

protected void InsertButton_Click(object sender, EventArgs e)
{


try
{
SqlConnection cnn = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"].ToString());
if (cnn.State.ToString() == "Closed") cnn.Open();
SqlCommand cmm = new SqlCommand("insert into t_ddtab (lsh,ddid) values ('2555','2666')", cnn);

cmm.ExecuteNonQuery();
cnn.Dispose();
cnn.Close();
Label1.Text = "ok";
// EmployeesGridView.DataBind();
}
catch (Exception ex)
{ Label1.Text = ex.Message; }

}

protected void CancelButton_Click(object sender, EventArgs e)
{
FirstNameTextBox.Text = String.Empty;
LastNameTextBox.Text = String.Empty;
}



</script>
<script type="text/javascript">
function aa()
{

}
</script>
</head>

# re: 扩展GridView控件  回复  更多评论   

2007-02-08 18:18 by ivw
<body>
<form id="form1" runat="server">
<div>
&nbsp;</div>
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true" />
<asp:Button ID="Button1" runat="server" Text="Button" />&nbsp;
<table>
<tr>
<td style="height: 206px" valign="top">
<asp:UpdatePanel ID="InsertEmployeeUpdatePanel" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<table cellpadding="2" border="0" style="background-color:#7C6F57">
<tr>
<td style="height: 47px"><asp:Label ID="FirstNameLabel" runat="server" AssociatedControlID="FirstNameTextBox"
Text="First Name" ForeColor="White" /></td>
<td style="height: 47px"><asp:TextBox runat="server" ID="FirstNameTextBox" Height="23px" ></asp:TextBox></td>
</tr>
<tr>
<td><asp:Label ID="LastNameLabel" runat="server" AssociatedControlID="LastNameTextBox"
Text="Last Name" ForeColor="White" /></td>
<td><asp:TextBox runat="server" ID="LastNameTextBox" /></td>
</tr>
<tr>
<td></td>
<td>
&nbsp;<asp:LinkButton ID="InsertButton" runat="server" Text="Insert" OnClick="InsertButton_Click" ForeColor="White" />
<asp:LinkButton ID="Cancelbutton" runat="server" Text="Cancel" OnClick="CancelButton_Click" ForeColor="White" />
</td>
</tr>
</table>
<asp:Label runat="server" ID="InputTimeLabel"><%=DateTime.Now %></asp:Label>
<asp:Timer ID="Timer1" runat="server" Interval="1000" >
</asp:Timer>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
</ContentTemplate>
</asp:UpdatePanel>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;
</td>

# re: 扩展GridView控件  回复  更多评论   

2007-02-08 18:18 by ivw
<td valign="top">
<asp:UpdatePanel ID="EmployeesUpdatePanel" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:GridView ID="EmployeesGridView" runat="server" BackColor="LightGoldenrodYellow" BorderColor="Tan"
BorderWidth="1px" CellPadding="2" ForeColor="Black" GridLines="None" DataSourceID="ObjectDataSource1">
<FooterStyle BackColor="Tan" />
<SelectedRowStyle BackColor="DarkSlateBlue" ForeColor="GhostWhite" />
<PagerStyle BackColor="PaleGoldenrod" ForeColor="DarkSlateBlue" HorizontalAlign="Center" />
<HeaderStyle BackColor="Tan" Font-Bold="True" />
<AlternatingRowStyle BackColor="PaleGoldenrod" />
<PagerSettings PageButtonCount="5" />
</asp:GridView>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="Select" TypeName="ObjData">
<SelectParameters>
<asp:Parameter DefaultValue="select * from t_ddtab" Name="sqltxt" Type="String" />
</SelectParameters>
</asp:ObjectDataSource>
&nbsp;<asp:Label runat="server" ID="ListTimeLabel"><%=DateTime.Now %></asp:Label>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>&nbsp;
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="InsertButton" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
&nbsp;&nbsp;</td>
</tr>

</table>
<asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="InsertEmployeeUpdatePanel"
DisplayAfter="0" Visible="False">
<ProgressTemplate>
&nbsp;
<table border="1" bordercolordark="#ff6699" cellpadding="0" cellspacing="0" style="left: 41%;
width: 181px; position: absolute; top: 2%">
<tr>
<td>
<asp:Image ID="Image1" runat="server" ImageUrl="~/progress.gif" /></td>
</tr>
</table>
</ProgressTemplate>
</asp:UpdateProgress>
</form>
</body>
</html>

# re: 扩展GridView控件  回复  更多评论   

2007-02-08 18:19 by ivw
这全是同一个aspx文件的内容

# re: 扩展GridView控件  回复  更多评论   

2007-02-08 20:18 by lfzx_1227
好东西,支持下!

# re: 扩展GridView控件  回复  更多评论   

2007-02-08 21:52 by webabcd
@ivw
太长了,懒得看了,把你邮箱留下
我明天早上写一个发给你,现在要睡觉了,呵呵

@lfzx_1227
:)

# re: 扩展GridView控件  回复  更多评论   

2007-02-08 22:36 by ivw
呵呵。我本来想在Q里发给你,但你没上线。又不知道你的邮箱,所以就这样发。
liangivw@126.com,谢谢。

# re: 扩展GridView控件  回复  更多评论   

2007-02-09 08:25 by webabcd
@ivw
发了,收一下吧

# re: 扩展GridView控件  回复  更多评论   

2007-02-09 09:00 by ivw
怎么没收到啊?

# re: 扩展GridView控件  回复  更多评论   

2007-02-09 09:00 by Wyssoft
@webabcd
那个控制滚动条的javascript帮给找找吧.谢谢了

# re: 扩展GridView控件  回复  更多评论   

2007-02-09 09:25 by webabcd
@ivw
liangivw@126.com
又发了一遍

# re: 扩展GridView控件  回复  更多评论   

2007-02-09 09:27 by webabcd
@Wyssoft
就是得到scrollLeft和scrollTop放到hidden里
回发后在取出来

如果我这里礼拜有时间的话,我会尝试的做一下的

# re: 扩展GridView控件  回复  更多评论   

2007-02-09 10:07 by Wyssoft
@webabcd
好的,我试试.谢了.

# re: 扩展GridView控件  回复  更多评论   

2007-02-09 10:09 by ivw
那你发给我的那全例子用了DetailsView,但我把它换成一个button在里面写段插入代码,成功插入后gridview还是不能刷新。用DetailsView就可以。

# re: 扩展GridView控件  回复  更多评论   

2007-02-09 10:19 by webabcd
@ivw
这需要了解一下life cycle,呵,我也不是很清楚,有时间系统的学一下

# re: 扩展GridView控件  回复  更多评论   

2007-02-09 10:39 by ivw
正在学习Atlas中,刚还遇上这个问题
“命名空间“Microsoft”中不存在类型或命名空间名称“Web”(是缺少程序集引用吗?)”,还没找到原因呢

# re: 扩展GridView控件  回复  更多评论   

2007-02-09 12:19 by webabcd
@ivw
命名空间“Microsoft”?那是atlas的吧,正式版的不是这个命名空间

# re: 扩展GridView控件[未登录]  回复  更多评论   

2007-02-09 21:15 by 菌哥
好像有bug,如果smartgridview设置为可编辑,因为smartgridview设计了"单击行事件",如果这时候点"编辑"的话,会先被"单击行事件"捕捉,再点一下"编辑",才转换为编辑状态,请webabcd查一查,是不是有这样的问题?

# re: 扩展GridView控件  回复  更多评论   

2007-02-09 22:07 by webabcd
@菌哥
是这样的,应为单击按钮后既相应行的单击事件也相应按钮的单击事件

咳,要把这个分开太麻烦了,所以最好就别用行的单击事件了

# re: 扩展GridView控件  回复  更多评论   

2007-02-12 16:39 by Wyssoft
@webabcd
用 scrollLeft和scrollTop 应该是可以设置滚动位置,但找不到好的时机.总是被刷新给冲掉.你应该考虑考虑如何把这种效果加进去,就更好了

# re: 扩展GridView控件  回复  更多评论   

2007-02-12 22:42 by webabcd
@Wyssoft
好,我明天晚上改完后传上来

# re: 扩展GridView控件  回复  更多评论   

2007-02-13 09:00 by Wyssoft
@webabcd

期待中....................

# re: 扩展GridView控件[未登录]  回复  更多评论   

2007-02-13 12:32 by net
good 非常的实用

# re: 扩展GridView控件  回复  更多评论   

2007-02-13 13:48 by webabcd
@net
:)

# re: 扩展GridView控件  回复  更多评论   

2007-02-13 14:55 by webabcd
听取了Wyssoft的建议
增加了“是否保持滚动条的状态”的功能

文章已经更新,源码晚上传

# [导入]扩展GridView控件[TrackBack]  回复  更多评论   

2007-02-23 10:24 by 胡立新

# re: 扩展GridView控件[未登录]  回复  更多评论   

2007-02-25 10:01 by 小庄
发现bug:
1,跳到最后一页,全选执行成功,但页面左下角提示脚本错误。
2,然后再转到其它页,全选功能不正常(只选择了最后一页的记录数)。
建议:
我的数据是用存储过程实现分页的(nettires生成的getpaged方法),gridview认为它只有一页,怎么用你的分页样式呢?
我现在的方法是自己单独做的分页控件,不太美观。
iamxiaozhuang@hotmail.com 欢迎讨论。

# re: 扩展GridView控件  回复  更多评论   

2007-02-25 11:39 by 老夫子系
我做了一个测试界面,一个保存按钮,一个SmartGridView,先点复选框选择几行,然后点击保存按钮,将选择行的ID保存到数据库中。可是在保存事件中,怎么获取选择行的ID。为什么点击保存按钮后,会报错!

# re: 扩展GridView控件  回复  更多评论   

2007-02-25 13:25 by webabcd
@小庄
找到原因了,RowDataBound事件会被执行两次,索引给隐藏字段赋值的时候就会有问题,想破脑袋也不知道RowDataBound事件为什么会被执行两次。想明白后我再把解决办法贴出来

至于分页样式,我的那个只是改写原来GirdView的分页样式而已,如果用存储过程分页的话,我那个肯定只认为有一页的。
我觉得如果要用存储过程分页的话,肯定是要写一个单独的分页控件的

# re: 扩展GridView控件  回复  更多评论   

2007-02-25 13:28 by webabcd
@老夫子系
获取选中行的ID就是查看哪个行的复选框被选中了,然后读出这个行的关键字就ok了

# re: 扩展GridView控件  回复  更多评论   

2007-02-27 10:05 by Wyssoft
@webabcd
支持你所做出的努力.
刚放完假,测了一下你的新版本.不过,跟我的想象还有点差别.主要是刷新问题,滚动条是可以保持相对位置了,但想避免刷新.我试用一个UpdatePanel套进去,结果滚动条保持不了位置了.

# re: 扩展GridView控件  回复  更多评论   

2007-02-27 11:39 by webabcd
@Wyssoft
那个需要在updatepanel中注册js,做在控件里不方便,有时间了我会贴出一个解决办法的

# re: 扩展GridView控件  回复  更多评论   

2007-02-28 14:51 by 孤叶(学习.net框架)
FireFox好像有的功能不支持,你的这个控件.

# re: 扩展GridView控件  回复  更多评论   

2007-02-28 16:07 by webabcd
@孤叶(学习.net框架)
确实,我的js水平不够啊,无法为ff写与其适用应的js

# re: 扩展GridView控件  回复  更多评论   

2007-03-01 22:21 by webabcd
更新列表1
@小庄 发现的bug描述如下
1,跳到最后一页,全选执行成功,但页面左下角提示脚本错误。
2,然后再转到其它页,全选功能不正常(只选择了最后一页的记录数)。

原因
执行分页或者排序事件之类的,重写的RowDataBound事件会执行两次,第一次DataBound老数据,第二次DataBound新数据;重写的PreRender会执行一次(老数据),而其中调用基类的方法base.OnPreRender(e)会执行两次

为什么会出这样?
不知道

解决办法
数据源的Select事件只会执行一次,并且执行之后会RowDataBound新数据,所以,如果设置一个变量来确保只有数据源的Select事件之后才RowDataBound就ok了
把重写的PreRender换为在GridView的构造函数中增加GridView的事件委托,则没有上述问题

# re: 扩展GridView控件  回复  更多评论   

2007-03-01 22:27 by webabcd
更新列表2
@Wyssoft 提出的问题
如果固定行、列的话刷新后,滚动条是可以保持相对位置了,但想避免刷新。我试用一个UpdatePanel套进去,结果滚动条保持不了位置了。

原因
我的代码是用Page来注册客户端代码的,用了asp.net ajax要用ScriptManager来注册客户端代码

解决办法
暴露两个只可访问的公共属性
ScrollX和ScrollY
在页面的代码中如下注册客户端代码即可
ScriptManager.RegisterStartupScript(UpdatePanel1, typeof(UpdatePanel), "js", "document.getElementById('yy_ScrollDiv').scrollLeft=" + SmartGridView1.ScrollX + ";document.getElementById('yy_ScrollDiv').scrollTop=" + SmartGridView1.ScrollY + ";", true);

# re: 扩展GridView控件  回复  更多评论   

2007-03-02 09:26 by Wyssoft
@webabcd
不知道是不是跟UpdatePanel有关,在设计模式下老死掉.

ScriptManager.RegisterStartupScript(UpdatePanel1, typeof(UpdatePanel), "js", "document.getElementById('yy_ScrollDiv').scrollLeft=" + SmartGridView1.ScrollX + ";document.getElementById('yy_ScrollDiv').scrollTop=" + SmartGridView1.ScrollY + ";", true);

这段代码应该放在页面中哪个位置比较合适呢?

# re: 扩展GridView控件  回复  更多评论   

2007-03-02 10:39 by webabcd
@Wyssoft
如果使用了固定行、列的功能后就会出现这种现象

那段代码可以加到Page_Load里

# re: 扩展GridView控件  回复  更多评论   

2007-03-05 09:15 by Wyssoft
@webabcd
为什么会是这样,有没有办法解决呢.我记得以前的版本好像没有吧.
滚动条位置好像可以借助MaintainScrollPositionOnPostback这个属性解决.
你试试,我这没法调了.

# re: 扩展GridView控件  回复  更多评论   

2007-03-05 10:13 by webabcd
@Wyssoft
MaintainScrollPositionOnPostback这个属性是相对于浏览器的,我的那个是相对于GridView所在的DIV的,不能借用啊

另外,可能会死掉是因为固定了行、列的原因,因为行、列都有可能固定,所以我在每个单元格都用css调js实现这个功能,比较耗cpu,所以有可能会死掉

还有一种用div冻结行、列的实现方法,但是集成到GridView里超麻烦,所以放弃了

# re: 扩展GridView控件(全)——增加10个常用功能  回复  更多评论   

2007-03-09 08:53 by Wyssoft
@webabcd
我决得那个耗cpu问题,真是个很大的问题.应该考虑考虑

# re: 扩展GridView控件(全)——增加10个常用功能  回复  更多评论   

2007-03-09 10:13 by Wyssoft
刚发现 用SqlDataSource作数据源,标题不能初固定.是怎么回事.

# re: 扩展GridView控件(全)——增加10个常用功能  回复  更多评论   

2007-03-09 12:39 by webabcd
@Wyssoft
确实,冻结行、列后耗cpu问题同时也出现在客户端显示的时候,但以我现在的水平也确实没什么好的解决办法。如果在设计模式中会死掉,那就用在HTML模式下写代码吧。或者先不加冻结行、列的功能,等都设计得差不多了,再在HTML模式下把冻结行、列的功能加上

我没用SqlDataSource数据源做过测试,实际上我从来都没用过SqlDataSource,它会破坏项目中的层次结构,建议兄弟实际开发中也别用它。

# re: 扩展GridView控件(全)——增加10个常用功能  回复  更多评论   

2007-03-15 16:07 by wyz
东西确实很好用,但是有一点在开发的时候,预览这个控件的属性时候经常CPU不够用

# re: 扩展GridView控件(全)——增加10个常用功能  回复  更多评论   

2007-03-15 20:27 by webabcd
@wyz
这是因为使用了固定行、列功能的原因,因为行、列都有可能固定,所以我在每个单元格都用css调js实现这个功能,比较耗cpu

# re: 扩展GridView控件(全)——增加10个常用功能  回复  更多评论   

2007-03-16 13:28 by Wyssoft
@webabcd
在ItemTemplate里加一个DropDownList,结果DropDownList跑到固定行的上面进行移动

# re: 扩展GridView控件(全)——增加10个常用功能  回复  更多评论   

2007-03-16 15:13 by webabcd
@Wyssoft
这是IE的BUG,就是当层遇到下拉框时总是挡不了select框

# re: 扩展GridView控件(全)——增加10个常用功能  回复  更多评论   

2007-03-19 09:30 by FrankFei
我在针对SmartGridView编程时,
SmartGridView1 = new SmartGridView();
SmartGridView1.RowCommand += new GridViewCommandEventHandler(SmartGridView1_RowCommand);在运行时就是不响应,而如果把SmartGridView中的protected override void OnRowDataBound(GridViewRowEventArgs e)拿掉就可以了,这是为什么呢?

# re: 扩展GridView控件(全)——增加10个常用功能  回复  更多评论   

2007-03-19 10:16 by webabcd
@FrankFei
我试了一下,没问题啊

protected void Page_Load(object sender, EventArgs e)
{
SmartGridView1.RowCommand += new GridViewCommandEventHandler(SmartGridView2_RowCommand);
}

protected void SmartGridView2_RowCommand(object sender, GridViewCommandEventArgs e)
{

}

# re: 扩展GridView控件(全)——增加10个常用功能  回复  更多评论   

2007-03-19 11:18 by FrankFei
可是我测试下来确实是这样的,下面为源码,能否帮忙看看,谢谢!

public partial class Default3 : System.Web.UI.Page
{
private SmartGridView smartGridView;
protected void Page_Load(object sender, EventArgs e)
{
string connectionString = "Data Source=dev;User ID=user;Password=pw";
OracleDatabase oracleDatabase = new OracleDatabase(connectionString);
OracleCommand oracleCommand = new OracleCommand();
oracleCommand.CommandType = CommandType.Text;
oracleCommand.CommandText = "select * from hr_absence_type";
DataSet dataSet = oracleDatabase.ExecuteDataSet(oracleCommand);

BoundField absenceTypeId = new BoundField();
absenceTypeId.DataField = "absence_type_id";
absenceTypeId.HeaderText = "假别ID";
BoundField absenceCode = new BoundField();
absenceCode.DataField = "absence_code";
absenceCode.HeaderText = "假别代号";
BoundField absenceName = new BoundField();
absenceName.DataField = "absence_name";
absenceName.HeaderText = "假别名称";

TemplateField dataItemIndex = new TemplateField();
GridViewItemTemplate gridViewItemTemplate = new GridViewItemTemplate();
dataItemIndex.ItemTemplate = gridViewItemTemplate;

SmartGridView1 = new SmartGridView();
SmartGridView1.RowCommand += new GridViewCommandEventHandler(SmartGridView1_RowCommand);

SmartGridView1.AutoGenerateColumns = false;
SmartGridView1.Columns.Add(absenceTypeId);
SmartGridView1.Columns.Add(absenceCode);
SmartGridView1.Columns.Add(absenceName);
SmartGridView1.Columns.Add(dataItemIndex);
SmartGridView1.ApplyStyleSheetSkin(this);

SmartGridView1.DataSource = dataSet;
SmartGridView1.DataBind();
Control form = this.FindControl("form1");
form.Controls.Add(SmartGridView1);
}
protected void SmartGridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
this.TextBox1.Text = "第" + (Convert.ToInt32(e.CommandArgument)).ToString() + "行 ";
}
public SmartGridView SmartGridView1
{
get
{
return smartGridView;
}
set
{
smartGridView = value;
}
}

}
class GridViewItemTemplate : ITemplate
{
public GridViewItemTemplate()
{
}

public void InstantiateIn(Control container)
{
Button button = new Button();
button.ID = "btnRightMenuButton";
button.CommandName = "RightMenuButton";
button.DataBinding += new EventHandler(this.OnDataBinding);

container.Controls.Add(button);
}

public void OnDataBinding(object sender, EventArgs e)
{
Button button = (Button)sender;
GridViewRow gridViewRow = (GridViewRow)button.NamingContainer;
button.CommandArgument = gridViewRow.Cells[0].Text.ToString();
}
}

# re: 扩展GridView控件(全)——增加10个常用功能  回复  更多评论   

2007-03-19 11:44 by webabcd
@FrankFei
诡异了,我试了一下这个,是可以执行SmartGridView1_RowCommand的

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

using System.Data.SqlClient;

using YYControls.SmartGridView;

public partial class Default2 : System.Web.UI.Page
{
private SmartGridView smartGridView;
protected void Page_Load(object sender, EventArgs e)
{
string connectionString = "data source=.;database=Test;User ID=sa;Password=sa";
SqlDataAdapter cmd = new SqlDataAdapter("select * from testtable", connectionString);
DataSet dataSet = new DataSet();
cmd.Fill(dataSet);
cmd.Dispose();

BoundField absenceTypeId = new BoundField();
absenceTypeId.DataField = "name";
absenceTypeId.HeaderText = "name";

TemplateField dataItemIndex = new TemplateField();
GridViewItemTemplate gridViewItemTemplate = new GridViewItemTemplate();
dataItemIndex.ItemTemplate = gridViewItemTemplate;

SmartGridView1 = new SmartGridView();
SmartGridView1.RowCommand += new GridViewCommandEventHandler(SmartGridView1_RowCommand);

SmartGridView1.AutoGenerateColumns = false;
SmartGridView1.Columns.Add(absenceTypeId);
SmartGridView1.Columns.Add(dataItemIndex);
SmartGridView1.ApplyStyleSheetSkin(this);

SmartGridView1.DataSource = dataSet;
SmartGridView1.DataBind();
Control form = this.FindControl("form1");
form.Controls.Add(SmartGridView1);
}
protected void SmartGridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
Response.Write("dafds");
}
public SmartGridView SmartGridView1
{
get
{
return smartGridView;
}
set
{
smartGridView = value;
}
}

}

class GridViewItemTemplate : ITemplate
{
public GridViewItemTemplate()
{
}

public void InstantiateIn(Control container)
{
Button button = new Button();
button.ID = "btnRightMenuButton";
button.CommandName = "RightMenuButton";
button.DataBinding += new EventHandler(this.OnDataBinding);

container.Controls.Add(button);
}

public void OnDataBinding(object sender, EventArgs e)
{
Button button = (Button)sender;
GridViewRow gridViewRow = (GridViewRow)button.NamingContainer;
button.CommandArgument = gridViewRow.Cells[0].Text.ToString();
}
}

# re: 扩展GridView控件(全)——增加10个常用功能  回复  更多评论   

2007-03-19 14:02 by FrankFei
兄弟,你有点生成后界面上的button,然后有调用如下的内容啊?protected void SmartGridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{

}

太奇怪了!会不会是VS2005的BUG?
但是我把上面的SmartGridView改为GridView,又是好的,奇怪!




# re: 扩展GridView控件(全)——增加10个常用功能  回复  更多评论   

2007-03-19 15:28 by webabcd
@FrankFei
经验告诉我,这应该不是VS2005的BUG
我只是把你的程序读数据库的部分改成了sqlserver的,删了几个列

然后按了按钮后会执行这句
protected void SmartGridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
Response.Write("dafds");
}

页面显示了dafds

# re: 扩展GridView控件(全)——增加10个常用功能  回复  更多评论   

2007-03-19 16:51 by FrankFei
问题找到了,我把你控件中OnRowDataBound的第一行的那个return不小心删除了。只是还不理解真正的原因。
再次感谢你的热心!
向你学习!

# re: 扩展GridView控件(全)——增加10个常用功能  回复  更多评论   

2007-03-19 18:10 by webabcd
@FrankFei
我加那句是为了避免下面情况的发生

执行分页或者排序事件之类的,重写的RowDataBound事件会执行两次,第一次DataBound老数据,第二次DataBound新数据;重写的PreRender会执行一次(老数据),而其中调用基类的方法base.OnPreRender(e)会执行两次

实在是不知道为什么会出现这种情况,所以加了那句避免这种情况

大家互相学习,共同提高

# 扩展GridView控件(全)——增加10个常用功能[转载][TrackBack]  回复  更多评论   

2007-03-20 15:03 by MrYoung
http://www.cnblogs.com/webabcd/archive/2007/02/04/639830.html  查看原文

# re: 扩展GridView控件(全)——增加10个常用功能  回复  更多评论   

2007-03-22 09:23 by kiler
这个一个页面使用两个同样的控件的话,有些功能会失效,如checkbox全选,以及保持滚动条的位置,导出excel。

# re: 扩展GridView控件(全)——增加10个常用功能  回复  更多评论   

2007-03-22 11:54 by webabcd
@kiler
大问题啊,我压根就没想过这个问题,失败

改起来太麻烦,决定不改了,毕竟一个页面有两个或更多GridView的需求不多见啊

# re: 扩展GridView控件(全)——增加10个常用功能  回复  更多评论   

2007-03-22 16:35 by kiler
也不是很麻烦,调整一下ID和注册脚本的名称就可以了,我改的差不多了,等改好了,我再发回给你吧。

# re: 扩展GridView控件(全)——增加10个常用功能  回复  更多评论   

2007-03-22 17:02 by webabcd
@kiler
:)
感谢兄弟啊

我现在看着那些代码就头大,不明白当初为什么写的那么乱(答曰:水平不够)

# re: 扩展GridView控件(全)——增加10个常用功能  回复  更多评论   

2007-03-23 08:41 by w
最好有如何进行合并单元格的程序标准

# re: 扩展GridView控件(全)——增加10个常用功能  回复  更多评论   

2007-03-23 13:01 by webabcd
@w
记得我原来做合并列上的单元格的时候是写一个方法,把GridView和需要合并的列的索引作为参数传进去,如何合并都是在那个方法里写的,所以我觉得可以写个utility来实现它,因此就没扩展GridView的这个功能

# re: 扩展GridView控件(全)——增加10个常用功能  回复  更多评论   

2007-03-27 13:56 by zhlmxh
这个控件根本没法用,在设计时CPU狂占100%, 根本没往下进行!

# re: 扩展GridView控件(全)——增加10个常用功能  回复  更多评论   

2007-03-27 13:57 by zhlmxh
这个控件根本没法用,在设计时CPU狂占100%, 根本没法往下进行!

# re: 扩展GridView控件(全)——增加10个常用功能  回复  更多评论   

2007-03-27 15:14 by zhoupeng
可能是你没用好吧, 我也碰到这个问题, 不过我去掉一些功能就可以了, 像固定列表头, 没什么用的, 用自己需要的功能就可以了

# re: 扩展GridView控件(全)——增加10个常用功能  回复  更多评论   

2007-03-27 16:12 by webabcd
@zhlmxh
正如“zhoupeng”所说,把固定行、列的功能去掉后就ok了
因为固定行、列的功能使用了css调javascript表达式的方式控制层的高度,在设计模式的时候就会狂刷界面,所以很占cpu