项目需求:
在设备管理中可以管理多类设备,每类设备的属性信息都不一样。如:
故障和LTU设备的列信息是不一样的
解决方法:
1.定义强类型的列配置信息,并存储在xml文件中
其中 PropertyName 对应List<T>中T的属性名称, PropertyText 是列名称 Visibled 是否显示
2.在项目启动时读取到缓存中
T 是定义的强类型DataTable
读取配置文件
1 /// <summary>
2 /// 读取配置文件
3 /// </summary>
4 /// <param name="fileName"></param>
5 /// <param name="tableName"></param>
6 /// <returns></returns>
7 public static T GetConfigDT<T>(string fileName, string tableName) where T : DataTable, new()
8 {
9 T configDt = new T();
10 configDt.TableName = tableName;
11 configDt.ReadXml(fileName);
12 return configDt;
13 }
2 /// 读取配置文件
3 /// </summary>
4 /// <param name="fileName"></param>
5 /// <param name="tableName"></param>
6 /// <returns></returns>
7 public static T GetConfigDT<T>(string fileName, string tableName) where T : DataTable, new()
8 {
9 T configDt = new T();
10 configDt.TableName = tableName;
11 configDt.ReadXml(fileName);
12 return configDt;
13 }
3. 加载DataGridView数据,首先初始化列信息,然后设置数据源
this.dataGridViewX_终端.InitColumn("DEV_LTU"); //初始化列
this.dataGridViewX_终端.DataSource = DevTableAction.Instance.SelectLTU(); //读取数据源 List<t> 格式
初始化列
1 /// <summary>
2 /// 初始化列
3 /// </summary>
4 /// <param name="dataGridView"></param>
5 /// <param name="dt"></param>
6 public static void InitColumn(this DevComponents.DotNetBar.Controls.DataGridViewX dataGridView, string tableName)
7 {
8 if (ColumnConfigHelper.ColumnConfigDS.Tables.Contains(tableName))
9 {
10 ColumnConfigDS.ColumnConfigDataTable dt = ColumnConfigHelper.ColumnConfigDS.Tables[tableName] as ColumnConfigDS.ColumnConfigDataTable;
11 dataGridView.Columns.Clear();
12 if (dt != null)
13 {
14
15 dataGridView.AutoGenerateColumns = false;
16
17 List<DataGridViewColumn> columnList = new List<DataGridViewColumn>();
18 foreach (ColumnConfigDS.ColumnConfigRow dr in dt.Rows)
19 {
20 if (dr.Visibled == false)
21 continue;
22 DataGridViewTextBoxColumn column = new DataGridViewTextBoxColumn();
23 column.DataPropertyName = dr.PropertyName;
24 column.HeaderText = dr.PropertyText;
25 if (dr.Width < 0)
26 column.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
27 else
28 column.Width = dr.Width;
29 columnList.Add(column);
30 }
31 dataGridView.Columns.AddRange(columnList.ToArray());
32 }
33 }
34 else
35 {
36 MessageBox.Show("不存在表" + tableName + "的配置文件");
37 }
38 }
2 /// 初始化列
3 /// </summary>
4 /// <param name="dataGridView"></param>
5 /// <param name="dt"></param>
6 public static void InitColumn(this DevComponents.DotNetBar.Controls.DataGridViewX dataGridView, string tableName)
7 {
8 if (ColumnConfigHelper.ColumnConfigDS.Tables.Contains(tableName))
9 {
10 ColumnConfigDS.ColumnConfigDataTable dt = ColumnConfigHelper.ColumnConfigDS.Tables[tableName] as ColumnConfigDS.ColumnConfigDataTable;
11 dataGridView.Columns.Clear();
12 if (dt != null)
13 {
14
15 dataGridView.AutoGenerateColumns = false;
16
17 List<DataGridViewColumn> columnList = new List<DataGridViewColumn>();
18 foreach (ColumnConfigDS.ColumnConfigRow dr in dt.Rows)
19 {
20 if (dr.Visibled == false)
21 continue;
22 DataGridViewTextBoxColumn column = new DataGridViewTextBoxColumn();
23 column.DataPropertyName = dr.PropertyName;
24 column.HeaderText = dr.PropertyText;
25 if (dr.Width < 0)
26 column.AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
27 else
28 column.Width = dr.Width;
29 columnList.Add(column);
30 }
31 dataGridView.Columns.AddRange(columnList.ToArray());
32 }
33 }
34 else
35 {
36 MessageBox.Show("不存在表" + tableName + "的配置文件");
37 }
38 }
好久没写过随笔了,老是学习别人的,心里愧疚啊 呵呵 。