码迷,mamicode.com
首页 > Windows程序 > 详细

一个DataGridView辅助类

时间:2016-04-20 15:03:15      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:

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还没有尝试)

一个DataGridView辅助类

标签:

原文地址:http://www.cnblogs.com/Rong-/p/5412606.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!