项目需求:

     在设备管理中可以管理多类设备,每类设备的属性信息都不一样。如:

      

  故障和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         }

 

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         }

 

好久没写过随笔了,老是学习别人的,心里愧疚啊 呵呵 。

 

 

 

 

posted on 2011-04-16 16:51  赵保龙  阅读(532)  评论(1)    收藏  举报