艾洁丽,小鸡排球,邱继光
出处:
原文:
本文版权归www.hzhcontrols.com所有
欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利
入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章。
github:https://github.com/kwwwvagaa/netwinformcontrol
码云:
如果觉得写的还行,请点个 star 支持一下吧
欢迎前来交流探讨: 企鹅群568015492
来都来了,点个【推荐】再走吧,谢谢
install-package hzh_controls
因为前面写的表格存在一些问题,本篇文章将对其优化处理,达到以下效果,支持自定义图片和按钮等自定义单元格
优化是在原表格基础上做的处理,如果不了解可以移步查看一下
移除ucdatagridview中所有自适应高度相关的功能,移除分页控件
datagridviewcolumnentity中添加自定义单元格属性
/// <summary> /// 自定义的单元格控件,一个实现idatagridviewcustomcell的control /// </summary> /// <value>the custom cell.</value> private type customcelltype = null ; public type customcelltype { get { return customcelltype; } set { if (! typeof (idatagridviewcustomcell).isassignablefrom(value) || !value.issubclassof( typeof (system.windows.forms.control))) throw new exception( "行控件没有实现idatagridviewcustomcell接口" ); customcelltype = value; } } |
行控件绑定自定义行
if (item.customcelltype == null ) { label lbl = new label(); lbl.tag = i - (isshowcheckbox ? 1 : 0); lbl.name = "lbl_" + item.datafield; lbl.font = new font( "微软雅黑" , 12); lbl.forecolor = color.black; lbl.autosize = false ; lbl.dock = dockstyle.fill; lbl.textalign = item.textalign; lbl.mousedown += (a, b) => { item_mousedown(a, b); }; c = lbl; } else { control cc = (control)activator.createinstance(item.customcelltype); cc.dock = dockstyle.fill; c = cc; } |
支持基本上就完成了全部的控制了,然后看下调用示例
list<datagridviewcolumnentity> lstculumns = new list<datagridviewcolumnentity>(); lstculumns.add( new datagridviewcolumnentity() { width = 35, widthtype = sizetype.absolute, customcelltype = typeof (uctestgridtable_customcellicon) }); lstculumns.add( new datagridviewcolumnentity() { datafield = "id" , headtext = "编号" , width = 70, widthtype = sizetype.absolute }); lstculumns.add( new datagridviewcolumnentity() { datafield = "name" , headtext = "姓名" , width = 50, widthtype = sizetype.percent }); lstculumns.add( new datagridviewcolumnentity() { datafield = "age" , headtext = "年龄" , width = 50, widthtype = sizetype.percent }); lstculumns.add( new datagridviewcolumnentity() { datafield = "birthday" , headtext = "生日" , width = 50, widthtype = sizetype.percent, format = (a) => { return ((datetime)a).tostring( "yyyy-mm-dd" ); } }); lstculumns.add( new datagridviewcolumnentity() { datafield = "sex" , headtext = "性别" , width = 50, widthtype = sizetype.percent, format = (a) => { return (( int )a) == 0 ? "女" : "男" ; } }); lstculumns.add( new datagridviewcolumnentity() { width = 155, widthtype = sizetype.absolute,customcelltype= typeof (uctestgridtable_customcell) }); this .ucdatagridview1.columns = lstculumns; this .ucdatagridview1.isshowcheckbox = true ; list< object > lstsource = new list< object >(); for ( int i = 0; i < 50; i++) { testgridmodel model = new testgridmodel() { id = i.tostring(), age = 3 * i, name = "姓名——" + i, birthday = datetime.now.addyears(-10), sex = i % 2 }; lstsource.add(model); } this .ucdatagridview1.datasource = lstsource; |
如果你喜欢的话,请到 点个星星吧
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Blazor server side 自家的一些开源的, 实用型项目的进度之 CEF客户端
.NET IoC模式依赖反转(DIP)、控制反转(Ioc)、依赖注入(DI)
vue+.netcore可支持业务代码扩展的开发框架 VOL.Vue 2.0版本发布
网友评论