扩展GridView控件(索引) - 增加多个常用功能
来源:互联网 发布:知乎 巅峰科比 编辑:程序博客网 时间:2024/05/29 23:22
文章索引
扩展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
List
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)
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
[源码下载]
.pager { text-align:right;}
评论共2页: 1 2 下一页
Feedback
#1楼 [楼主] 回复 引用 查看
2007-02-13 13:48 by webabcd@net
:)
:)
#2楼 [楼主] 回复 引用 查看
2007-02-13 14:55 by webabcd听取了Wyssoft的建议
增加了“是否保持滚动条的状态”的功能
文章已经更新,源码晚上传
增加了“是否保持滚动条的状态”的功能
文章已经更新,源码晚上传
#3楼 [TrackBack] 回复 引用 查看
2007-02-23 10:24 by 胡立新[引用提示]胡立新引用了该文章, 地址: http://www.cnblogs.com/hulixin08/archive/2007/02/23/654063.html
#4楼 回复 引用 查看
2007-02-25 10:01 by 小庄发现bug:
1,跳到最后一页,全选执行成功,但页面左下角提示脚本错误。
2,然后再转到其它页,全选功能不正常(只选择了最后一页的记录数)。
建议:
我的数据是用存储过程实现分页的(nettires生成的getpaged方法),gridview认为它只有一页,怎么用你的分页样式呢?
我现在的方法是自己单独做的分页控件,不太美观。
iamxiaozhuang@hotmail.com 欢迎讨论。
1,跳到最后一页,全选执行成功,但页面左下角提示脚本错误。
2,然后再转到其它页,全选功能不正常(只选择了最后一页的记录数)。
建议:
我的数据是用存储过程实现分页的(nettires生成的getpaged方法),gridview认为它只有一页,怎么用你的分页样式呢?
我现在的方法是自己单独做的分页控件,不太美观。
iamxiaozhuang@hotmail.com 欢迎讨论。
#5楼 回复 引用 查看
2007-02-25 11:39 by 老夫子系我做了一个测试界面,一个保存按钮,一个SmartGridView,先点复选框选择几行,然后点击保存按钮,将选择行的ID保存到数据库中。可是在保存事件中,怎么获取选择行的ID。为什么点击保存按钮后,会报错!
#6楼 [楼主] 回复 引用 查看
2007-02-25 13:25 by webabcd@小庄
找到原因了,RowDataBound事件会被执行两次,索引给隐藏字段赋值的时候就会有问题,想破脑袋也不知道RowDataBound事件为什么会被执行两次。想明白后我再把解决办法贴出来
至于分页样式,我的那个只是改写原来GirdView的分页样式而已,如果用存储过程分页的话,我那个肯定只认为有一页的。
我觉得如果要用存储过程分页的话,肯定是要写一个单独的分页控件的
找到原因了,RowDataBound事件会被执行两次,索引给隐藏字段赋值的时候就会有问题,想破脑袋也不知道RowDataBound事件为什么会被执行两次。想明白后我再把解决办法贴出来
至于分页样式,我的那个只是改写原来GirdView的分页样式而已,如果用存储过程分页的话,我那个肯定只认为有一页的。
我觉得如果要用存储过程分页的话,肯定是要写一个单独的分页控件的
#7楼 [楼主] 回复 引用 查看
2007-02-25 13:28 by webabcd@老夫子系
获取选中行的ID就是查看哪个行的复选框被选中了,然后读出这个行的关键字就ok了
获取选中行的ID就是查看哪个行的复选框被选中了,然后读出这个行的关键字就ok了
#8楼 回复 引用 查看
2007-02-27 10:05 by Wyssoft@webabcd
支持你所做出的努力.
刚放完假,测了一下你的新版本.不过,跟我的想象还有点差别.主要是刷新问题,滚动条是可以保持相对位置了,但想避免刷新.我试用一个UpdatePanel套进去,结果滚动条保持不了位置了.
支持你所做出的努力.
刚放完假,测了一下你的新版本.不过,跟我的想象还有点差别.主要是刷新问题,滚动条是可以保持相对位置了,但想避免刷新.我试用一个UpdatePanel套进去,结果滚动条保持不了位置了.
#9楼 [楼主] 回复 引用 查看
2007-02-27 11:39 by webabcd@Wyssoft
那个需要在updatepanel中注册js,做在控件里不方便,有时间了我会贴出一个解决办法的
那个需要在updatepanel中注册js,做在控件里不方便,有时间了我会贴出一个解决办法的
#10楼 回复 引用 查看
2007-02-28 14:51 by 孤叶(学习.net框架)FireFox好像有的功能不支持,你的这个控件.
#11楼 [楼主] 回复 引用 查看
2007-02-28 16:07 by webabcd@孤叶(学习.net框架)
确实,我的js水平不够啊,无法为ff写与其适用应的js
确实,我的js水平不够啊,无法为ff写与其适用应的js
#12楼 [楼主] 回复 引用 查看
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的事件委托,则没有上述问题
@小庄 发现的bug描述如下
1,跳到最后一页,全选执行成功,但页面左下角提示脚本错误。
2,然后再转到其它页,全选功能不正常(只选择了最后一页的记录数)。
原因
执行分页或者排序事件之类的,重写的RowDataBound事件会执行两次,第一次DataBound老数据,第二次DataBound新数据;重写的PreRender会执行一次(老数据),而其中调用基类的方法base.OnPreRender(e)会执行两次
为什么会出这样?
不知道
解决办法
数据源的Select事件只会执行一次,并且执行之后会RowDataBound新数据,所以,如果设置一个变量来确保只有数据源的Select事件之后才RowDataBound就ok了
把重写的PreRender换为在GridView的构造函数中增加GridView的事件委托,则没有上述问题
#13楼 [楼主] 回复 引用 查看
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);
@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);
#14楼 回复 引用 查看
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);
这段代码应该放在页面中哪个位置比较合适呢?
不知道是不是跟UpdatePanel有关,在设计模式下老死掉.
ScriptManager.RegisterStartupScript(UpdatePanel1, typeof(UpdatePanel), "js", "document.getElementById('yy_ScrollDiv').scrollLeft=" + SmartGridView1.ScrollX + ";document.getElementById('yy_ScrollDiv').scrollTop=" + SmartGridView1.ScrollY + ";", true);
这段代码应该放在页面中哪个位置比较合适呢?
#15楼 [楼主] 回复 引用 查看
2007-03-02 10:39 by webabcd@Wyssoft
如果使用了固定行、列的功能后就会出现这种现象
那段代码可以加到Page_Load里
如果使用了固定行、列的功能后就会出现这种现象
那段代码可以加到Page_Load里
#16楼 回复 引用 查看
2007-03-05 09:15 by Wyssoft@webabcd
为什么会是这样,有没有办法解决呢.我记得以前的版本好像没有吧.
滚动条位置好像可以借助MaintainScrollPositionOnPostback这个属性解决.
你试试,我这没法调了.
为什么会是这样,有没有办法解决呢.我记得以前的版本好像没有吧.
滚动条位置好像可以借助MaintainScrollPositionOnPostback这个属性解决.
你试试,我这没法调了.
#17楼 [楼主] 回复 引用 查看
2007-03-05 10:13 by webabcd@Wyssoft
MaintainScrollPositionOnPostback这个属性是相对于浏览器的,我的那个是相对于GridView所在的DIV的,不能借用啊
另外,可能会死掉是因为固定了行、列的原因,因为行、列都有可能固定,所以我在每个单元格都用css调js实现这个功能,比较耗cpu,所以有可能会死掉
还有一种用div冻结行、列的实现方法,但是集成到GridView里超麻烦,所以放弃了
MaintainScrollPositionOnPostback这个属性是相对于浏览器的,我的那个是相对于GridView所在的DIV的,不能借用啊
另外,可能会死掉是因为固定了行、列的原因,因为行、列都有可能固定,所以我在每个单元格都用css调js实现这个功能,比较耗cpu,所以有可能会死掉
还有一种用div冻结行、列的实现方法,但是集成到GridView里超麻烦,所以放弃了
#18楼 回复 引用 查看
2007-03-09 08:53 by Wyssoft@webabcd
我决得那个耗cpu问题,真是个很大的问题.应该考虑考虑
我决得那个耗cpu问题,真是个很大的问题.应该考虑考虑
#19楼 回复 引用 查看
2007-03-09 10:13 by Wyssoft刚发现 用SqlDataSource作数据源,标题不能初固定.是怎么回事.
#20楼 [楼主] 回复 引用 查看
2007-03-09 12:39 by webabcd@Wyssoft
确实,冻结行、列后耗cpu问题同时也出现在客户端显示的时候,但以我现在的水平也确实没什么好的解决办法。如果在设计模式中会死掉,那就用在HTML模式下写代码吧。或者先不加冻结行、列的功能,等都设计得差不多了,再在HTML模式下把冻结行、列的功能加上
我没用SqlDataSource数据源做过测试,实际上我从来都没用过SqlDataSource,它会破坏项目中的层次结构,建议兄弟实际开发中也别用它。
确实,冻结行、列后耗cpu问题同时也出现在客户端显示的时候,但以我现在的水平也确实没什么好的解决办法。如果在设计模式中会死掉,那就用在HTML模式下写代码吧。或者先不加冻结行、列的功能,等都设计得差不多了,再在HTML模式下把冻结行、列的功能加上
我没用SqlDataSource数据源做过测试,实际上我从来都没用过SqlDataSource,它会破坏项目中的层次结构,建议兄弟实际开发中也别用它。
#21楼 回复 引用 查看
2007-03-15 16:07 by wyz东西确实很好用,但是有一点在开发的时候,预览这个控件的属性时候经常CPU不够用
#22楼 [楼主] 回复 引用 查看
2007-03-15 20:27 by webabcd@wyz
这是因为使用了固定行、列功能的原因,因为行、列都有可能固定,所以我在每个单元格都用css调js实现这个功能,比较耗cpu
这是因为使用了固定行、列功能的原因,因为行、列都有可能固定,所以我在每个单元格都用css调js实现这个功能,比较耗cpu
#23楼 回复 引用 查看
2007-03-16 13:28 by Wyssoft@webabcd
在ItemTemplate里加一个DropDownList,结果DropDownList跑到固定行的上面进行移动
在ItemTemplate里加一个DropDownList,结果DropDownList跑到固定行的上面进行移动
#24楼 [楼主] 回复 引用 查看
2007-03-16 15:13 by webabcd@Wyssoft
这是IE的BUG,就是当层遇到下拉框时总是挡不了select框
这是IE的BUG,就是当层遇到下拉框时总是挡不了select框
#25楼 回复 引用 查看
2007-03-19 09:30 by FrankFei我在针对SmartGridView编程时,
SmartGridView1 = new SmartGridView();
SmartGridView1.RowCommand += new GridViewCommandEventHandler(SmartGridView1_RowCommand);在运行时就是不响应,而如果把SmartGridView中的protected override void OnRowDataBound(GridViewRowEventArgs e)拿掉就可以了,这是为什么呢?
SmartGridView1 = new SmartGridView();
SmartGridView1.RowCommand += new GridViewCommandEventHandler(SmartGridView1_RowCommand);在运行时就是不响应,而如果把SmartGridView中的protected override void OnRowDataBound(GridViewRowEventArgs e)拿掉就可以了,这是为什么呢?
#26楼 [楼主] 回复 引用 查看
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)
{
}
我试了一下,没问题啊
protected void Page_Load(object sender, EventArgs e)
{
SmartGridView1.RowCommand += new GridViewCommandEventHandler(SmartGridView2_RowCommand);
}
protected void SmartGridView2_RowCommand(object sender, GridViewCommandEventArgs e)
{
}
#27楼 回复 引用 查看
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();
}
}
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();
}
}
#28楼 [楼主] 回复 引用 查看
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();
}
}
诡异了,我试了一下这个,是可以执行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();
}
}
#29楼 回复 引用 查看
2007-03-19 14:02 by FrankFei兄弟,你有点生成后界面上的button,然后有调用如下的内容啊?protected void SmartGridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
}
太奇怪了!会不会是VS2005的BUG?
但是我把上面的SmartGridView改为GridView,又是好的,奇怪!
{
}
太奇怪了!会不会是VS2005的BUG?
但是我把上面的SmartGridView改为GridView,又是好的,奇怪!
#30楼 [楼主] 回复 引用 查看
2007-03-19 15:28 by webabcd@FrankFei
经验告诉我,这应该不是VS2005的BUG
我只是把你的程序读数据库的部分改成了sqlserver的,删了几个列
然后按了按钮后会执行这句
protected void SmartGridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
Response.Write("dafds");
}
页面显示了dafds
经验告诉我,这应该不是VS2005的BUG
我只是把你的程序读数据库的部分改成了sqlserver的,删了几个列
然后按了按钮后会执行这句
protected void SmartGridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
Response.Write("dafds");
}
页面显示了dafds
#31楼 回复 引用 查看
2007-03-19 16:51 by FrankFei问题找到了,我把你控件中OnRowDataBound的第一行的那个return不小心删除了。只是还不理解真正的原因。
再次感谢你的热心!
向你学习!
再次感谢你的热心!
向你学习!
#32楼 [楼主] 回复 引用 查看
2007-03-19 18:10 by webabcd@FrankFei
我加那句是为了避免下面情况的发生
执行分页或者排序事件之类的,重写的RowDataBound事件会执行两次,第一次DataBound老数据,第二次DataBound新数据;重写的PreRender会执行一次(老数据),而其中调用基类的方法base.OnPreRender(e)会执行两次
实在是不知道为什么会出现这种情况,所以加了那句避免这种情况
大家互相学习,共同提高
我加那句是为了避免下面情况的发生
执行分页或者排序事件之类的,重写的RowDataBound事件会执行两次,第一次DataBound老数据,第二次DataBound新数据;重写的PreRender会执行一次(老数据),而其中调用基类的方法base.OnPreRender(e)会执行两次
实在是不知道为什么会出现这种情况,所以加了那句避免这种情况
大家互相学习,共同提高
#33楼 [TrackBack] 回复 引用 查看
2007-03-20 15:03 by MrYounghttp://www.cnblogs.com/webabcd/archive/2007/02/04/639830.html
[引用提示]MrYoung引用了该文章, 地址: http://www.cnblogs.com/MatrixMaker/archive/2007/03/20/681214.html
[引用提示]MrYoung引用了该文章, 地址: http://www.cnblogs.com/MatrixMaker/archive/2007/03/20/681214.html
#34楼 回复 引用 查看
2007-03-22 09:23 by kiler这个一个页面使用两个同样的控件的话,有些功能会失效,如checkbox全选,以及保持滚动条的位置,导出excel。
#35楼 [楼主] 回复 引用 查看
2007-03-22 11:54 by webabcd@kiler
大问题啊,我压根就没想过这个问题,失败
改起来太麻烦,决定不改了,毕竟一个页面有两个或更多GridView的需求不多见啊
大问题啊,我压根就没想过这个问题,失败
改起来太麻烦,决定不改了,毕竟一个页面有两个或更多GridView的需求不多见啊
#36楼 回复 引用 查看
2007-03-22 16:35 by kiler也不是很麻烦,调整一下ID和注册脚本的名称就可以了,我改的差不多了,等改好了,我再发回给你吧。
#37楼 [楼主] 回复 引用 查看
2007-03-22 17:02 by webabcd@kiler
:)
感谢兄弟啊
我现在看着那些代码就头大,不明白当初为什么写的那么乱(答曰:水平不够)
:)
感谢兄弟啊
我现在看着那些代码就头大,不明白当初为什么写的那么乱(答曰:水平不够)
#38楼 回复 引用 查看
2007-03-23 08:41 by w最好有如何进行合并单元格的程序标准
#39楼 [楼主] 回复 引用 查看
2007-03-23 13:01 by webabcd@w
记得我原来做合并列上的单元格的时候是写一个方法,把GridView和需要合并的列的索引作为参数传进去,如何合并都是在那个方法里写的,所以我觉得可以写个utility来实现它,因此就没扩展GridView的这个功能
记得我原来做合并列上的单元格的时候是写一个方法,把GridView和需要合并的列的索引作为参数传进去,如何合并都是在那个方法里写的,所以我觉得可以写个utility来实现它,因此就没扩展GridView的这个功能
#40楼 回复 引用 查看
2007-03-27 13:56 by zhlmxh这个控件根本没法用,在设计时CPU狂占100%, 根本没往下进行!
#41楼 回复 引用 查看
2007-03-27 13:57 by zhlmxh这个控件根本没法用,在设计时CPU狂占100%, 根本没法往下进行!
#42楼 回复 引用 查看
2007-03-27 15:14 by zhoupeng可能是你没用好吧, 我也碰到这个问题, 不过我去掉一些功能就可以了, 像固定列表头, 没什么用的, 用自己需要的功能就可以了
#43楼 [楼主] 回复 引用 查看
2007-03-27 16:12 by webabcd@zhlmxh
正如“zhoupeng”所说,把固定行、列的功能去掉后就ok了
因为固定行、列的功能使用了css调javascript表达式的方式控制层的高度,在设计模式的时候就会狂刷界面,所以很占cpu
正如“zhoupeng”所说,把固定行、列的功能去掉后就ok了
因为固定行、列的功能使用了css调javascript表达式的方式控制层的高度,在设计模式的时候就会狂刷界面,所以很占cpu
#44楼 回复 引用 查看
2007-03-29 11:16 by 慕名而来俺是菜鸟 前来学习
#45楼 [楼主] 回复 引用 查看
2007-03-29 17:31 by webabcd@慕名而来
:)
大家互相学习
:)
大家互相学习
#46楼 回复 引用 查看
2007-03-29 17:58 by FrankFei兄弟,请教您一个问题,如何在OnRowUpdating中获得GridView中所绑定的列名(即table中对应的字段),先谢谢了!
PS:
列值可以用((TextBox)this.Rows[e.RowIndex].Cells[0].Controls[0]).Text获得。
PS:
列值可以用((TextBox)this.Rows[e.RowIndex].Cells[0].Controls[0]).Text获得。
#47楼 [楼主] 回复 引用 查看
2007-03-29 22:26 by webabcd@FrankFei
以绑定列为例
((BoundField)GridView.Columns[index]).DataField
以绑定列为例
((BoundField)GridView.Columns[index]).DataField
#48楼 回复 引用 查看
2007-03-30 12:58 by FrankFei谢谢webabcd兄。
#49楼 [楼主] 回复 引用 查看
2007-03-30 21:32 by webabcd@FrankFei
:)
不谢,大家多交流
:)
不谢,大家多交流
#50楼 回复 引用 查看
2007-04-04 14:54 by wwei你真是太有才了.
#51楼 回复 引用 查看
2007-04-04 14:55 by Bruse问一下怎么让右键菜单直接执行一个JS函数而不要进行页面刷新
#52楼 [楼主] 回复 引用 查看
2007-04-04 16:31 by webabcd@wwei
还是有待提高啊
还是有待提高啊
#53楼 回复 引用 查看
2007-04-04 16:35 by Bruse等不及Webabcd兄弟给出答案了,自己改了一下SmartGrid的源代码,给右键菜单添加了一种菜单类型叫Script,为了回报Webabcd兄弟,把修改的方式贴上来:
SmartGridView.cs的516行开始
#region 给数据行增加右键菜单
if (ContextMenus.Count > 0)
{
StringBuilder sb = new StringBuilder();
foreach (ContextMenu cm in ContextMenus)
{
// item = new contextItem("", "", "", "", "", "", "");
// 1-菜单项的文本
// 2-图标链接
// 3-所调用的命令按钮的ID
// 4-链接地址
// 5-链接的target
// 6-右键菜单的项的类别
// 7-右键菜单对应的客户端脚本函数名称
// 命令按钮
if (cm.ItemType == ContextMenu.ItemTypeCollection.Command)
{
sb.Append("item = new contextItem(/"" + cm.Text +
"/", /"" + ResolveUrl(cm.Icon) + "/", /"" +
cm.CommandButtonId + "/", /"/", /"/", /"Command/",/"/");");
}
// 链接
else if (cm.ItemType == ContextMenu.ItemTypeCollection.Link)
{
sb.Append("item = new contextItem(/"" + cm.Text +
"/", /"" + ResolveUrl(cm.Icon) + "/", /"/", /"" +
cm.NavigateUrl + "/", /"" +
cm.Target + "/", /"Link/",/"/");");
}
// 分隔线
else if (cm.ItemType == ContextMenu.ItemTypeCollection.Separator)
{
sb.Append("item = new contextItem(/"/", /"/", /"/", /"/", /"/", /"Separator/",/"/");");
}
// 客户端脚本
else if (cm.ItemType == ContextMenu.ItemTypeCollection.Script)
{
sb.Append("item = new contextItem(/"" + cm.Text +
"/", /"" + ResolveUrl(cm.Icon) + "/", /"/", /"/", /"/", /"Script/",/"" + cm.ScriptFunction + "/");");
}
sb.Append("myMenu.addItem(item);");
}
// 注册客户端代码
if (!Page.ClientScript.IsClientScriptBlockRegistered("jsContextMenu"))
{
Page.ClientScript.RegisterClientScriptBlock(
this.GetType(),
"jsContextMenu", JavaScriptConstant.jsContextMenu.Replace("[$MakeMenu$]", sb.ToString())
);
}
}
#endregion
SmartGridView.cs的516行开始
#region 给数据行增加右键菜单
if (ContextMenus.Count > 0)
{
StringBuilder sb = new StringBuilder();
foreach (ContextMenu cm in ContextMenus)
{
// item = new contextItem("", "", "", "", "", "", "");
// 1-菜单项的文本
// 2-图标链接
// 3-所调用的命令按钮的ID
// 4-链接地址
// 5-链接的target
// 6-右键菜单的项的类别
// 7-右键菜单对应的客户端脚本函数名称
// 命令按钮
if (cm.ItemType == ContextMenu.ItemTypeCollection.Command)
{
sb.Append("item = new contextItem(/"" + cm.Text +
"/", /"" + ResolveUrl(cm.Icon) + "/", /"" +
cm.CommandButtonId + "/", /"/", /"/", /"Command/",/"/");");
}
// 链接
else if (cm.ItemType == ContextMenu.ItemTypeCollection.Link)
{
sb.Append("item = new contextItem(/"" + cm.Text +
"/", /"" + ResolveUrl(cm.Icon) + "/", /"/", /"" +
cm.NavigateUrl + "/", /"" +
cm.Target + "/", /"Link/",/"/");");
}
// 分隔线
else if (cm.ItemType == ContextMenu.ItemTypeCollection.Separator)
{
sb.Append("item = new contextItem(/"/", /"/", /"/", /"/", /"/", /"Separator/",/"/");");
}
// 客户端脚本
else if (cm.ItemType == ContextMenu.ItemTypeCollection.Script)
{
sb.Append("item = new contextItem(/"" + cm.Text +
"/", /"" + ResolveUrl(cm.Icon) + "/", /"/", /"/", /"/", /"Script/",/"" + cm.ScriptFunction + "/");");
}
sb.Append("myMenu.addItem(item);");
}
// 注册客户端代码
if (!Page.ClientScript.IsClientScriptBlockRegistered("jsContextMenu"))
{
Page.ClientScript.RegisterClientScriptBlock(
this.GetType(),
"jsContextMenu", JavaScriptConstant.jsContextMenu.Replace("[$MakeMenu$]", sb.ToString())
);
}
}
#endregion
#54楼 回复 引用 查看
2007-04-04 16:35 by Bruse在ContextMenu.cs中增加两个属性
1.增加temType
/// <summary>
/// 右键菜单的项的类别
/// </summary>
public enum ItemTypeCollection
{
/// <summary>
/// 链接
/// </summary>
Link,
/// <summary>
/// 按钮
/// </summary>
Command,
/// <summary>
/// 分隔线
/// </summary>
Separator,
/// <summary>
/// 分隔线
/// </summary>
Script
}
2. 客户端脚本所对应的函数
private string _scriptFunction;
/// <summary>
/// 客户端脚本所对应的函数
/// </summary>
public string ScriptFunction
{
get { return _scriptFunction; }
set { _scriptFunction = value; }
}
1.增加temType
/// <summary>
/// 右键菜单的项的类别
/// </summary>
public enum ItemTypeCollection
{
/// <summary>
/// 链接
/// </summary>
Link,
/// <summary>
/// 按钮
/// </summary>
Command,
/// <summary>
/// 分隔线
/// </summary>
Separator,
/// <summary>
/// 分隔线
/// </summary>
Script
}
2. 客户端脚本所对应的函数
private string _scriptFunction;
/// <summary>
/// 客户端脚本所对应的函数
/// </summary>
public string ScriptFunction
{
get { return _scriptFunction; }
set { _scriptFunction = value; }
}
#55楼 回复 引用 查看
2007-04-04 16:36 by Bruse在JavascriptConstant.cs文件中重写contextItem函数
function contextItem(text, icon, cmd, url, target, type, scriptfunction)
{
this.text = text ? text : '';
this.icon = icon ? icon : '';
this.cmd = cmd ? cmd : '';
this.url = url ? url : '';
this.target =target ? target : '';
this.type = type ? type : 'Link';
this.scriptfunction = scriptfunction ? scriptfunction : '';
this.show = function (oDoc)
{
var strShow = '';
if(this.type == 'Link' || this.type == 'Command' || this.type == 'Script')
{
strShow += ""<tr "";
strShow += ""onmouseover=/""changeStyle(this, 'on');/"" "";
strShow += ""onmouseout=/""changeStyle(this, 'out');/"" "";
if (this.type == 'Command')
{
// 右键菜单是按钮类型,调用所对应的按钮的click事件
strShow += ""onclick=/""document.getElementById("";
strShow += ""_rowClientId + "";
strShow += ""'_"";
strShow += this.cmd;
strShow += ""').click()"";
}
else if (this.type == 'Link')
{
// 右键菜单是链接类型
if (this.target == 'Top') this.target = 'top';
if (this.target == 'Self') this.target = 'self';
if (this.target == 'top' || this.target == 'self')
{
strShow += ""onclick=/"""";
strShow += this.target;
strShow += "".location='"";
strShow += this.url;
strShow += ""'"";
}
else
{
strShow += ""onclick=/""window.open('"";
strShow += this.url;
strShow += ""')"";
}
}
else
{
// 右键菜单是客户端脚本类型
strShow += ""onclick=/"""";
strShow += this.scriptfunction;
strShow += """";
}
strShow += ""/"">"";
strShow += ""<td class='ltdexit' width='16'>"";
if (this.icon == '')
{
strShow += ' ';
}
else
{
strShow += ""<img border='0' src='"";
strShow += this.icon;
strShow += ""' width='16' height='16' style='POSITION: relative'></img>"";
}
strShow += ""</td><td class='mtdexit'>"";
strShow += this.text;
strShow += ""</td><td class='rtdexit' width='5'> </td></tr>"";
}
// 右键菜单是分隔线
else if (this.type == 'Separator')
{
strShow += ""<tr><td class='ltdexit'> </td>"";
strShow += ""<td class='mtdexit' colspan='2'><hr color='#000000' size='1'></td></tr>"";
}
oDoc.write(strShow);
}
}
做完上面几步,你就可以在SmartGridView的ContextMenu里一下面的方式来添加一种新的右键菜单:
<ContextMenus>
<pc:ContextMenu ItemType="Script" Text="新建" ScriptFunction="NewTask(2)" Icon="../../App_Themes/Default/Images/Common/New.GIF" />
</ContextMenus>
function contextItem(text, icon, cmd, url, target, type, scriptfunction)
{
this.text = text ? text : '';
this.icon = icon ? icon : '';
this.cmd = cmd ? cmd : '';
this.url = url ? url : '';
this.target =target ? target : '';
this.type = type ? type : 'Link';
this.scriptfunction = scriptfunction ? scriptfunction : '';
this.show = function (oDoc)
{
var strShow = '';
if(this.type == 'Link' || this.type == 'Command' || this.type == 'Script')
{
strShow += ""<tr "";
strShow += ""onmouseover=/""changeStyle(this, 'on');/"" "";
strShow += ""onmouseout=/""changeStyle(this, 'out');/"" "";
if (this.type == 'Command')
{
// 右键菜单是按钮类型,调用所对应的按钮的click事件
strShow += ""onclick=/""document.getElementById("";
strShow += ""_rowClientId + "";
strShow += ""'_"";
strShow += this.cmd;
strShow += ""').click()"";
}
else if (this.type == 'Link')
{
// 右键菜单是链接类型
if (this.target == 'Top') this.target = 'top';
if (this.target == 'Self') this.target = 'self';
if (this.target == 'top' || this.target == 'self')
{
strShow += ""onclick=/"""";
strShow += this.target;
strShow += "".location='"";
strShow += this.url;
strShow += ""'"";
}
else
{
strShow += ""onclick=/""window.open('"";
strShow += this.url;
strShow += ""')"";
}
}
else
{
// 右键菜单是客户端脚本类型
strShow += ""onclick=/"""";
strShow += this.scriptfunction;
strShow += """";
}
strShow += ""/"">"";
strShow += ""<td class='ltdexit' width='16'>"";
if (this.icon == '')
{
strShow += ' ';
}
else
{
strShow += ""<img border='0' src='"";
strShow += this.icon;
strShow += ""' width='16' height='16' style='POSITION: relative'></img>"";
}
strShow += ""</td><td class='mtdexit'>"";
strShow += this.text;
strShow += ""</td><td class='rtdexit' width='5'> </td></tr>"";
}
// 右键菜单是分隔线
else if (this.type == 'Separator')
{
strShow += ""<tr><td class='ltdexit'> </td>"";
strShow += ""<td class='mtdexit' colspan='2'><hr color='#000000' size='1'></td></tr>"";
}
oDoc.write(strShow);
}
}
做完上面几步,你就可以在SmartGridView的ContextMenu里一下面的方式来添加一种新的右键菜单:
<ContextMenus>
<pc:ContextMenu ItemType="Script" Text="新建" ScriptFunction="NewTask(2)" Icon="../../App_Themes/Default/Images/Common/New.GIF" />
</ContextMenus>
更新列表3
感谢@Bruse提供右键菜单执行一个JS函数的实现,详细的是实现过程请看他的相关评论
我稍微修改了一下,具体实现请看源码
针对右键菜单增加的功能
ItemType - 右键菜单的项的类别增加“Custom”选项
Key - 自定义属性key
Value - 自定义属性value
示例
让右键菜单的某一选项弹出一个警告框
<ContextMenus>
<yyc:ContextMenu ItemType="Custom" Text="右键菜单自定义属性测试" Icon="~/Images/button.gif" Key="onclick" Value="alert('右键菜单自定义属性测试')" />
</ContextMenus>
感谢@Bruse提供右键菜单执行一个JS函数的实现,详细的是实现过程请看他的相关评论
我稍微修改了一下,具体实现请看源码
针对右键菜单增加的功能
ItemType - 右键菜单的项的类别增加“Custom”选项
Key - 自定义属性key
Value - 自定义属性value
示例
让右键菜单的某一选项弹出一个警告框
<ContextMenus>
<yyc:ContextMenu ItemType="Custom" Text="右键菜单自定义属性测试" Icon="~/Images/button.gif" Key="onclick" Value="alert('右键菜单自定义属性测试')" />
</ContextMenus>
#59楼 回复 引用 查看
2007-04-05 00:22 by 臭石头如何通过继承GridView来修改在设计时绑定数据源时自动生成的ASP.Net代码?
总所周知,当GridView帮定到一个数据源时,它会自动生成绑定列,这些列会写到aspx文件中。
现在我需要按照一定规则修改这些列的列头HeaderText。
我新建一个控件,继承自GridView。重写CreateColumns方法,然后遍历所有Columns并修改,成功,aspx设计界面上展现的也是修改后的字样,但切换到aspx源码,发现还是原来的。
问:有什么办法使得内存中属性的改变持久化到aspx文件中?
谢谢
总所周知,当GridView帮定到一个数据源时,它会自动生成绑定列,这些列会写到aspx文件中。
现在我需要按照一定规则修改这些列的列头HeaderText。
我新建一个控件,继承自GridView。重写CreateColumns方法,然后遍历所有Columns并修改,成功,aspx设计界面上展现的也是修改后的字样,但切换到aspx源码,发现还是原来的。
问:有什么办法使得内存中属性的改变持久化到aspx文件中?
谢谢
#60楼 [楼主] 回复 引用 查看
2007-04-05 08:22 by webabcd@臭石头
是把HeaderText硬编码了吗?
那它是不会在aspx源码中体现出来的
是把HeaderText硬编码了吗?
那它是不会在aspx源码中体现出来的
#61楼 回复 引用 查看
2007-04-05 09:08 by 臭石头具体情况是这样的,ObjectDataSource绑定到实体类,GridView帮定到ObjectDataSource,这时候,GridView会获取实体类的构架信息,并自动生成一些列,HeaderText就是实体类的属性名,是E文的,我现在想在GridView的CreateColumns方法中进行拦截这个生成过程,硬是把E文改为对应的中文。
结果,在设计时和运行时都可以看到是中文的,但是aspx中就不是中文的。
我就想问问,怎么样,才能让它在aspx中体现中文,GridView自身是怎么样把自动生成的列写入到aspx中的。
我已经把GridView以及几个基类的源码翻了好几遍了,我肯定,我已经把CreateColumns拦截到并修改成功了,但是,它从哪里得到英文HeaderText的BoundColumn写入到aspx中的?难道自动生成列的某些过程不需要调用CreateColumns?
结果,在设计时和运行时都可以看到是中文的,但是aspx中就不是中文的。
我就想问问,怎么样,才能让它在aspx中体现中文,GridView自身是怎么样把自动生成的列写入到aspx中的。
我已经把GridView以及几个基类的源码翻了好几遍了,我肯定,我已经把CreateColumns拦截到并修改成功了,但是,它从哪里得到英文HeaderText的BoundColumn写入到aspx中的?难道自动生成列的某些过程不需要调用CreateColumns?
#62楼 回复 引用 查看
2007-04-05 09:09 by 臭石头考虑到以后的非常多的修改可能都要“体现”在aspx中,我倒是很想弄清楚,控件中怎么样一些属性的改变“体现”在aspx中。
谢谢^_^
谢谢^_^
#63楼 [楼主] 回复 引用 查看
2007-04-05 12:42 by webabcd@臭石头
据我所知
你是重写了他的CreateColumns方法,这不会在aspx源码中有所体现的
你要是增加一些自定义GridView属性,就可以在aspx源码出现
据我所知
你是重写了他的CreateColumns方法,这不会在aspx源码中有所体现的
你要是增加一些自定义GridView属性,就可以在aspx源码出现
#64楼 回复 引用 查看
2007-04-05 13:02 by 臭石头我就想知道,GridView它自己是怎么做到的,它怎么生成BoundField的。这一点,我想它应该不是通过属性来实现的吧。
我这里收集了大量信息,但是尚未发现它是怎么写入到aspx中的,目前发现了一点眉头,但是因为项目太紧,暂时没时间研究下去。如果有兴趣,大家可以一起交流一下。我不仅把System.Web命名空间反编译了,还录下了控件在设计时的执行过程(哪个方法到哪个方法)。
我QQ:99363590
E_Mail:gxuhy at 21cn.com
我这里收集了大量信息,但是尚未发现它是怎么写入到aspx中的,目前发现了一点眉头,但是因为项目太紧,暂时没时间研究下去。如果有兴趣,大家可以一起交流一下。我不仅把System.Web命名空间反编译了,还录下了控件在设计时的执行过程(哪个方法到哪个方法)。
我QQ:99363590
E_Mail:gxuhy at 21cn.com
#65楼 [楼主] 回复 引用 查看
2007-04-05 17:45 by webabcd@臭石头
好
不过一般家里才上qq
公司时候msn
webabcd at hotmail.com
多交流
好
不过一般家里才上qq
公司时候msn
webabcd at hotmail.com
多交流
#66楼 回复 引用 查看
2007-04-06 22:23 by Allen发现一个问题,当我的数据源是空时,页面状态栏显示出错,详细信息是缺少对象,想应该是javascript函数抓取了空值对象的缘故,但偶的js比较菜,调了几次均没有成功,近崩溃中。
如我将objData的select() 返回的table改成空表或null
[DataObjectMethod(DataObjectMethodType.Select, false)]
public DataTable Select()
{
return null
//or
DataTable dt = new DataTable();
dt.Columns.Add("no", typeof(string));
dt.Columns.Add("name", typeof(string));
return dt;
}
如我将objData的select() 返回的table改成空表或null
[DataObjectMethod(DataObjectMethodType.Select, false)]
public DataTable Select()
{
return null
//or
DataTable dt = new DataTable();
dt.Columns.Add("no", typeof(string));
dt.Columns.Add("name", typeof(string));
return dt;
}
#67楼 [楼主] 回复 引用 查看
2007-04-07 11:27 by webabcd@Allen
是的
当初写代码的时候没有做对象为空的判断
比如全选CheckBox的那个功能,会用getElementById去找CheckBox
如果没有数据的话就找不到它
所以会报缺少对象的错误
是的
当初写代码的时候没有做对象为空的判断
比如全选CheckBox的那个功能,会用getElementById去找CheckBox
如果没有数据的话就找不到它
所以会报缺少对象的错误
#68楼 回复 引用 查看
2007-04-07 11:38 by Allen谢谢您的解答,那如果要改的话是否是将判断空的条件加到js里面去 还是在smartgridviewd 执行PreRender的时候去判断数据源对像是否为空?不过我觉得在PreRender里应该还抓不到它的datasource吧 请您赐教~ 谢谢~
#69楼 [楼主] 回复 引用 查看
2007-04-07 11:54 by webabcd@Allen
当然,判断如果没有数据就不生成js脚本最好了
在PreRender之前,数据源的Selected事件里可以知道是否有数据
另外的办法就是在js里判断对象是否为空
对本例来说
就是把yy_GetObject(param)函数改成如下这样
function yy_GetObject(param)
{
if (document.getElementById(param))
return document.getElementById(param);
}
我已经改好上传了
谢谢提出bug
当然,判断如果没有数据就不生成js脚本最好了
在PreRender之前,数据源的Selected事件里可以知道是否有数据
另外的办法就是在js里判断对象是否为空
对本例来说
就是把yy_GetObject(param)函数改成如下这样
function yy_GetObject(param)
{
if (document.getElementById(param))
return document.getElementById(param);
}
我已经改好上传了
谢谢提出bug
#70楼 回复 引用 查看
2007-04-09 18:09 by shark0304当把右键功能代码取消,点右键会出js错误,对象为空.
许多人需要用右键复制信息.所以还是改下比较好.
许多人需要用右键复制信息.所以还是改下比较好.
#71楼 [楼主] 回复 引用 查看
2007-04-09 20:47 by webabcd@shark0304
bug多多啊
感谢兄弟提出来
出现这个问题的原因是,在没有使用右键功能的时候也注册了客户端脚本,加上一句判断就ok了
已经改好上传了
谢谢
bug多多啊
感谢兄弟提出来
出现这个问题的原因是,在没有使用右键功能的时候也注册了客户端脚本,加上一句判断就ok了
已经改好上传了
谢谢
#72楼 回复 引用 查看
2007-04-10 21:10 by Rain不是做技术的,看了还是有点害怕,感觉与时代差距太大了!不敢学了,看的越多发现知道的越少啊!悲哀
#73楼 [楼主] 回复 引用 查看
2007-04-10 21:57 by webabcd@Rain
:)
大家社会分工不一样
在自己的工种上跟上时代就好了
:)
大家社会分工不一样
在自己的工种上跟上时代就好了
#74楼 回复 引用 查看
2007-04-11 10:00 by Rain呵呵 因为想转到开发来 才在网上看些资料 想找用户角色权限这块参考 就链接到你这来了 能不能发个请求:有无用户角色权限这方面的数据库(sqlserver2000)设计和.net代码 传给我一份,没写过项目,先只能尽量参考兼抄袭代码了 呵呵
99linsen@163.com
QQ:10204074
99linsen@163.com
QQ:10204074
#75楼 [楼主] 回复 引用 查看
2007-04-11 11:43 by webabcd@Rain
用户权限、角色这块就用asp.net 2.0的Membership&RoleManager吧
用户权限、角色这块就用asp.net 2.0的Membership&RoleManager吧
#76楼 回复 引用 查看
2007-04-11 23:30 by thyking xiao不错,学习了,谢谢
#77楼 [楼主] 回复 引用 查看
2007-04-12 08:31 by webabcd@thyking xiao
:)
多交流,互相学习
:)
多交流,互相学习
#78楼 回复 引用 查看
2007-04-16 09:27 by 碟子[匿名]大家好,我去掉了固定行列功能,可是在设计的时候CPU占用仍然是100%啊,请问楼上的各位能否传一份修改的给我参考一下?
#79楼 [楼主] 回复 引用 查看
2007-04-16 12:19 by webabcd@碟子[匿名]
最好的办法就是在源视图里写代码
最好的办法就是在源视图里写代码
#80楼 回复 引用 查看
2007-04-17 16:02 by FrankFei请教一下楼主,在知道GridView的一个具体GridViewRow实例时,如何通过GridView所绑定的列名,求得此列的值?
PS:
如下是通过列索引求得的值,但在支持列互换时,就不能确定列索引
((TextBox)gridViewRow.Cells[2].Controls[0]).Text;
PS:
如下是通过列索引求得的值,但在支持列互换时,就不能确定列索引
((TextBox)gridViewRow.Cells[2].Controls[0]).Text;
#81楼 [楼主] 回复 引用 查看
2007-04-17 17:15 by webabcd@FrankFei
不要想了,那是不可能的
不要想了,那是不可能的
#82楼 回复 引用 查看
2007-04-18 10:02 by yixianggao非常感谢 webabcd 的无私奉献!
向大家学习!
致敬!
向大家学习!
致敬!
#83楼 [楼主] 回复 引用 查看
2007-04-18 10:34 by webabcd@yixianggao
:)
大家多交流
互相学习
:)
大家多交流
互相学习
#84楼 回复 引用 查看
2007-04-18 17:53 by FrankFei请教一下,你在控件中的bool IPostBackDataHandler.LoadPostData是在什么情况下被调用的啊?我怎么没有找到调用者。先谢谢楼主了!
#85楼 [楼主] 回复 引用 查看
2007-04-18 18:17 by webabcd@FrankFei
继承自IPostBackDataHandler接口
在使用固定行、列的功能后,我用这个方法里读GridView滚动条的位置
继承自IPostBackDataHandler接口
在使用固定行、列的功能后,我用这个方法里读GridView滚动条的位置
#86楼 回复 引用 查看
2007-04-18 18:47 by 孤叶(学习.net框架)IDReferenceProperty这个属性为什么我这边用不起来,
#87楼 [楼主] 回复 引用 查看
2007-04-18 19:21 by webabcd@孤叶(学习.net框架)
?啥玩意?
?啥玩意?
#88楼 回复 引用 查看
2007-04-18 19:25 by 孤叶(学习.net框架).net 2.0自定义控件的一个新属性,定义我就不说拉.MSDN
我就是想要通过他来产生一个下拉列表,这个列表里有我要的一组当前页面的控件ID
我就是想要通过他来产生一个下拉列表,这个列表里有我要的一组当前页面的控件ID
#89楼 [楼主] 回复 引用 查看
2007-04-18 22:01 by webabcd@孤叶(学习.net框架)
不错
又跟兄弟学到了一招
我试了一下
就是如果属性是string类型的话,下拉的内容是control,就用这个,哈
测试成功了
不错
又跟兄弟学到了一招
我试了一下
就是如果属性是string类型的话,下拉的内容是control,就用这个,哈
测试成功了
#90楼 回复 引用 查看
2007-04-18 22:08 by 孤叶(学习.net框架)@webabcd
兄弟,快把源码发给我,我正在为这个头痛.快
solucky2008@gmail.com
兄弟,快把源码发给我,我正在为这个头痛.快
solucky2008@gmail.com
#91楼 [楼主] 回复 引用 查看
2007-04-18 23:06 by webabcd@孤叶(学习.net框架)
已发
请收
已发
请收
#92楼 回复 引用 查看
2007-04-19 08:32 by xep要2.0的教程么? 刚买完1.1的书,这2.0又出来了 听说3.0已经出来了
不想买书了 如果有教程请发我一份好吗? xep.com@163.com
不想买书了 如果有教程请发我一份好吗? xep.com@163.com
#93楼 [楼主] 回复 引用 查看
2007-04-19 08:51 by webabcd@xep
2.0
原版
http://www.asp.net/learn/dataaccess/default.aspx?tabid=63
中文
http://www.cnblogs.com/lovecherry/archive/2006/07/02/440840.html
3.0
中文的不多
去查msdn吧
http://msdn2.microsoft.com/en-us/library/
2.0
原版
http://www.asp.net/learn/dataaccess/default.aspx?tabid=63
中文
http://www.cnblogs.com/lovecherry/archive/2006/07/02/440840.html
3.0
中文的不多
去查msdn吧
http://msdn2.microsoft.com/en-us/library/
#94楼 回复 引用 查看
2007-04-19 10:15 by FrankFei@FrankFei
继承自IPostBackDataHandler接口
在使用固定行、列的功能后,我用这个方法里读GridView滚动条的位置
==>
不好意思,可能我没有表达清楚,我的意思是为什么会自动调用IPostBackDataHandler,我也写了这样的接口,可为什么不能调用呢?是不是还要什么条件啊?
继承自IPostBackDataHandler接口
在使用固定行、列的功能后,我用这个方法里读GridView滚动条的位置
==>
不好意思,可能我没有表达清楚,我的意思是为什么会自动调用IPostBackDataHandler,我也写了这样的接口,可为什么不能调用呢?是不是还要什么条件啊?
#95楼 [楼主] 回复 引用 查看
2007-04-19 10:40 by webabcd@FrankFei
这个事件仅仅是在回发之后被激发。
在这个事件里实现了IPostBackDataHandler接口的控件从HTTP的POST数据中得到值。注意,textbox控件不能从view state中获得值,而是在此事件中从POST数据中获得值。所以即使有些控件没有启用view state,只要它实现了IPostBackDataHandler接口就可以从HTTP的POST数据中得到值。
这个事件仅仅是在回发之后被激发。
在这个事件里实现了IPostBackDataHandler接口的控件从HTTP的POST数据中得到值。注意,textbox控件不能从view state中获得值,而是在此事件中从POST数据中获得值。所以即使有些控件没有启用view state,只要它实现了IPostBackDataHandler接口就可以从HTTP的POST数据中得到值。
#96楼 回复 引用 查看
2007-04-20 13:11 by FrankFei不好意思,又来请教你问题了。
我在你的类ContextMenu中新增了一个定义,如下:
public virtual ContextMenus1 ContextMenus1
{
get
{
if (_contextMenus1 == null)
{
_contextMenus1 = new ContextMenus1();
}
return _contextMenus1;
}
}
ContextMenus1的定义和ContextMenus差不多,问题是:
我在设计时,点属性ContextMenus,弹出了“ContextMenu集合编辑器”,在编辑器中新增一个成员,然后再点此成员的ContextMenus1属性,可此时弹出的不是“ContextMenu1集合编辑器”,而是"Object集合编辑器”,怎样处理这个问题呢?先谢了!
我在你的类ContextMenu中新增了一个定义,如下:
public virtual ContextMenus1 ContextMenus1
{
get
{
if (_contextMenus1 == null)
{
_contextMenus1 = new ContextMenus1();
}
return _contextMenus1;
}
}
ContextMenus1的定义和ContextMenus差不多,问题是:
我在设计时,点属性ContextMenus,弹出了“ContextMenu集合编辑器”,在编辑器中新增一个成员,然后再点此成员的ContextMenus1属性,可此时弹出的不是“ContextMenu1集合编辑器”,而是"Object集合编辑器”,怎样处理这个问题呢?先谢了!
#97楼 [楼主] 回复 引用 查看
2007-04-20 13:43 by webabcd@FrankFei
那要看你的ContextMenus1所包含的对象了
这个对象的每个属性的类型就是你集合编辑器里的每个项的类型
那要看你的ContextMenus1所包含的对象了
这个对象的每个属性的类型就是你集合编辑器里的每个项的类型
#98楼 回复 引用 查看
2007-04-20 14:15 by FrankFeiContextMenus1的定义和你的ContextMenus是一样的,ContextMenu1和你的ContextMenu是一样的,我只是把名字改了一下。
#99楼 [楼主] 回复 引用 查看
2007-04-20 17:53 by webabcd@FrankFei
肯定是有不一样的地方的,兄弟可以好好检查一下
实在搞不定的话,可以把代码发我邮箱里,我来试着检查一下
肯定是有不一样的地方的,兄弟可以好好检查一下
实在搞不定的话,可以把代码发我邮箱里,我来试着检查一下
#100楼 回复 引用 查看
2007-04-23 10:21 by FrankFei谢谢楼主指点,问题找到了,我没有定义:
public ContextMenu this[int index]
{
get
{
return (ContextMenu)base.List[index];
}
set
{
base.List[index] = (ContextMenu)value;
}
}
我在编码时没有用到这个,就给我删除了,这段代码是不是就是在设计时用到的啊?
public ContextMenu this[int index]
{
get
{
return (ContextMenu)base.List[index];
}
set
{
base.List[index] = (ContextMenu)value;
}
}
我在编码时没有用到这个,就给我删除了,这段代码是不是就是在设计时用到的啊?
#101楼 [楼主] 回复 引用 查看
2007-04-23 10:44 by webabcd@FrankFei
会用到地
会用到地
#102楼 回复 引用 查看
2007-04-23 17:41 by FrankFei我定义了两个控件A和B,其中A有一个属性类型是B,我怎么在设计时实现:从Toolbox上拖一个A和一个B,然后设定A的那个属性为B,先谢楼主了!
#103楼 [楼主] 回复 引用 查看
2007-04-23 21:40 by webabcd@FrankFei
你的意思是一个控件的某个属性指向另一个控件?
那这个就好比指定GridView的数据源控件
那么请参考元数据(一个Attribute)
IDReferenceProperty
就是如果属性是string类型的话,下拉的内容是control,就用这个
具体请查msdn
你的意思是一个控件的某个属性指向另一个控件?
那这个就好比指定GridView的数据源控件
那么请参考元数据(一个Attribute)
IDReferenceProperty
就是如果属性是string类型的话,下拉的内容是control,就用这个
具体请查msdn
#104楼 回复 引用 查看
2007-04-25 10:46 by shark0304每次更新都不知道更新了什么代码,建议把更新说明写上去,加个简单的版本号也行。
#105楼 回复 引用 查看
2007-04-25 10:48 by shark0304每次更新都不知道更新了什么代码,建议加个更新说明和版本号。
#106楼 [楼主] 回复 引用 查看
2007-04-25 12:11 by webabcd@shark0304
兄弟说的是
下次如果要改的话肯定是大改了,到时我会加上的
不过最近相当没时间啊
兄弟说的是
下次如果要改的话肯定是大改了,到时我会加上的
不过最近相当没时间啊
#107楼 回复 引用 查看
2007-05-02 15:23 by shark03041.我把导出excel、word、xml功能另写了个控件和 扩展GridView一起使用。
现在gridiew导出excel只能导出当前页,我做的控件是取dataset导出全部
数据,现在还没集成进去,只能导出的时候再取一次dataset。楼主要是想完善一下,我可以把源码发给你
2.51aspx上有 GridView自定义分页及可拖动改变列宽的控件可以把这功能也加上去。
3.现在版本不断更新,但不知道具体更新的内容,每次更新能加个更新说明吗?
我觉的还是要把CPU占用率高的问题解决下,解决了用的人才会更多。
现在gridiew导出excel只能导出当前页,我做的控件是取dataset导出全部
数据,现在还没集成进去,只能导出的时候再取一次dataset。楼主要是想完善一下,我可以把源码发给你
2.51aspx上有 GridView自定义分页及可拖动改变列宽的控件可以把这功能也加上去。
3.现在版本不断更新,但不知道具体更新的内容,每次更新能加个更新说明吗?
我觉的还是要把CPU占用率高的问题解决下,解决了用的人才会更多。
#108楼 [楼主] 回复 引用 查看
2007-05-02 22:54 by webabcd@shark0304
1.谢谢,以后如果完善的时候我会把dataset导成excel的功能加进去的
2.那个我也看到了,很好,可是最近实在是没时间啊
3.以后更新的时候肯定会加的,可是最近忙啊,没有更新的打算,cpu占用率高是因为固定行、列的时候会在CSS中用Expression,我实在是没什么好的办法
最近太忙了,实在是没时间啊,以后有空的时候打算整个重写一遍,然后再加一些功能
1.谢谢,以后如果完善的时候我会把dataset导成excel的功能加进去的
2.那个我也看到了,很好,可是最近实在是没时间啊
3.以后更新的时候肯定会加的,可是最近忙啊,没有更新的打算,cpu占用率高是因为固定行、列的时候会在CSS中用Expression,我实在是没什么好的办法
最近太忙了,实在是没时间啊,以后有空的时候打算整个重写一遍,然后再加一些功能
#109楼 [TrackBack] 回复 引用 查看
2007-05-23 13:22 by 希望虫GridView既强大又好用。为了让它更强大、更好用,我们来写一个继承自GridView的控件。 控件开发扩展GridView控件(一)——鼠标经过行时改变行的样式扩展GridVi...
[引用提示]希望虫引用了该文章, 地址: http://www.cnblogs.com/lixzhong/archive/2007/05/23/757008.html
[引用提示]希望虫引用了该文章, 地址: http://www.cnblogs.com/lixzhong/archive/2007/05/23/757008.html
#110楼 回复 引用 查看
2007-06-11 15:02 by cc扩展GridView控件(九)——给数据行增加右键菜单
------
如果一个页面用二个以上的girdview,你这种方式就没用了咯,只能是第一个gridview有用,
如果能实现在一个页面上的多个gridview都可以增加不同的右键菜单就好了
------
如果一个页面用二个以上的girdview,你这种方式就没用了咯,只能是第一个gridview有用,
如果能实现在一个页面上的多个gridview都可以增加不同的右键菜单就好了
#111楼 [楼主] 回复 引用 查看
2007-06-11 15:59 by webabcd@cc
确实有这问题,之前一直忙,最近好一些了,正准备修改这个东东
确实有这问题,之前一直忙,最近好一些了,正准备修改这个东东
#112楼 回复 引用 查看
2007-06-12 08:28 by cc嗯,希望很快修改出来同一个页面能用二个以上的gridview右键菜单显示
关注,学习ing..................................
关注,学习ing..................................
#113楼 [楼主] 回复 引用 查看
2007-06-12 12:19 by webabcd@cc
打算整个重写一遍,另外现在空闲时间也不是很多,估计不会很快
打算整个重写一遍,另外现在空闲时间也不是很多,估计不会很快
#114楼 回复 引用 查看
2007-06-26 11:44 by 辛 磊绝对的支持!
#115楼 [楼主] 回复 引用 查看
2007-06-26 12:04 by webabcd@辛 磊
:)
尽力7月底之前把它重写完
:)
尽力7月底之前把它重写完
#116楼 回复 引用 查看
2007-06-26 23:56 by andrew如果动态创建模版列,postback的时候,模版列消失了
如果模版列静态生成,但其他列动态生成,postback的时候,模版列还是会消失,各位大大有没有什么高见啊
如果模版列静态生成,但其他列动态生成,postback的时候,模版列还是会消失,各位大大有没有什么高见啊
#117楼 [楼主] 回复 引用 查看
2007-06-27 08:01 by webabcd@andrew
动态创建的话,需要每次页面加载都创建,而不能只在
if (!IsPostBack) {} 创建
动态创建的话,需要每次页面加载都创建,而不能只在
if (!IsPostBack) {} 创建
#118楼 回复 引用 查看
2007-06-27 08:39 by andrew感谢@webabcd的回复,
如果仅仅是创建列都还好,还必须每次postback都得重新绑定数据,为什么动态添加的BoundFiled却没有消失呢
如果仅仅是创建列都还好,还必须每次postback都得重新绑定数据,为什么动态添加的BoundFiled却没有消失呢
#119楼 回复 引用 查看
2007-06-27 08:42 by andrew"模版列静态生成,但其他列动态生成,postback的时候,模版列还是会消失,其它列却存在"
动态创建的BoundFiled存在,静态创建的模版列却消失了,真是郁闷啊
动态创建的BoundFiled存在,静态创建的模版列却消失了,真是郁闷啊
#120楼 回复 引用 查看
2007-06-27 08:45 by andrew@webabcd大哥
如果每次都动态生成,绑定数据,在性能方面会不会大大降低呢?
如果每次都动态生成,绑定数据,在性能方面会不会大大降低呢?
#121楼 [楼主] 回复 引用 查看
2007-06-27 10:09 by webabcd@andrew
确实是让人不解的问题
BoundFiled没问题,而TemplateField却有问题
它们都是继承自DataControlField,DataControlField有TrackViewState()方法,本应该可以保持状态的
没办法,现在的解决方案只能是每次加载都动态创建列,性能的开销应该不大
另外,不管是不是动态创建列,如果你要分页,或者排序之类的都是要再绑定数据的
确实是让人不解的问题
BoundFiled没问题,而TemplateField却有问题
它们都是继承自DataControlField,DataControlField有TrackViewState()方法,本应该可以保持状态的
没办法,现在的解决方案只能是每次加载都动态创建列,性能的开销应该不大
另外,不管是不是动态创建列,如果你要分页,或者排序之类的都是要再绑定数据的
#122楼 回复 引用 查看
2007-06-27 11:04 by andrew非常感谢@webabcd的关注.
现在看来目前只能舍弃这种动态创建列的方式了.如果有好的解决方案,别忘了加到SmartGridView中哦,再次感谢!
现在看来目前只能舍弃这种动态创建列的方式了.如果有好的解决方案,别忘了加到SmartGridView中哦,再次感谢!
#123楼 [楼主] 回复 引用 查看
2007-06-27 11:32 by webabcd@andrew
:)
不谢
现在正在重构SmartGridView中……
同时优化,增强,并且支持ie和ff
希望7月底之前能完工
这之后再扩展新的功能
:)
不谢
现在正在重构SmartGridView中……
同时优化,增强,并且支持ie和ff
希望7月底之前能完工
这之后再扩展新的功能
#124楼 回复 引用 查看
2007-06-29 08:57 by 众吉网信加油,当下来研究研究,一起努力
#125楼 [楼主] 回复 引用 查看
2007-06-29 10:18 by webabcd@众吉网信
:)
从现在的进度看,7月底之前应该能出正式版
:)
从现在的进度看,7月底之前应该能出正式版
#126楼 回复 引用 查看
2007-07-03 12:50 by KELLYNIC我觉得没必要扩充那么多功能
多了,也无非是JavaScript
没什么意思啊
多了,也无非是JavaScript
没什么意思啊
#127楼 [楼主] 回复 引用 查看
2007-07-03 17:11 by webabcd@KELLYNIC
关键对我等懒人比较有用
非常讨厌做重复性的工作,所以才写在控件里
关键对我等懒人比较有用
非常讨厌做重复性的工作,所以才写在控件里
#128楼 回复 引用 查看
2007-07-12 12:28 by 式好贴
#129楼 [楼主] 回复 引用 查看
2007-07-12 14:39 by webabcd@式
:)
:)
#130楼 回复 引用 查看
2007-07-14 23:48 by liyunshun83@hotmail.com哥们知道你这里有,我就不费大事写了,搞的累死了
#131楼 [楼主] 回复 引用 查看
2007-07-16 08:09 by webabcd@liyunshun83@hotmail.com
:)
这部分重写完后,还会加更多的功能
:)
这部分重写完后,还会加更多的功能
#132楼 回复 引用 查看
2007-07-20 18:50 by xunlong应该加上列筛选的功能,有时候要显示的列太多了,全部显示出来太难看,能否根据数据源返回的列选择要显示的哪些列
#133楼 [楼主] 回复 引用 查看
2007-07-23 07:47 by webabcd@xunlong
这个功能要通过<Columns />实现啊
这个功能要通过<Columns />实现啊
#134楼 回复 引用 查看
2007-07-23 19:30 by xunlong我想要的是动态的控制,而不是在页面上写死
#135楼 [楼主] 回复 引用 查看
2007-07-24 07:41 by webabcd@xunlong
可以在codebehind里动态地创建列
参考一下
http://www.cnblogs.com/webabcd/archive/2006/12/19/596349.html
http://www.cnblogs.com/webabcd/archive/2006/12/21/598819.html
可以在codebehind里动态地创建列
参考一下
http://www.cnblogs.com/webabcd/archive/2006/12/19/596349.html
http://www.cnblogs.com/webabcd/archive/2006/12/21/598819.html
#136楼 回复 引用 查看
2007-07-26 09:39 by Alex_liwebabcd
您好
关于 《扩展GridView控件(五)——固定表头、指定行或指定列》的问题请教
我需要动态的设定我需要固定的行与列,我如何能做到.
我需要动态的绑定我的栏位,如何做到
对了,能留下你的QQ吗,我想请教一些问题
您好
关于 《扩展GridView控件(五)——固定表头、指定行或指定列》的问题请教
我需要动态的设定我需要固定的行与列,我如何能做到.
我需要动态的绑定我的栏位,如何做到
对了,能留下你的QQ吗,我想请教一些问题
#137楼 [楼主] 回复 引用 查看
2007-07-26 11:08 by webabcd@Alex_li
可以动态地设置相关的属性即可
qq不经常用
一般用msn
webabcd
hotmail
com
可以动态地设置相关的属性即可
qq不经常用
一般用msn
webabcd
hotmail
com
#138楼 回复 引用 查看
2007-07-26 14:52 by flycat这个控件真是不错,等米下锅了,期待正式版的推出。
#139楼 [楼主] 回复 引用 查看
2007-07-26 18:19 by webabcd@flycat
:)
8月初之前肯定会改完,发上来
:)
8月初之前肯定会改完,发上来
#140楼 回复 引用 查看
2007-08-03 14:21 by 公木子SmartGridViewAlpha 和SmartGridView 有什么不 同SmartGridView好象功能少多。
#141楼 回复 引用 查看
2007-08-03 14:29 by 公木子比如 SmartGridView
<CheckboxAlls>
<yyc:CheckboxAll CheckboxAllID="checkall" checkboxItemID="checkitem" />
</CheckboxAlls>
就没上面的属性
<CheckboxAlls>
<yyc:CheckboxAll CheckboxAllID="checkall" checkboxItemID="checkitem" />
</CheckboxAlls>
就没上面的属性
#142楼 回复 引用 查看
2007-08-03 16:53 by 秦东国请问各位大侠
能不能给 ObjectDataSource之类的数据源控件扩展一下
我希望能够让ObjectDataSource在页面上显示一定的内容:例如标签,按钮等等?
能不能给 ObjectDataSource之类的数据源控件扩展一下
我希望能够让ObjectDataSource在页面上显示一定的内容:例如标签,按钮等等?
#143楼 [楼主] 回复 引用 查看
2007-08-03 18:37 by webabcd@公木子
正式版还没有完全写完,下个礼拜会放上来的,相对原版本会有很多改进
@秦东国
那不是ObjectDataSource的工作
正式版还没有完全写完,下个礼拜会放上来的,相对原版本会有很多改进
@秦东国
那不是ObjectDataSource的工作
#144楼 回复 引用 查看
2007-08-04 09:05 by 秦东国@webabcd
谢谢回复
我以前没有做过控件开发的事情
最近由于用到分页存储过程,
而.net又没有类似的控件
在网上找了找
发现也有这样的控件
但下下来
就是套不上去
以前也遇到过类似的问题
当时我做了个用户控件
来控制数据源控件的参数
从而达到分页的效果
但感觉不爽
而且用的时候还有点麻烦
还要给ObjectDataSource控件些几句代码
现在我想
如果能够直接把这些分页的动作加在ObjectDataSourc上面
不是很方便吗
但试了试
总给ObjectDataSourc加不上子控件
请问有相关的解决办法吗?
谢谢回复
我以前没有做过控件开发的事情
最近由于用到分页存储过程,
而.net又没有类似的控件
在网上找了找
发现也有这样的控件
但下下来
就是套不上去
以前也遇到过类似的问题
当时我做了个用户控件
来控制数据源控件的参数
从而达到分页的效果
但感觉不爽
而且用的时候还有点麻烦
还要给ObjectDataSource控件些几句代码
现在我想
如果能够直接把这些分页的动作加在ObjectDataSourc上面
不是很方便吗
但试了试
总给ObjectDataSourc加不上子控件
请问有相关的解决办法吗?
#145楼 [楼主] 回复 引用 查看
2007-08-06 08:03 by webabcd@秦东国
ObjectDataSourc自带高效分页的方法的
SelectCountMethod
SortParameterName
<asp:Parameter Name="sort" Type="String" />
<asp:Parameter Name="filter" Type="String" />
<asp:Parameter Name="startRowIndex" Type="Int32" />
<asp:Parameter Name="maximumRows" Type="Int32" />
ObjectDataSourc自带高效分页的方法的
SelectCountMethod
SortParameterName
<asp:Parameter Name="sort" Type="String" />
<asp:Parameter Name="filter" Type="String" />
<asp:Parameter Name="startRowIndex" Type="Int32" />
<asp:Parameter Name="maximumRows" Type="Int32" />
#146楼 回复 引用 查看
2007-08-06 10:48 by 东国@webabcd
ObjectDataSource 自带分页功能?
我一直不知道啊,
我昨天还花了很久的时间,自己做了一个分页的控件,
用了两个自定义控件来实现分页功能
我把代码贴出来了
http://www.cnblogs.com/qindgfly/archive/2007/08/06/844424.html
代码可能很糟糕,初学者,希望webabcd指导阿
ObjectDataSource 自带分页功能?
我一直不知道啊,
我昨天还花了很久的时间,自己做了一个分页的控件,
用了两个自定义控件来实现分页功能
我把代码贴出来了
http://www.cnblogs.com/qindgfly/archive/2007/08/06/844424.html
代码可能很糟糕,初学者,希望webabcd指导阿
#147楼 [楼主] 回复 引用 查看
2007-08-06 12:27 by webabcd@东国
:)
不用自己写的
参考这篇
http://www.dotnetbips.com/articles/b6787e60-b0c9-496e-9d10-19bc7af4add2.aspx
:)
不用自己写的
参考这篇
http://www.dotnetbips.com/articles/b6787e60-b0c9-496e-9d10-19bc7af4add2.aspx
#148楼 回复 引用 查看
2007-08-06 15:39 by 东国@webabcd
感谢webabcd提供的资料,
我看了,英文的,虽然看得有些吃力
不过还是基本读懂了
看来我自己做的工作真是白费了
让webabcd见笑了 ^^
感谢webabcd提供的资料,
我看了,英文的,虽然看得有些吃力
不过还是基本读懂了
看来我自己做的工作真是白费了
让webabcd见笑了 ^^
#149楼 [楼主] 回复 引用 查看
2007-08-06 18:34 by webabcd@东国
:)
不谢
:)
不谢
#150楼 回复 引用 查看
2007-08-07 12:20 by JLKEngine兄弟,请问你的最新版本---------正式版何时发布呢? 希望你给的承诺要实现哈, 我们等着米下锅呢!!
#151楼 回复 引用 查看
2007-08-07 12:21 by JLKEngine@webabcd, 等着你早日发布你的正式版,期待我们盼望已久的控件到来!!
#152楼 回复 引用 查看
2007-08-07 12:23 by JLKEngine成都领君科技系列中间件产品资料及试用版下载地址
公司网站下载地址:
http://www.linjon.cn 在首页左边导航栏的软件下载进入。
FTP下载地址:
ftp://210.41.107.38 用户名与密码都是openlabftp,位置在linjon目录下。
邮箱下载地址:
JLK_Engine@163.com ,密码:JLKEngine
欢迎大家看看SuperFlow工作流平台展示!!
QQ: 26326507, E-mail: hy2001al@163.com,
公司网站下载地址:
http://www.linjon.cn 在首页左边导航栏的软件下载进入。
FTP下载地址:
ftp://210.41.107.38 用户名与密码都是openlabftp,位置在linjon目录下。
邮箱下载地址:
JLK_Engine@163.com ,密码:JLKEngine
欢迎大家看看SuperFlow工作流平台展示!!
QQ: 26326507, E-mail: hy2001al@163.com,
#153楼 [楼主] 回复 引用 查看
2007-08-07 13:25 by webabcd@JLKEngine
明天会放上来的
明天会放上来的
#154楼 回复 引用 查看
2007-08-08 18:21 by JLKEngine兄弟,看了你写的控件,感觉还不错,不过基于标准控件GridView的扩展老外也写过很多例子, 希望你能把该控件最重要的一写特性写出来,---------〉如何进行行编辑维护数据,光用于数据浏览感觉用处不大。 希望你目前做的翻页模式能采用客户端模式,包括排序,翻页,单击,双击事件。 不过还是希望你能做得更好,为大家提供更好得控件, 大力支持!!
成都领君科技有限公司 http://www.linjon.cn
欢迎大家看看SuperFlow工作流平台展示!!
QQ: 26326507, E-mail: hy2001al@163.com
成都领君科技有限公司 http://www.linjon.cn
欢迎大家看看SuperFlow工作流平台展示!!
QQ: 26326507, E-mail: hy2001al@163.com
#155楼 [楼主] 回复 引用 查看
2007-08-08 18:43 by webabcd@JLKEngine
:)
嗯,努力中……
:)
嗯,努力中……
#156楼 回复 引用 查看
2007-08-09 17:23 by allenvery good ,正式版终于出来了,等了好久了,有没有英文版的?
#157楼 [楼主] 回复 引用 查看
2007-08-09 19:00 by webabcd@allen
:)
现在没有啊
把中文注释都翻译成英文的工程太“浩大”了
我决定
把中文注释去了就是英文版了
:)
现在没有啊
把中文注释都翻译成英文的工程太“浩大”了
我决定
把中文注释去了就是英文版了
#158楼 回复 引用 查看
2007-08-09 20:52 by 数据绑定者链接已经是正式版了吗?下来研究下
#159楼 [楼主] 回复 引用 查看
2007-08-10 07:41 by webabcd@数据绑定者
:)
是地
:)
是地
#160楼 回复 引用 查看
2007-08-10 08:45 by 数据绑定者我记得以前有个可以查看前面的两个列,然后拖动横向滚动条只滚动其余的列的例子啊,这里怎么没有呢?
像EXCEL里的分屏显示一样
像EXCEL里的分屏显示一样
#161楼 [楼主] 回复 引用 查看
2007-08-10 09:04 by webabcd@数据绑定者
带的demo里有啊
固定了左边两列
带的demo里有啊
固定了左边两列
#162楼 回复 引用 查看
2007-08-10 13:56 by 数据绑定者你确定demo里有?你的demo里的SmartGridView.aspx这个页面吗?
你自己下载下来看,没有固定列的哦。
你自己下载下来看,没有固定列的哦。
#163楼 [楼主] 回复 引用 查看
2007-08-10 14:35 by webabcd@数据绑定者
我重新下了一下,测了一下
就是SmartGridView.aspx这个页面,已经固定了左边的两列啊
另外,只有这个功能是只支持IE的,其他都支持IE和FF
我重新下了一下,测了一下
就是SmartGridView.aspx这个页面,已经固定了左边的两列啊
另外,只有这个功能是只支持IE的,其他都支持IE和FF
#164楼 回复 引用 查看
2007-08-10 15:28 by 数据绑定者呵呵,不好意思误解你了,我用FireFox看的,呵呵
#165楼 [楼主] 回复 引用 查看
2007-08-10 16:23 by webabcd@数据绑定者
:)
关键是我没说清楚
这个功能搞最长时间了,因为想可以随便固定任何行或任何列,这很难在FF里实现
:)
关键是我没说清楚
这个功能搞最长时间了,因为想可以随便固定任何行或任何列,这很难在FF里实现
#166楼 回复 引用 查看
2007-08-12 09:50 by shark0304今天上来看到正式版了,好高兴。
现在很想知道,当数据很多,几w条或10几w条或的时候用Gridview会不会影响数据?
现在很想知道,当数据很多,几w条或10几w条或的时候用Gridview会不会影响数据?
#167楼 回复 引用 查看
2007-08-12 09:51 by shark0304速度。
#168楼 [楼主] 回复 引用 查看
2007-08-13 07:41 by webabcd@shark0304
肯定会的,那就应该用存储过程分页了
了解一下ObjectDataSource吧,用它可以轻松地实现大数据量的分页
肯定会的,那就应该用存储过程分页了
了解一下ObjectDataSource吧,用它可以轻松地实现大数据量的分页
#169楼 回复 引用 查看
2007-08-13 13:00 by JLKEngine兄弟,你写的翻页及排序能使用客户端方式就更好! 还有对行选择时采用客户端模式,也就是提供客户端的事件,这样方便完成AJAXZ模式对后台的处理,希望你能好好改进哈!
#170楼 回复 引用 查看
2007-08-13 13:02 by JLKEngine成都领君科技有限公司网站下载地址:
http://www.linjon.cn 在首页左边导航栏的软件下载进入。
FTP下载地址:
ftp://210.41.107.38 用户名与密码都是openlabftp 在linjon目录下有我公司产品资料。
邮箱下载地址:
JLK_Engine@163.com ,密码:JLKEngine
兄弟,对你开发的控件扩展,我们还是很支持的,希望你努力做得更好!!
http://www.linjon.cn 在首页左边导航栏的软件下载进入。
FTP下载地址:
ftp://210.41.107.38 用户名与密码都是openlabftp 在linjon目录下有我公司产品资料。
邮箱下载地址:
JLK_Engine@163.com ,密码:JLKEngine
兄弟,对你开发的控件扩展,我们还是很支持的,希望你努力做得更好!!
#171楼 [楼主] 回复 引用 查看
2007-08-13 17:53 by webabcd@JLKEngine
行的选择有了啊
就是通过复选框选中行的那个
:)
多谢
行的选择有了啊
就是通过复选框选中行的那个
:)
多谢
#172楼 回复 引用 查看
2007-08-22 16:44 by 兄弟能发一份给我不不错
但下载你的源码后,我的开发环境下注册后,不能正常使用
pghdragon@talkweb.com.cn
但下载你的源码后,我的开发环境下注册后,不能正常使用
pghdragon@talkweb.com.cn
#173楼 [楼主] 回复 引用 查看
2007-08-22 18:29 by webabcd@兄弟能发一份给我不
.net的,不用注册dll的
把编译好的dll直接引用进来就行啊
提供的下载地址里的压缩包就是全部的源代码和示例,没有什么保留的
.net的,不用注册dll的
把编译好的dll直接引用进来就行啊
提供的下载地址里的压缩包就是全部的源代码和示例,没有什么保留的
#174楼 回复 引用 查看
2007-08-27 16:38 by wikdd我怎么下载下来没有DLL文件呢?
#175楼 [楼主] 回复 引用 查看
2007-08-27 17:44 by webabcd@wikdd
编译一下就出来了
编译一下就出来了
#176楼 回复 引用 查看
2007-08-27 19:03 by allenHI,在用您的控件时遇到3个问题,希望能得到您的帮助。
1。导出时,一定要加上前面那个checkbox列吗?
2。导出时,能不能不导出隐藏的列?
3。导出时,如果我的objectdatasource的其中一个参数是取的页面中的一个下拉框的值,因为viewstate要设为false,那么就objectdatasource就取不到我下拉框的值。。。。
期待您的回答,谢谢!
1。导出时,一定要加上前面那个checkbox列吗?
2。导出时,能不能不导出隐藏的列?
3。导出时,如果我的objectdatasource的其中一个参数是取的页面中的一个下拉框的值,因为viewstate要设为false,那么就objectdatasource就取不到我下拉框的值。。。。
期待您的回答,谢谢!
#177楼 [楼主] 回复 引用 查看
2007-08-27 19:41 by webabcd@allen
其实我做的导出,就是将DataTable导出
为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)
详细的可以看看每个方法的注释
其实我做的导出,就是将DataTable导出
为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)
详细的可以看看每个方法的注释
#178楼 回复 引用 查看
2007-08-28 07:49 by shunliy如果我动态设置数据源,怎么不能导出?
#179楼 [楼主] 回复 引用 查看
2007-08-28 08:16 by webabcd@shunliy
可以尝试着这样
控件里我加了几个静态方法
如
YYControls.Helper.Common
Export(DataTable dt, int[] columnIndexList, string[] headers, ExportFormat exportFormat, string fileName, Encoding encoding)
导出的时候调用它就好了
可以尝试着这样
控件里我加了几个静态方法
如
YYControls.Helper.Common
Export(DataTable dt, int[] columnIndexList, string[] headers, ExportFormat exportFormat, string fileName, Encoding encoding)
导出的时候调用它就好了
#180楼 回复 引用 查看
2007-09-07 10:49 by DDD导出的时候有问题。提示数据源必须为DataTable和dataset
但是我的数据源是这样的。怎么出现错误??
但是我的数据源是这样的。怎么出现错误??
#181楼 [楼主] 回复 引用 查看
2007-09-07 12:09 by webabcd@DDD
要先绑定再用SmartGridView的导出方法
或者用
YYControls.Helper.Common.Export()
要先绑定再用SmartGridView的导出方法
或者用
YYControls.Helper.Common.Export()
#182楼 回复 引用 查看
2007-09-20 01:22 by phis在UpdatePanel中,滚动条保持不了位置
ScrollX和ScrollY 两个属性没了?
ScrollX和ScrollY 两个属性没了?
#183楼 [楼主] 回复 引用 查看
2007-09-20 08:13 by webabcd@phis
测试版有
正式版被我给去掉了
以后完善的时候会加上,并提供自动保持滚动条位置的功能
测试版有
正式版被我给去掉了
以后完善的时候会加上,并提供自动保持滚动条位置的功能
#184楼 回复 引用 查看
2007-09-20 09:36 by bili求助求助!!请问在gridview 如果分页每页20条,但是我想每5条进行分段还可以啊,每段间用一条线隔开。
白思不得其解,给小弟一点思路吗???
我今年刚毕业现在工作了,在学校里这些东西都没有学到。工作时发现学校学的东西,,,哎。。。。。
请帮助小弟一下吧。 不努力是不行的啊。
#185楼 [楼主] 回复 引用 查看
2007-09-20 12:22 by webabcd@bili
在RowDataBound里对Row进行操作
在RowDataBound里对Row进行操作
#186楼 回复 引用 查看
2007-09-20 22:12 by phis今天把这个控件用到自己写的一个小项目,真的很不错!
期待进一步完善......
期待进一步完善......
#187楼 回复 引用 查看
2007-09-20 23:28 by Andychen很好的控件。感谢楼主,加油完善
#188楼 [楼主] 回复 引用 查看
2007-09-21 07:36 by webabcd@phis
@Andychen
:)
不断添加新功能中……
@Andychen
:)
不断添加新功能中……
#189楼 回复 引用 查看
2007-09-21 10:34 by allenzengHI ,导出的时候是将objectdatasource指定的datatable导出,那么我要如何控制不导出smartgridview中的隐藏列?不知王兄可有好办法?
#190楼 回复 引用 查看
2007-09-21 11:47 by 碟子 MSN:archor1126@163.com (推荐) QQ:9997452情况是这样的:我之前写程序的时候是为每个SmartGridView控件设置样式,后来为了统一修改颜色的方便,就在skin文件里面加了一段:
<yyc:SmartGridView runat="server" skinid="SmartGrid" Width="100%"
CellPadding="5" GridLines="Horizontal" EmptyDataText="无" EnableSortingAndPagingCallbacks="True">
<HeaderStyle BackColor="Silver" />
<AlternatingRowStyle BackColor="#FFC0C0" />
</yyc:SmartGridView>
然后我在页面的控件属性里面设置了skinid="SmartGrid",再把控件的样式设置代码去掉,这个时候问题出现了:如果去掉<HeaderStyle BackColor="#6B7EBF" />这一行,程序运行时会报错。
YYControls.SartGridViewFunction.FixRowColumnFunction的_sgv_RowDataBoundCell(object sender, GridViewTableCell gvtc)函数里,
// 固定列
if (Array.Exists(this._sgv.FixRowColumn.FixColumns.Split(','), delegate(string s) { return s == gvtc.ColumnIndex.ToString(); }))
该语句抛出NullReferenceException,this._sgv.FixRowColumn.FixColumns对象为空。
<yyc:SmartGridView runat="server" skinid="SmartGrid" Width="100%"
CellPadding="5" GridLines="Horizontal" EmptyDataText="无" EnableSortingAndPagingCallbacks="True">
<HeaderStyle BackColor="Silver" />
<AlternatingRowStyle BackColor="#FFC0C0" />
</yyc:SmartGridView>
然后我在页面的控件属性里面设置了skinid="SmartGrid",再把控件的样式设置代码去掉,这个时候问题出现了:如果去掉<HeaderStyle BackColor="#6B7EBF" />这一行,程序运行时会报错。
YYControls.SartGridViewFunction.FixRowColumnFunction的_sgv_RowDataBoundCell(object sender, GridViewTableCell gvtc)函数里,
// 固定列
if (Array.Exists(this._sgv.FixRowColumn.FixColumns.Split(','), delegate(string s) { return s == gvtc.ColumnIndex.ToString(); }))
该语句抛出NullReferenceException,this._sgv.FixRowColumn.FixColumns对象为空。
#191楼 [楼主] 回复 引用 查看
2007-09-21 11:59 by webabcd@allenzeng
看一下这个方法
Export(string fileName, int[] columnIndexList, string[] headers, ExportFormat exportFormat, Encoding encoding)
可以设置导出哪列,也可以设置标题
看一下这个方法
Export(string fileName, int[] columnIndexList, string[] headers, ExportFormat exportFormat, Encoding encoding)
可以设置导出哪列,也可以设置标题
#192楼 [楼主] 回复 引用 查看
2007-09-21 12:02 by webabcd@碟子 MSN:archor1126@163.com (推荐) QQ:9997452
请下载新版本,已经改好了
请下载新版本,已经改好了
#193楼 回复 引用 查看
2007-09-25 16:39 by anni很好!
我把单击事件绑定到selectrow,感觉动作很缓慢,单击后要停一下才有相应,怎么回事?
我把单击事件绑定到selectrow,感觉动作很缓慢,单击后要停一下才有相应,怎么回事?
#194楼 回复 引用 查看
2007-09-25 16:40 by anni响应
#195楼 [楼主] 回复 引用 查看
2007-09-25 17:07 by webabcd@anni
为了即可以响应双击事件和也可以响应单击事件
所以我把单击事件设置为单击后的300毫秒后响应
为了即可以响应双击事件和也可以响应单击事件
所以我把单击事件设置为单击后的300毫秒后响应
#196楼 回复 引用 查看
2007-09-27 21:37 by shark0304导出EXCEL,在EXCEL里的显示太简单化了,可以先生成网页再导入到EXCEL里那样出来的报表就漂亮整齐多了,我花了两天的时间改进了下
#197楼 [楼主] 回复 引用 查看
2007-09-28 07:48 by webabcd@shark0304
:)
兄弟可以把代码贴出来让大家看看
:)
兄弟可以把代码贴出来让大家看看
- 扩展GridView控件(索引) - 增加多个常用功能
- 扩展GridView控件(索引) - 增加多个常用功能
- 扩展GridView控件(索引) - 增加多个常用功能
- 扩展GridView控件(索引) - 增加多个常用功能
- 扩展GridView控件(索引) - 增加多个常用功能
- 扩展GridView控件(索引) - 增加多个常用功能
- 扩展GridView控件(索引) - 增加多个常用功能
- 扩展GridView控件索引-增加多个常用功能
- 扩展GridView控件(索引) - 增加多个常用功能
- 扩展GridView控件(全)——增加10个常用功能
- 扩展GridView控件(全)——增加10个常用功能
- 扩展GridView控件(全)——增加10个常用功能
- 扩展GridView控件--增加选择列
- Gridview 增加多个空行。
- 扩展GridView控件(9) - 给数据行增加右键菜单
- 扩展GridView控件(9) - 给数据行增加右键菜单
- 扩展GridView分页功能
- 扩展GridView控件
- Asp.net页面之间传递参数的几种方法
- 粗谈Struts+Hibernate+Spring开发——从分层,对接,蔓延的开发过程来看Struts,Hibernate,Spring的整合开发
- 显示BMP位图文件模块
- 关于Linux物理内存管理的理解
- FreeBSD服务器的安装与优化(上)(1)
- 扩展GridView控件(索引) - 增加多个常用功能
- 《C++.GUI.Programming.with.Qt.4》读书笔记Chapter 4~5
- 部署windows服务
- 字符串高级处理函数(Strcmp,Substr,Strstr,partition)
- ASP.NET数据库编程
- 如何自行制作一张FreeBSDLiveCD
- Date DateFormat
- 软件测试过程模型的种类之----------V模型
- jQuery - plugins插件 - easing动画