毕设之工具类构建

毕业设计结束了,在设计工程中的一些难点记录下来,以供日后查阅。此次毕业设计winform应用程序。为了在开发过程中提高开发的效率,特此设立了几个工具类。

一、数据库中表字段自动生成实体类

在数据库中进行表结构设计之后,为此生成实体类,代码如下。

  /// <summary>
    /// 用于从数据库中生成实体类
    /// </summary>
   public class ProduceEntity
    {
       private string tableName;
       public ProduceEntity(string tableName)
       {
           this.tableName = tableName;
       }
       // string strconn = ConfigurationManager.ConnectionStrings["myConnection"].ConnectionString;
        string strconn = string.Format(@"Data Source=(local);Initial Catalog=GraduationProject;User ID=sa;Password=123");
        public  void StartProduceEntity()
        {
           // string tableName = "QCZZ";
            List<string> ZD = new List<string>();
            List<string> type = new List<string>();
            string sql=string.Format("SELECT a.name,b.name FROM syscolumns a left JOIN systypes b on a.xusertype=b.xusertype WHERE a.id=OBJECT_ID(‘{0}‘)",tableName);
            //using ()
            //{
            SqlConnection conn = new SqlConnection(strconn);
                SqlCommand cmd = new SqlCommand(sql,conn);
                try
                {
                    conn.Open();
                    SqlDataReader reader = cmd.ExecuteReader();
                    if (reader.HasRows)
                    {
                        while (reader.Read())
                        {
                            ZD.Add(reader[0].ToString());
                            type.Add(reader[1].ToString());
                        }
                    }
                    ProcessProduceEntity(ZD, type,tableName);
                }
                catch (Exception e2)
                {

                }
                finally
                {
                    conn.Close();

                }
            }
       // }

        private void ProcessProduceEntity(List<string> ZD, List<string> type,string tableName)
        {

           //string path = string.Format(@"F:\资料\net\C#\Demo\毕业设计\Model\{0}.cs",tableName);
           string path = string.Format(@"F:\学习资料\毕业设计\Model\{0}.cs", tableName);
            FileStream fs = new FileStream(path,FileMode.Create);
            StreamWriter sw = new StreamWriter(fs);
            StringBuilder sb = new StringBuilder();
            sb.Append("using System;\r\n using System.Collections.Generic;\r\n using System.Text;\r\n");
            sb.Append("namespace Model\r\n{\r\n");
            sb.AppendFormat("public class {0}\r\n", tableName);
            sb.Append("{\r\n");

            string DataType=string.Empty;
            for(int i=0;i<ZD.Count;i++)
            {
                if(type[i].ToLower()=="varchar")
                {
                    DataType = "string";
                    //sb.AppendFormat("public string {0}\r\n", ZD[i].ToUpper());
                }
                else if (type[i].ToLower() == "datetime")
                {
                    DataType = "DateTime";
                    //sb.AppendFormat("public DateTime {0}\r\n", ZD[i].ToUpper());
                }
                else if (type[i].ToLower() == "int32")
                {
                    DataType = "int";
                }
                sb.AppendFormat("public {0} {1}\r\n", DataType,ZD[i]);
                sb.Append("{ \r\n");
                sb.Append("set;get;\r\n");
                sb.Append("}\r\n");

            }
            sb.Append("}\r\n");
            sb.Append("}\r\n");
            #region TRY
            try
            {
                sw.Write(sb.ToString());
            }
            catch (Exception E2)
            {

            }
            finally
            {
                sw.Close();
                fs.Close();
            }
            #endregion
        }

    }

此次代码设计的比较仓促,还存在少许的bug。以后使用时要改正。

二、form表单的数据自动加载到实体类中

适用于的场景如下表单上一些textbox、RichTextBox等的值自动加载到实体类中,避免了一一的赋值,提高了开发效率。使用前的规则:表单控件的Name属性必须与实体类中的字段的名称保持一致。代码如下所示:

  1   /// <summary>
  2     /// 表单数据生成实体类
  3     /// </summary>
  4     class FormDataToObject
  5     {
  6         private List<Control> list = new List<Control>();
  7         /// <summary>
  8         /// 卡片类,
  9         /// </summary>
 10         /// <param name="obj"></param>
 11         /// <param name="form"></param>
 12         /// <returns></returns>
 13         public object FormDataToEntity(object obj,Control form)
 14         {
 15             try
 16             {
 17                 this.GetControls(form);
 18                 Type Type = obj.GetType();
 19
 20                 PropertyInfo[] infos = Type.GetProperties();
 21                 //for (int i = 0; i < form.Controls.Count; i++)
 22                 foreach (Control control in list)
 23                 {
 24                     foreach (PropertyInfo info in infos)
 25                     {
 26                         if (info.Name == control.Name)
 27                         {
 28                             if (typeof(TextBox) == control.GetType())
 29                             {
 30                                 info.SetValue(obj, ((TextBox)control).Text, null);
 31                             }
 32                             else if (typeof(RadioButton) == control.GetType())
 33                             {
 34                                 RadioButton rb = (RadioButton)control;
 35                                 if (rb.Checked)
 36                                 {
 37                                     info.SetValue(obj, true, null);
 38                                 }
 39                                 else
 40                                 {
 41                                     info.SetValue(obj, false, null);
 42                                 }
 43                             }
 44                             else if (typeof(DateTimePicker) == control.GetType())
 45                             {
 46                                 DateTimePicker dtp = (DateTimePicker)control;
 47                                 DateTime dt = dtp.Value;
 48                                 //int dd = dt.Day;
 49                                 info.SetValue(obj, dt, null);
 50                             }
 51                             else if (typeof(ComboBox) == control.GetType())
 52                             {
 53                                 ComboBox cbm = (ComboBox)control;
 54                                 info.SetValue(obj, cbm.Text, null);
 55                             }
 56                             else if (typeof(RichTextBox) == control.GetType())
 57                             {
 58                                 RichTextBox rtb = (RichTextBox)control;
 59                                 info.SetValue(obj, rtb.Text, null);
 60                             }
 61                             else if (typeof(NumericUpDown) == control.GetType())
 62                             {
 63                                 NumericUpDown num = (NumericUpDown)control;
 64                                 info.SetValue(obj, num.Value, null);
 65                             }
 66                             else if (typeof(CheckBox) == control.GetType())
 67                             {
 68                                 CheckBox cb = control as CheckBox;
 69                                 if (cb.Checked == true)
 70                                 {
 71                                     info.SetValue(obj, true, null);
 72                                 }
 73                             }
 74
 75                         }
 76
 77                     }
 78                 }
 79             }
 80             catch (Exception e)
 81             {
 82                 MessageBox.Show(e.Message);
 83             }
 84             return obj;
 85         }
 86         /// <summary>
 87         /// 列表类(不支持批量)
 88         /// </summary>
 89         /// <param name="obj">实体类</param>
 90         /// <param name="dataGridView">DataGridVIew的对象</param>
 91         /// <returns></returns>
 92         public object FormDataToEntityList(object obj, Control dataGridView)
 93         {
 94             //this.GetControls(form);
 95             Type Type = obj.GetType();
 96
 97             PropertyInfo[] infos = Type.GetProperties();
 98
 99                 if (dataGridView.GetType() == typeof(DataGridView))
100                 {
101                    DataGridView dgv= dataGridView as DataGridView;
102                     foreach(DataGridViewRow row in dgv.Rows )
103                     foreach(DataGridViewColumn  column in dgv.Columns)
104                     foreach (PropertyInfo info in infos)
105                     {
106                         if (info.PropertyType.Name.ToLower() == "int32")
107                         {
108                             if (info.Name == column.Name)
109                             {
110                                 int value = Convert.ToInt32(row.Cells[column.Name].Value);
111                                 info.SetValue(obj, value, null);
112
113                             }
114                         }
115                         else
116                         {
117                             if (info.Name == column.Name)
118                             {
119                                 info.SetValue(obj, row.Cells[column.Name].Value, null);
120
121                             }
122                         }
123
124                     }
125                 }
126
127             return obj;
128         }
129
130         private void GetControls(Control Parent)
131         {
132             foreach (Control c in Parent.Controls)
133             {
134                 list.Add(c);
135                 if (c.Controls.Count > 0)
136                 {
137                     GetControls(c);
138                 }
139
140             }
141             //return list;
142         }
143     }

设计思路:1.通过递归方法获取表单上的全部控件。

2.通过反射来获取实体类中的字段信息(Type Type = obj.GetType();PropertyInfo[] infos = Type.GetProperties();)

3通过控制实体类中字段与表单控件Name属性是否一致来进行赋值。

三、实体类中的数据自动展现在form表单控件上

适用于的场景如下实体类中字段的数值自动加载到表单上一些textbox、RichTextBox等中,避免了一一的赋值,提高了开发效率。使用前的规则:表单控件的Name属性必须与实体类中的字段的名称保持一致。代码如下所示:

 1  /// <summary>
 2     /// 转换器,从实体类向表单数据
 3     /// </summary>
 4     class EntityToFormData
 5     {
 6         #region 用于将实体类中的数据装换到表单卡片上
 7         private static List<Control> list = new List<Control>();
 8         public static void ConvertEntityToForm(object obj,Control form)
 9         {
10             Type type = obj.GetType();
11             PropertyInfo[] infos=type.GetProperties();
12             GetAllControl(form);
13             foreach (Control c in list)
14             {
15                 foreach (PropertyInfo info in infos)
16                 {
17                     if(c.GetType()==typeof(TextBox)
18                         || c.GetType() == typeof(RichTextBox))
19                     if (c.Name == info.Name)
20                     {
21                         c.Text = info.GetValue(obj, null).ToString();
22                     }
23                     if (c.GetType() == typeof(CheckBox))
24                         if (c.Name == info.Name)
25                         {
26                             bool flag = Convert.ToBoolean(info.GetValue(obj, null));
27                             (c as CheckBox).Checked = flag;
28                         }
29                     if(c.GetType()==typeof(NumericUpDown))
30                     {
31                         if (c.Name == info.Name)
32                         {
33                             decimal b = Convert.ToDecimal(info.GetValue(obj, null));
34                             (c as NumericUpDown).Value = b;
35                         }
36                     }
37                 }
38             }
39         }
40         //用于获取表单上的所有控件aa
41         private static void GetAllControl(Control control)
42         {
43             foreach(Control c in control.Controls)
44             {
45                 list.Add(c);
46                 if (c.Controls.Count > 0)
47                 {
48                     GetAllControl(c);
49                 }
50
51
52             }
53         }
54         #endregion
55
56         #region 用于将实体类中的数据转换到表单列表上
57         /// <summary>
58         ///
59         /// </summary>
60         /// <param name="obj">实体类</param>
61         /// <param name="dgv">列表DataGridView实例</param>
62         public static void ConvertEntityToFormList(object obj, DataGridView dgv)
63         {
64             Type type = obj.GetType();
65             PropertyInfo[] infos = type.GetProperties();
66             int index = dgv.Rows.Add();
67                 foreach (DataGridViewColumn column in dgv.Columns)
68                     foreach (PropertyInfo info in infos)
69             {
70
71                 if (info.Name == column.Name)
72                 {
73                     dgv.Rows[index].Cells[column.Name].Value = info.GetValue(obj, null);
74                 }
75             }
76                 dgv.Rows[index].Tag = obj;
77         }
78         #endregion
79     }

时间: 2024-11-08 23:55:07

毕设之工具类构建的相关文章

《java并发编程实战》读书笔记4--基础构建模块,java中的同步容器类&amp;并发容器类&amp;同步工具类,消费者模式

上一章说道委托是创建线程安全类的一个最有效策略,只需让现有的线程安全的类管理所有的状态即可.那么这章便说的是怎么利用java平台类库的并发基础构建模块呢? 5.1 同步容器类 包括Vector和Hashtable,此外还包括在JDK1.2中添加的一些功能相似的类,这些同步的封装器类由Collections.synchronizedXxx等工厂方法创建的.这些类实现线程安全的方式是:将他们的状态封装起来,并对每个共有方法都进行同步,使得每次只能有一个线程能访问容器的状态. 关于java中的Vect

[java工具类01]__构建格式化输出日期和时间的工具类

在之前的学习中,我写过一篇关于字符串格式化的,就主要设计到了时间以及日期的各种格式化显示的设置,其主要时通过String类的fomat()方法实现的. 我们可以通过使用不同的转换符来实现格式化显示不同的时间以及日期信息,但我们了解到,时间以及日期的转换符实在是太多了,导致我们无法十分方便的在需要的时候格式化出想要的日期时间输出格式. 然而在学习过程中,我们了解到类是可以相互调用的,以及静态方法是可以跨类使用的,,所以,通过本文,将构建一个显示时间日期的工具类,定义几个常用的日期时间格式,之后我们

用代码快速构建selector的工具类SelectorHepler

SelectorHepler工具类 一般需要点击效果或者选中.焦点的状态改变后也改变效果的话,需要在drawable文件夹下面新建一个xml文件,然后写一个selector.相对来说比较麻烦,所以我写了一个用代码快速建一个selector的工具类. SelectorHepler代码: import android.content.Context; import android.content.res.ColorStateList; import android.graphics.drawable

spring常用的工具类

spring给我们提供了很多的工具类, 应该在我们的日常工作中很好的利用起来. 它可以大大的减轻我们的平时编写代码的长度. 因我们只想用spring的工具类, 而不想把一个大大的spring工程给引入进来. 下面是我从spring3.0.5里抽取出来的工具类. 在最后给出我提取出来的spring代码打成的jar包 spring的里的resouce的概念, 在我们处理io时很有用. 具体信息请参考spring手册 内置的resouce类型 UrlResource ClassPathResource

2015第30周三Spring常用工具类

文件资源操作 文件资源的操作是应用程序中常见的功能,如当上传一个文件后将其保存在特定目录下,从指定地址加载一个配置文件等等.我们一般使用 JDK 的 I/O 处理类完成这些操作,但对于一般的应用程序来说,JDK 的这些操作类所提供的方法过于底层,直接使用它们进行文件操作不但程序编写复杂而且容易产生错误.相比于 JDK 的 File,Spring 的 Resource 接口(资源概念的描述接口)抽象层面更高且涵盖面更广,Spring 提供了许多方便易用的资源操作工具类,它们大大降低资源操作的复杂度

mybatis的基本配置:实体类、配置文件、映射文件、工具类 、mapper接口

搭建项目 一:lib(关于框架的jar包和数据库驱动的jar包) 1,第一步:先把mybatis的核心类库放进lib里 2,第二步:导入第三方类库(在lib里).mybatis的核心类库在运行时还依赖一些第三方类库 3,第三步:导入连接数据库驱动jar包 二:创建mybatis的配置文件 1,第一步:先创建实体包,对照着表结构把实体类写出来.封装好就是写get,set方法------不像hibernate,可以自动的将表名字段名与实体类相对应,不用自己手写实体类与映射文件 2,第二步:创建xml

生成jFinal的动态条件查询语句的工具类

因为有时候需要根据前台的多个条件来过滤数据!因此需要根据是否有值以及当前值是以什么方式来过滤.这样我们不可能一个一个值来判断吧!这样代码就有些难看了!而jFinal也没有提供这样的方法,而网上的一些解决方法感觉不太好用麻烦而且不够灵活!基于这个考虑我就自己写了一个工具类!目前来说用着还挺方便的!如果有什么不对或者改进的地方请指正,大家共同进步! /**  * 用于生成JFinal的SQL查询语句<br>  * 类名称:Conditions<br>  * 创建人:yangxp<

Unity+NGUI打造网络图片异步加载与本地缓存工具类(一)

我们在移动端的开发中,异步网络图片加载用的非常的多,在unity当中虽然有AssetBundle的存在,一般是先加载好游戏资源然后再进入场景,但是还有不少地方能够用到异步网络图片的加载以及其缓存机制. 我之前也写过两个版本的ios中的异步网络图片加载helper类,所以今天按照同样的思路,也想做一个好用的helper类给大家使用以及简单的说下实现原理. 首先我们加载一张网络图片,要做的事情分步来讲为: 0.开始之前设置一张固定的图片作为占位图(placeholder),表示我们的图片还没加载好,

一步一步跟我学习lucene(8)---lucene搜索之索引的查询原理和查询工具类示例

昨天我们了解了lucene搜索之IndexSearcher构建过程(http://blog.csdn.net/wuyinggui10000/article/details/45698667),对lucene的IndexSearcher有一个大体的了解,知道了怎么创建IndexSearcher,就要开始学会使用IndexSearcher进行索引的搜索,本节我们学习索引的查询原理和根据其相关原理写索引查询的工具类的编写: IndexSearcher提供了几个常用的方法: IndexSearcher.