作者:地沟油

进入首页

前言:

  由于想到为以后做打算,增删查改必不可少,要是每个表都要写一次,就增加了多余的代码量,大大的增加工作量。

  为避免这个出现,所以决定使用泛型写一个派生类,实现增删查改功能。(想过用其他第三方模版生成,感觉太麻烦。后来又想过用tt模版,又感觉不太好。)

1.我们在ivw.Dao类中新建一个BaseDao类,写入以下代码:

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.Threading.Tasks;
  6 
  7 using ivw.Models;
  8 using System.Data.Entity;
  9 using ivw.IDao;
 10 using System.Data.Entity.Infrastructure;
 11 
 12 namespace ivw.Dao.SqlServer
 13 {
 14     public class BaseDao<T> where T : class
 15     {
 16         /// <summary>
 17         /// 获取数据源
 18         /// </summary>
 19         /// <returns></returns>
 20         public List<T> GetList()
 21         {
 22             using (DBContainer db = new DBContainer())
 23             {
 24                 return db.Set<T>().ToList();
 25             }
 26         }
 27 
 28         /// <summary>
 29         /// 插入一个实体
 30         /// </summary>
 31         /// <param name="model"></param>
 32         /// <returns></returns>
 33         public int Create(T model)
 34         {
 35             using (DBContainer db = new DBContainer())
 36             {
 37                 db.Set<T>().Add(model);
 38                 return db.SaveChanges();
 39             }
 40         }
 41 
 42         /// <summary>
 43         /// 批量插入一个实体
 44         /// </summary>
 45         /// <param name="models"></param>
 46         /// <returns></returns>
 47         public int Create(List<T> models)
 48         {
 49             using (DBContainer db = new DBContainer())
 50             {
 51                 db.Set<T>().AddRange(models);
 52                 return db.SaveChanges();
 53             }
 54         }
 55 
 56         /// <summary>
 57         /// 修改一个实体
 58         /// </summary>
 59         /// <param name="model"></param>
 60         /// <returns></returns>
 61         public int Edit(T model)
 62         {
 63             using (DBContainer db = new DBContainer())
 64             {
 65                 if (db.Entry<T>(model).State == EntityState.Modified)
 66                 {
 67                     return db.SaveChanges();
 68                 }
 69                 else if (db.Entry<T>(model).State == EntityState.Detached)
 70                 {
 71                     try
 72                     {
 73                         db.Set<T>().Attach(model);
 74                         db.Entry<T>(model).State = EntityState.Modified;
 75                     }
 76                     catch (InvalidOperationException)
 77                     {
 78                         return 0;
 79                     }
 80                     return db.SaveChanges();
 81                 }
 82                 return 0;
 83             }
 84         }
 85 
 86         /// <summary>
 87         /// 删除一个实体
 88         /// </summary>
 89         /// <param name="model"></param>
 90         /// <returns></returns>
 91         public int Delete(T model)
 92         {
 93             using (DBContainer db = new DBContainer())
 94             {
 95                 db.Set<T>().Remove(model);
 96                 return db.SaveChanges();
 97             }
 98         }
 99 
100         /// <summary>
101         /// 批量删除实体
102         /// </summary>
103         /// <param name="models"></param>
104         /// <returns></returns>
105         public int Delete(List<T> models)
106         {
107             using (DBContainer db = new DBContainer())
108             {
109                 db.Set<T>().RemoveRange(models);
110                 return db.SaveChanges();
111             }
112         }
113 
114         /// <summary>
115         /// 删除主键实体
116         /// </summary>
117         /// <param name="KeyValues"></param>
118         /// <returns></returns>
119         public int Delete(params object[] KeyValues)
120         {
121             T model = GetById(KeyValues);
122             if (model != null)
123             {
124                 using (DBContainer db = new DBContainer())
125                 {
126                     db.Set<T>().Remove(model);
127                     return db.SaveChanges();
128                 }
129             }
130             return 0;
131         }
132 
133         /// <summary>
134         /// 根据主键获取实体
135         /// </summary>
136         /// <param name="KeyValues"></param>
137         /// <returns></returns>
138         public T GetById(params object[] KeyValues)
139         {
140             using (DBContainer db = new DBContainer())
141             {
142                 return db.Set<T>().Find(KeyValues);
143             }
144         }
145 
146         /// <summary>
147         /// 判断该实体是否存在
148         /// </summary>
149         /// <param name="id"></param>
150         /// <returns></returns>
151         public bool IsExist(object id)
152         {
153             return GetById(id) != null;
154         }
155 
156         /// <summary>
157         /// 执行一条SQL语句
158         /// </summary>
159         /// <param name="sqlQuery"></param>
160         /// <returns></returns>
161         public int ExecuteSqlCommand(String sqlQuery)
162         {
163             using (DBContainer db = new DBContainer())
164             {
165                 return db.Database.ExecuteSqlCommand(sqlQuery);
166             }
167         }
168 
169         /// <summary>
170         /// 异步执行一条SQL语句
171         /// </summary>
172         /// <param name="sqlQuery"></param>
173         /// <returns></returns>
174         public Task<int> ExecuteSqlCommandAsync(String sqlQuery)
175         {
176             using (DBContainer db = new DBContainer())
177             {
178                 return db.Database.ExecuteSqlCommandAsync(sqlQuery);
179             }
180         }
181 
182         /// <summary>
183         /// 查询一条语句返回结果集
184         /// </summary>
185         /// <param name="sqlQuery"></param>
186         /// <returns></returns>
187         public DbRawSqlQuery<T> SqlQuery(String sqlQuery)
188         {
189             using (DBContainer db = new DBContainer())
190             {
191                 return db.Database.SqlQuery<T>(sqlQuery);
192             }
193         }
194 
195         /// <summary>
196         /// 查询一条语句返回结果集
197         /// </summary>
198         /// <param name="sqlQuery"></param>
199         /// <param name="paras"></param>
200         /// <returns></returns>
201         public DbRawSqlQuery<T> SqlQuery(String sqlQuery, params object[] paras)
202         {
203             using (DBContainer db = new DBContainer())
204             {
205                 return db.Database.SqlQuery<T>(sqlQuery, paras);
206             }
207         }
208     }
209 }
BaseDao

2.在ivw.IDao类中新建一个IBaseDao接口,写入以下代码:

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Data.Entity.Infrastructure;
  4 using System.Linq;
  5 using System.Text;
  6 using System.Threading.Tasks;
  7 
  8 namespace ivw.IDao
  9 {
 10     public interface IBaseDao<T> where T : class
 11     {
 12         /// <summary>
 13         /// 获取数据源
 14         /// </summary>
 15         /// <returns></returns>
 16         List<T> GetList();
 17 
 18         /// <summary>
 19         /// 插入一个实体
 20         /// </summary>
 21         /// <param name="model"></param>
 22         /// <returns></returns>
 23         int Create(T model);
 24 
 25         /// <summary>
 26         /// 批量插入一个实体
 27         /// </summary>
 28         /// <param name="models"></param>
 29         /// <returns></returns>
 30         int Create(List<T> models);
 31 
 32         /// <summary>
 33         /// 修改一个实体
 34         /// </summary>
 35         /// <param name="model"></param>
 36         /// <returns></returns>
 37         int Edit(T model);
 38 
 39         /// <summary>
 40         /// 删除一个实体
 41         /// </summary>
 42         /// <param name="model"></param>
 43         /// <returns></returns>
 44         int Delete(T model);
 45 
 46         /// <summary>
 47         /// 批量删除实体
 48         /// </summary>
 49         /// <param name="models"></param>
 50         /// <returns></returns>
 51         int Delete(List<T> models);
 52 
 53         /// <summary>
 54         /// 删除主键实体
 55         /// </summary>
 56         /// <param name="KeyValues"></param>
 57         /// <returns></returns>
 58         int Delete(params object[] KeyValues);
 59 
 60         /// <summary>
 61         /// 根据主键获取实体
 62         /// </summary>
 63         /// <param name="KeyValues"></param>
 64         /// <returns></returns>
 65         T GetById(params object[] KeyValues);
 66 
 67         /// <summary>
 68         /// 判断该实体是否存在
 69         /// </summary>
 70         /// <param name="id"></param>
 71         /// <returns></returns>
 72         bool IsExist(object id);
 73 
 74         /// <summary>
 75         /// 执行一条SQL语句
 76         /// </summary>
 77         /// <param name="sqlQuery"></param>
 78         /// <returns></returns>
 79         int ExecuteSqlCommand(String sqlQuery);
 80 
 81         /// <summary>
 82         /// 异步执行一条SQL语句
 83         /// </summary>
 84         /// <param name="sqlQuery"></param>
 85         /// <returns></returns>
 86         Task<int> ExecuteSqlCommandAsync(String sqlQuery);
 87 
 88         /// <summary>
 89         /// 查询一条语句返回结果集
 90         /// </summary>
 91         /// <param name="sqlQuery"></param>
 92         /// <returns></returns>
 93         DbRawSqlQuery<T> SqlQuery(String sqlQuery);
 94 
 95         /// <summary>
 96         /// 查询一条语句返回结果集
 97         /// </summary>
 98         /// <param name="sqlQuery"></param>
 99         /// <param name="paras"></param>
100         /// <returns></returns>
101         DbRawSqlQuery<T> SqlQuery(String sqlQuery, params object[] paras);
102     }
103 }
IBaseDao

3.在ivw.Services类中新建一个BaseServices方法,写入以下代码:

  1 using ivw.IDao;
  2 using System;
  3 using System.Collections.Generic;
  4 using System.Data.Entity.Infrastructure;
  5 using System.Linq;
  6 using System.Text;
  7 using System.Threading.Tasks;
  8 
  9 namespace ivw.Services
 10 {
 11     public class BaseServices<T> where T : class
 12     {
 13         private readonly IBaseDao<T> baseDao;
 14         public BaseServices(IBaseDao<T> baseDao)
 15         {
 16             this.baseDao = baseDao;
 17         }
 18 
 19         /// <summary>
 20         /// 获取数据源
 21         /// </summary>
 22         /// <returns></returns>
 23         public List<T> GetList()
 24         {
 25             return baseDao.GetList();
 26         }
 27 
 28         /// <summary>
 29         /// 插入一个实体
 30         /// </summary>
 31         /// <param name="model"></param>
 32         /// <returns></returns>
 33         public Boolean Create(T model)
 34         {
 35             return baseDao.Create(model) > 0;
 36         }
 37 
 38         /// <summary>
 39         /// 批量插入一个实体
 40         /// </summary>
 41         /// <param name="models"></param>
 42         /// <returns></returns>
 43         public Boolean Create(List<T> models)
 44         {
 45             return baseDao.Create(models) > 0;
 46         }
 47 
 48         /// <summary>
 49         /// 修改一个实体
 50         /// </summary>
 51         /// <param name="model"></param>
 52         /// <returns></returns>
 53         public Boolean Edit(T model)
 54         {
 55             return baseDao.Edit(model) > 0;
 56         }
 57 
 58         /// <summary>
 59         /// 删除一个实体
 60         /// </summary>
 61         /// <param name="model"></param>
 62         /// <returns></returns>
 63         public Boolean Delete(T model)
 64         {
 65             return baseDao.Delete(model) > 0;
 66         }
 67 
 68         /// <summary>
 69         /// 批量删除实体
 70         /// </summary>
 71         /// <param name="models"></param>
 72         /// <returns></returns>
 73         public Boolean Delete(List<T> models)
 74         {
 75             return baseDao.Delete(models) > 0;
 76         }
 77 
 78         /// <summary>
 79         /// 删除主键实体
 80         /// </summary>
 81         /// <param name="KeyValues"></param>
 82         /// <returns></returns>
 83         public Boolean Delete(params object[] KeyValues)
 84         {
 85             return baseDao.Delete(KeyValues) > 0;
 86         }
 87 
 88         /// <summary>
 89         /// 根据主键获取实体
 90         /// </summary>
 91         /// <param name="KeyValues"></param>
 92         /// <returns></returns>
 93         public T GetById(params object[] KeyValues)
 94         {
 95             return baseDao.GetById(KeyValues);
 96         }
 97 
 98         /// <summary>
 99         /// 判断该实体是否存在
100         /// </summary>
101         /// <param name="id"></param>
102         /// <returns></returns>
103         public bool IsExist(object id)
104         {
105             return baseDao.IsExist(id);
106         }
107 
108         /// <summary>
109         /// 执行一条SQL语句
110         /// </summary>
111         /// <param name="sqlQuery"></param>
112         /// <returns></returns>
113         public Boolean ExecuteSqlCommand(String sqlQuery)
114         {
115             return baseDao.ExecuteSqlCommand(sqlQuery) > 0;
116         }
117 
118         /// <summary>
119         /// 异步执行一条SQL语句
120         /// </summary>
121         /// <param name="sqlQuery"></param>
122         /// <returns></returns>
123         public Task<int> ExecuteSqlCommandAsync(String sqlQuery)
124         {
125             return baseDao.ExecuteSqlCommandAsync(sqlQuery);
126         }
127 
128         /// <summary>
129         /// 查询一条语句返回结果集
130         /// </summary>
131         /// <param name="sqlQuery"></param>
132         /// <returns></returns>
133         public DbRawSqlQuery<T> SqlQuery(String sqlQuery)
134         {
135             return baseDao.SqlQuery(sqlQuery);
136         }
137 
138         /// <summary>
139         /// 查询一条语句返回结果集
140         /// </summary>
141         /// <param name="sqlQuery"></param>
142         /// <param name="paras"></param>
143         /// <returns></returns>
144         public DbRawSqlQuery<T> SqlQuery(String sqlQuery, params object[] paras)
145         {
146             return baseDao.SqlQuery(sqlQuery, paras);
147         }
148     }
149 }
BaseServices

4.我们新增一个Modules表,用来测试。

 1 USE [IVW]
 2 GO
 3 
 4 /****** Object:  Table [dbo].[Modules]    Script Date: 2017/11/25 20:34:36 ******/
 5 SET ANSI_NULLS ON
 6 GO
 7 
 8 SET QUOTED_IDENTIFIER ON
 9 GO
10 
11 CREATE TABLE [dbo].[Modules](
12     [Id] [int] IDENTITY(1,1) NOT NULL,
13     [ModuleCode] [nvarchar](50) NULL,
14     [ModuleName] [nvarchar](256) NOT NULL,
15     [Description] [nvarchar](256) NULL,
16     [AssemblyName] [nvarchar](256) NULL,
17     [TypeName] [nvarchar](256) NULL,
18     [IsFolder] [bit] NOT NULL,
19     [Visible] [bit] NULL,
20     [ModuleSort] [int] NULL,
21     [ModuleIcon] [nvarchar](50) NULL,
22     [ParentId] [int] NULL,
23  CONSTRAINT [PK_Modules_1] PRIMARY KEY CLUSTERED 
24 (
25     [Id] ASC
26 )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
27 ) ON [PRIMARY]
28 GO
29 
30 ALTER TABLE [dbo].[Modules] ADD  CONSTRAINT [DF_Modules_IsFolder]  DEFAULT ((0)) FOR [IsFolder]
31 GO
32 
33 ALTER TABLE [dbo].[Modules] ADD  CONSTRAINT [DF_Modules_Visible]  DEFAULT ((1)) FOR [Visible]
34 GO
35 
36 EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'ID' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Modules', @level2type=N'COLUMN',@level2name=N'Id'
37 GO
38 
39 EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'模块代码' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Modules', @level2type=N'COLUMN',@level2name=N'ModuleCode'
40 GO
41 
42 EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'模块名称' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Modules', @level2type=N'COLUMN',@level2name=N'ModuleName'
43 GO
44 
45 EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'描述' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Modules', @level2type=N'COLUMN',@level2name=N'Description'
46 GO
47 
48 EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'程序集' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Modules', @level2type=N'COLUMN',@level2name=N'AssemblyName'
49 GO
50 
51 EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'对象类型' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Modules', @level2type=N'COLUMN',@level2name=N'TypeName'
52 GO
53 
54 EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'是否为组' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Modules', @level2type=N'COLUMN',@level2name=N'IsFolder'
55 GO
56 
57 EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'是否功能可见' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Modules', @level2type=N'COLUMN',@level2name=N'Visible'
58 GO
59 
60 EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'排序' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Modules', @level2type=N'COLUMN',@level2name=N'ModuleSort'
61 GO
62 
63 EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'父ID' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'Modules', @level2type=N'COLUMN',@level2name=N'ParentId'
64 GO
Modules

5.然后插入几条数据。

 1 USE [IVW]
 2 GO
 3 SET IDENTITY_INSERT [dbo].[Modules] ON 
 4 GO
 5 INSERT [dbo].[Modules] ([Id], [ModuleCode], [ModuleName], [Description], [AssemblyName], [TypeName], [IsFolder], [Visible], [ModuleSort], [ModuleIcon], [ParentId]) VALUES (0, N'Module', N'系统模块', NULL, NULL, NULL, 1, 1, NULL, NULL, NULL)
 6 GO
 7 INSERT [dbo].[Modules] ([Id], [ModuleCode], [ModuleName], [Description], [AssemblyName], [TypeName], [IsFolder], [Visible], [ModuleSort], [ModuleIcon], [ParentId]) VALUES (1, N'Sys', N'系统管理', NULL, NULL, N'', 1, 1, 1, NULL, 0)
 8 GO
 9 INSERT [dbo].[Modules] ([Id], [ModuleCode], [ModuleName], [Description], [AssemblyName], [TypeName], [IsFolder], [Visible], [ModuleSort], [ModuleIcon], [ParentId]) VALUES (2, N'User', N'个人办公', N'', N'', N'', 1, 1, 2, N'', 0)
10 GO
11 INSERT [dbo].[Modules] ([Id], [ModuleCode], [ModuleName], [Description], [AssemblyName], [TypeName], [IsFolder], [Visible], [ModuleSort], [ModuleIcon], [ParentId]) VALUES (3, N'Modules', N'系统模块管理', N'', N'', N'ivw.Windows.frmModules', 0, 1, 1, N'', 1)
12 GO
13 INSERT [dbo].[Modules] ([Id], [ModuleCode], [ModuleName], [Description], [AssemblyName], [TypeName], [IsFolder], [Visible], [ModuleSort], [ModuleIcon], [ParentId]) VALUES (6, N'txl', N'我的联系人', N'', N'', N'ivw.Windows.frmContact', 0, 1, 2, N'', 2)
14 GO
15 SET IDENTITY_INSERT [dbo].[Modules] OFF
16 GO
ModulesInsert

6.在实体类中更新Modules实体,在ivw.Dao中新建ModulesDao,ivw.IDao中新建IModulesDao,ivw.Services新建ModulesServices。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 using ivw.IDao;
 8 using ivw.Models;
 9 
10 namespace ivw.Dao.SqlServer
11 {
12     public class ModulesDao : BaseDao<Modules>, IModulesDao
13     {
14      
15     }
16 }
ModulesDao
 1 using ivw.Models;
 2 using System;
 3 using System.Collections.Generic;
 4 using System.Linq;
 5 using System.Text;
 6 using System.Threading.Tasks;
 7 
 8 namespace ivw.IDao
 9 {
10     public interface IModulesDao : IBaseDao<Modules>
11     {
12         
13     }
14 }
IModulesDao
 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 
 7 using ivw.IDao;
 8 using ivw.Models.Sys;
 9 using ivw.Models;
10 
11 namespace ivw.Services
12 {
13     public class ModulesServices : BaseServices<Modules>
14     {
15         private readonly IModulesDao modulesDao;
16         public ModulesServices(IModulesDao modulesDao)
17             : base(modulesDao)
18         {
19             this.modulesDao = modulesDao;
20         }
21     }
22 }
ModulesServices

7.注册。

  (1)在ivw.Unity中ModulesServices方法加入以下代码。

1 builder.RegisterType<Dao.SqlServer.ModulesDao>().As<IDao.IModulesDao>();//注册菜单
注册菜单

  (2)在ServiceHelper中加入以下代码。

 1 using ivw.Services;
 2 using ivw.IDao;
 3 namespace ivw.Unity
 4 {
 5     public static class ServiceHelper
 6     {
 7         #region 公共属性
 8         public static UserServices UserServices { get; set; }
 9         public static ModulesServices ModulesServices { get; set; }
10         #endregion
11 
12         static ServiceHelper() => SetService();
13 
14         #region 设置Service值
15         public static void SetService()
16         {
17             UserServices = new UserServices(AutofacContainer.GetInstance().GetObject<IUserDao>());
18             ModulesServices = new ModulesServices(AutofacContainer.GetInstance().GetObject<IModulesDao>());
19         }
20         #endregion
21     }
22 }
View Code

8.新建一个frmModules窗体,至于布局随便弄,以下是我自己布局的界面。(新增一个DevExpress的TreeList)

9.在ivw.Windows中新建一个文件夹Common,里面新增一个xTreeList类,为公用方法。

 1 using DevExpress.XtraTreeList.Columns;
 2 using System;
 3 using System.Collections.Generic;
 4 using System.Linq;
 5 using System.Text;
 6 using System.Threading.Tasks;
 7 
 8 namespace ivw.Windows
 9 {
10     public class xTreeList
11     {
12         public static void AddxTreeListColumns(DevExpress.XtraTreeList.TreeList TreeList, String Caption, String FieldName, String Name, int Width, Boolean Visible)
13         {
14             TreeListColumn treeListColumn = new TreeListColumn
15             {
16                 Caption = Caption,
17                 FieldName = FieldName,
18                 Name = Name,
19                 Width = Width,
20                 Visible= Visible
21             };
22             TreeList.Columns.Add(treeListColumn);
23         }
24 
25         public static void SetTreeList(DevExpress.XtraTreeList.TreeList TreeList,String KeyFieldName,String ParentFieldName)
26         {
27             TreeList.KeyFieldName = KeyFieldName;
28             TreeList.ParentFieldName = ParentFieldName;
29 
30             TreeList.OptionsBehavior.ReadOnly = true;//设置只读
31             TreeList.OptionsBehavior.Editable = false;//设置不可编辑
32             TreeList.OptionsBehavior.AutoSelectAllInEditor = false;//设置是否允许通过Enter或F2来选择该单元格的所有内容。
33 
34             TreeList.OptionsSelection.InvertSelection = true;//聚焦的样式是否只适用于聚焦细胞或所有细胞除了聚焦对象,失去焦点后
35             //TreeList.OptionsFilter.AllowColumnMRUFilterList = false;//过滤器不显示最近过滤的项目
36             //TreeList.OptionsFilter.AllowFilterEditor = false;//不允许使用过滤编辑器
37             //TreeList.OptionsFilter.AllowMRUFilterList = false;//不允许使用最近使用项目的过滤列表
38 
39             TreeList.OptionsView.AutoWidth = true;//允许自动列宽
40             
41         }
42     }
43 }
xTreeList

 10.回到frmModules后台写入以下代码:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.ComponentModel;
 4 using System.Data;
 5 using System.Drawing;
 6 using System.Text;
 7 using System.Linq;
 8 using System.Threading.Tasks;
 9 using System.Windows.Forms;
10 using DevExpress.XtraEditors;
11 using ivw.Models;
12 using ivw.Unity;
13 using DevExpress.XtraTreeList.Nodes;
14 using DevExpress.XtraTreeList.Columns;
15 
16 namespace ivw.Windows
17 {
18     public partial class frmModules : BaseForm
19     {
20         public frmModules()
21         {
22             InitializeComponent();
23             this.Load += FrmModules_Load;
24         }
25 
26         private void FrmModules_Load(object sender, EventArgs e)
27         {
28             this.tlModules.Nodes.Clear();
29             xTreeList.AddxTreeListColumns(tlModules, "模块列表", "ModuleName", "ModuleName", 0, true);
30             xTreeList.SetTreeList(tlModules, "Id", "ParentId");
31 
32             List<Modules> list = ServiceHelper.ModulesServices.GetList();
33             this.tlModules.DataSource = new BindingList<Modules>(list);
34             this.tlModules.ExpandAll();//默认展开            
35         }
36     }
37 }
View Code

11.BaseFrom代码为:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 using System.Windows.Forms;
 7 
 8 namespace ivw.Windows
 9 {
10     public class BaseForm : DevExpress.XtraEditors.XtraForm
11     {
12         public BaseForm()
13         {
14             this.SetStyle(ControlStyles.AllPaintingInWmPaint | ControlStyles.UserPaint | ControlStyles.DoubleBuffer, true);
15             UpdateStyles();
16         }
17     }
18 }
View Code

12.我们来看一下效果如何。

13.泛型派生类使用成功了哟!😊

posted on 2017-11-25 21:21  地沟油  阅读(713)  评论(2编辑  收藏  举报