标签:
DataGridView是在用C#做windows界面程序时常用到的控件,DataGridView的功能非常多,用起来也非常复杂,下面我就为DataGridView提供一个扩展.
1: DataGridView的显示内容使用文本配置,不使用编码,可以简化编码.
2: 为DatgaGridView提供多选框,并且通过头部多选框可全选或全不选.
3: 为DataGridView提供行编号.
虽然2,3在很多文章中都有人介绍如何实现,但是这些实现都太麻烦,我希望能做到使用者只设置一两个属性,这些能力DataGridView就可以自动拥有,而不需要添加事先,委托什么的.
还有,就是不希望实现这些功能的类继承自DataGridView,换句话说,不管用不用这个实现类,使用者的界面最好都可以运行.
下面是我实现该类的主要接口:
1 public sealed class DGViewHelper 2 { 3 /// <summary> 4 /// 初始化控件 5 /// </summary> 6 /// <param name="form"></param> 7 /// <param name="dgv"></param> 8 /// <param name="json"></param> 9 /// <param name="usingCheck">是否使用复选列</param> 10 /// <param name="usingNo">是否使用编号</param> 11 /// <returns></returns> 12 public bool Init(ContainerControl form, DataGridView dgv, string json, bool usingCheck = false, bool usingNo = false); 13 }
下面是该类的演示代码:
1 public partial class ProcessMaterial : UserControl 2 { 3 DGViewHelper dgvHelper = new DGViewHelper(); 4 5 private void ProcessMaterial_Load(object sender, EventArgs e) 6 { 7 dgvHelper.Init(this, dgvMaterial, ViewConfig.ViewDefault.ProcessMaterial_DGV, true, true); 8 9 // ... 10 11 DataTable dtMaterial = GetMaterials(type); 12 dgvMaterial.DataSource = dt; 13 } 14 15 string columnsInfo = " 16 [ 17 { 18 ""ColumnID"":""Name"", 19 ""ColumnText"":""名称"", 20 ""ColumnName"":""Name"", 21 ""WidthPercent"":30, 22 ""Align"":""left"", 23 ""IsShow"":1 24 }, 25 { 26 ""ColumnID"":""Model"", 27 ""ColumnText"":""型号"", 28 ""ColumnName"":""Model"", 29 ""WidthPercent"":30, 30 ""Align"":""left"", 31 ""IsShow"":1 32 }, 33 { 34 ""ColumnID"":""Count"", 35 ""ColumnText"":""数量"", 36 ""ColumnName"":""Count"", 37 ""WidthPercent"":10, 38 ""Align"":""left"", 39 ""IsShow"":1 40 }, 41 { 42 ""ColumnID"":""Other"", 43 ""ColumnText"":""操作"", 44 ""ColumnName"":"""", 45 ""WidthPercent"":30, 46 ""Align"":""left"", 47 ""IsShow"":1 48 }, 49 { 50 ""ColumnID"":""ProductID"", 51 ""ColumnText"":"""", 52 ""ColumnName"":""ProductID"", 53 ""WidthPercent"":0, 54 ""Align"":""center"", 55 ""IsShow"":0 56 }, 57 { 58 ""ColumnID"":""ProcessId"", 59 ""ColumnText"":"""", 60 ""ColumnName"":""ProcessId"", 61 ""WidthPercent"":0, 62 ""Align"":""center"", 63 ""IsShow"":0 64 }, 65 { 66 ""ColumnID"":""MaterialID"", 67 ""ColumnText"":"""", 68 ""ColumnName"":""MaterialID"", 69 ""WidthPercent"":0, 70 ""Align"":""center"", 71 ""IsShow"":0 72 } 73 ]"; 74 }
columnsInfo字符串需要解释一下,该字符串为一个JSON字符串,表示一个数组.数组中存储这DataBGridView要显示的列信息,包括:
ColumnID:列的唯一标识
ColumnText:列表头显示文字
ColumnName:列数据在DataSource对应的列或这属性
WidthPercent: 列占整个DataGridView宽度的百分比
Align:列对齐方式,left,right,center三种
IsShow:是否显示1实现,0隐藏
演示界面截图:
类源代码下载:
http://files.cnblogs.com/files/Rong-/DGViewHelper.zip
完整程序路径:
http://git.oschina.net/xumingxsh/HiCSClient
1:DataGridView的列有很多的细节内容,在DGViewHelper中我只是对主要的内容进行了抽象,而且个人觉得80%的场景下,也不一定需要关注其他的列的细节内容.但是对列的抽象毕竟不完整,以后很可能会添加更多的列信息,例如当前采用百分比的列宽,以后可能会添加固定的列宽
2: 在DGViewHelper.cs中,DGVColumnInfo应该为一个外界不可见的DGViewHelper的内部类,但是由于无法进行JSON字符串转换,所以只能声明为public(internal还没有尝试)
标签:
原文地址:http://www.cnblogs.com/Rong-/p/5412606.html