基于DevExpress XtraGrid控件实现的凭证式录入
2006-09-15 23:19
218 查看
个人而言,一直觉得XtraGrid是个非常不错的窗格控件,也基于它做了若干个微型的应用,最终用户们也比较能接受。当然,现在商业的Grid很多,同质化也很严重,好像Infragstics的UltraGrid,ComponentOne的,DataDynamic的SharpGrid,还有Janus的GridEx。。。反正什么列锁定,拖放,排序,过滤,单元格合并,导出。。。都成了Basic Feature了:)
最近有朋友问过,如何在XtraGrid上显示出象会计凭证一样的录入方式,其实之前几个客户也向我提过,不过一直都很忙,总没有空尝试做这个东西。这两天因为准备仔细的研究DevExpress的源码,就用这个题目进行了一次热身了,这里也不揣简陋,让各位高人晒笑一下:)
首先我想到的实现方法,是从RepositoryItem中继承出一个新的文本编辑器,里边进行数位间隔,但由于不能直接从Winform.TextBox里边继承,想了想重绘的种种恐怖,我就放弃了。
第2条路是做一个UserControl,在里边动态生成若干个文本诓(你要多少位有效数字,就生成多少个),一个埃一个的排列,UserControl作为容器。我想这是最懒惰的方法了,几乎没有什么高难度的地方。。。只是,亲爱的XtraGrid不支持在单元格中直接挂接UserControl!!!(PopupContainer可以,不过是弹出一个小窗口,在这里没用),所以这个方法也行不通。(BTW,Janus的GridEX可以这样做,你在单元格里边挂接任意的控件都无任欢迎,所以GridEx是我的Second Choice。。。)
现在采取的办法,其实最笨,就是直接动态生成数位列,为了好看,再重绘一下ColumnHeader,具体代码这里不拜弄了,各位可以自由欣赏。运行效果如下:
![](http://www.cnblogs.com/images/cnblogs_com/timiil/b.JPG)
现在基本上可以使用,包括录入和显示都正常,不足之处还有很多:
1,不支持列拖放(因为我找不到"捕捉列拖放完成"的事件)
2,可以排序,但升序和降序的Indicator不能显示(不知到在那里重绘)
3,不支持分组和过滤(不过想来没有人会在凭证列干这两件事吧)
测试窗体的代码:
定义一个私有对象
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
private GridCurrencyEdit gce;
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public Form1()
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
InitializeComponent();
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// 加载数据
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
this.gce = new GridCurrencyEdit(this.colSinglePrice, this.dsTest.dtOrderMaster, 4, 2, Color.Beige);
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
private void UpdateData()
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
this.gce.PreUpdate();
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
//执行了上述函数再更新数据
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
具体源代码一并奉上,对应DevExpress版本2.0.0到最新的6.1.4都可以; 代码基于.net 2.0,如果要“回迁”到1.1的,就把那几个匿名事件改一下就可以了. 希望各位高手提出宝贵意见和整改代码,或者是对其进一步优雅的封装,都非常期待:)
最近有朋友问过,如何在XtraGrid上显示出象会计凭证一样的录入方式,其实之前几个客户也向我提过,不过一直都很忙,总没有空尝试做这个东西。这两天因为准备仔细的研究DevExpress的源码,就用这个题目进行了一次热身了,这里也不揣简陋,让各位高人晒笑一下:)
首先我想到的实现方法,是从RepositoryItem中继承出一个新的文本编辑器,里边进行数位间隔,但由于不能直接从Winform.TextBox里边继承,想了想重绘的种种恐怖,我就放弃了。
第2条路是做一个UserControl,在里边动态生成若干个文本诓(你要多少位有效数字,就生成多少个),一个埃一个的排列,UserControl作为容器。我想这是最懒惰的方法了,几乎没有什么高难度的地方。。。只是,亲爱的XtraGrid不支持在单元格中直接挂接UserControl!!!(PopupContainer可以,不过是弹出一个小窗口,在这里没用),所以这个方法也行不通。(BTW,Janus的GridEX可以这样做,你在单元格里边挂接任意的控件都无任欢迎,所以GridEx是我的Second Choice。。。)
现在采取的办法,其实最笨,就是直接动态生成数位列,为了好看,再重绘一下ColumnHeader,具体代码这里不拜弄了,各位可以自由欣赏。运行效果如下:
现在基本上可以使用,包括录入和显示都正常,不足之处还有很多:
1,不支持列拖放(因为我找不到"捕捉列拖放完成"的事件)
2,可以排序,但升序和降序的Indicator不能显示(不知到在那里重绘)
3,不支持分组和过滤(不过想来没有人会在凭证列干这两件事吧)
测试窗体的代码:
定义一个私有对象
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
private GridCurrencyEdit gce;
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
public Form1()
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
InitializeComponent();
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
// 加载数据
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
this.gce = new GridCurrencyEdit(this.colSinglePrice, this.dsTest.dtOrderMaster, 4, 2, Color.Beige);
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/None.gif)
private void UpdateData()
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cnblogs.com/Images/dot.gif)
{
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
this.gce.PreUpdate();
![](http://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
//执行了上述函数再更新数据
![](http://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
具体源代码一并奉上,对应DevExpress版本2.0.0到最新的6.1.4都可以; 代码基于.net 2.0,如果要“回迁”到1.1的,就把那几个匿名事件改一下就可以了. 希望各位高手提出宝贵意见和整改代码,或者是对其进一步优雅的封装,都非常期待:)
相关文章推荐
- 基于DevExpress XtraGrid控件实现的凭证式录入
- 在Winform开发框架中,利用DevExpress控件实现数据的快速录入和选择
- 基于JavaScript与DBGRID控件的B/S结构客户端联想式录入技术的设计与实现
- [DevExpress控件应用]XtraGrid: 实现按钮列
- 基于 J a v a S c r i p t 与 D B G R I D控件的 B / S结构客户端联想式录入技术的设计与实现
- 基于DevExpress开发的GridView如何实现一列显示不同的控件类型
- Devexpress XtraGrid 控件编辑的内容,如何实时生效
- winform实现下拉控件的无限级联动(DevExpress版)
- devexpress 水晶报表控件 实现递归显示
- DevExpress控件XtraGrid的Master-Detail用法
- 基于单个对话框工程中,CListBox控件上实现 选择/复制功能(不要写CListBox的派生类)
- Winform传统DataGridView和DevExpress控件的GridControl两者表头全选功能的实现
- DevExpress NavBarControl控件鼠标左键单击Group实现Expanded(NavBarGroup触发展开或者折叠事件?)
- 承接C# Winform C/S架构 并基于Devexpress UI控件相关软件开发,有需求可留言联系
- 利用DevExpress的LayoutControl控件实现界面的自动生成
- 基于jquery实现的服务器验证控件的启用和禁用代码
- devexpress中gridview控件实现多选功能
- 基于Ajax技术实现的数据表格控件
- C# win8风格界面(基于DevExpress控件)
- Android基于PhotoView实现的头像/圆形裁剪控件