标签:
一直相信阅读优秀的代码,是学习编程的最好方式,经过一段时间对吉日嘎拉通用权限管理系统的学习和使用,我从中受益良多,其中不乏一些优秀的设计思想,其中给我印象比较深刻的有几点,我将按照我个人的理解写下学习笔记,希望能给自己这段时间的学习留下点什么,同时也希望能别人能够通过阅读我的文章来获得一些帮助。
这篇文章我也来探讨一下数据网格设置功能的实现
每个网格的设置对应保存在本地启动目录下UserParameter的文件下的一个XML文件,其中XML文件的命名规则:窗体名称_网格名称.xml (如窗体名称FrmUser里的网格dgvUser对应的网格配置文件名:FrmUser_dgvUser.xml)
将当前窗体名称和网格名称传递给网格数据列设置界面
1 FrmDataGridViewSetting frmDataGridViewSetting = new FrmDataGridViewSetting(); 2 frmDataGridViewSetting.TargetForm = this; 3 frmDataGridViewSetting.TargetDataGridView = this.dgvCostSet; 4 frmDataGridViewSetting.ShowDialog();
数据列设置界面:
窗体加载事件,读取对应的配置信息:
1 string targetFileFullName = BaseSystemInfo.StartupPath + "\\UserParameter\\" + TargetForm.Name + "_" + targetDataGridView.Name + ".xml"; 2 DataSet dsDataGridViewColumns = new DataSet(); 3 dsDataGridViewColumns.ReadXml(targetFileFullName); 4 grdSetting.DataSource = dsDataGridViewColumns.Tables[0];
网格上的属性允许编辑,编辑完成后,点击“确定”按钮,保存网格配置信息到本地:
1 string targetFileFullName = BaseSystemInfo.StartupPath + "\\UserParameter\\" + TargetForm.Name + "_" + TargetDataGridView.Name + ".xml"; 2 DataSet dsDataGridViewColumns = new DataSet(targetDataGridView.Name); 3 dsDataGridViewColumns.Tables.Add(targetDataGridView.Name); 4 dsDataGridViewColumns.Tables[0].Columns.Add("ColumnName", typeof(string)); 5 dsDataGridViewColumns.Tables[0].Columns.Add("HeaderText", typeof(string)); 6 dsDataGridViewColumns.Tables[0].Columns.Add("Frozen", typeof(bool)); 7 dsDataGridViewColumns.Tables[0].Columns.Add("Visible", typeof(bool)); 8 dsDataGridViewColumns.Tables[0].Columns.Add("DisplayIndex", typeof(int)); 9 dsDataGridViewColumns.Tables[0].Columns.Add("Width", typeof(int)); 10 foreach (DataGridViewRow item in grdSetting.Rows) 11 { 12 try 13 { 14 dsDataGridViewColumns.Tables[0].Rows.Add(item.Cells["ColumnName"].Value.ToString(), item.Cells["HeaderText"].Value, item.Cells["Frozen"].Value, item.Cells["Visible"].Value, item.Index, item.Cells["Width"].Value); 15 } 16 catch(Exception ee) 17 { 18 ProcessException(ee); 19 return; 20 } 21 } 22 //因为一列为冻结列前面的所有也得为冻结列 23 for (int i = 0; i < dsDataGridViewColumns.Tables[0].Rows.Count - 1; i++) 24 { 25 if (dsDataGridViewColumns.Tables[0].Rows[i]["Frozen"].ToString() == "True") 26 { 27 for (int j = 0; j < i; j++) 28 { 29 dsDataGridViewColumns.Tables[0].Rows[j]["Frozen"] = true; 30 } 31 } 32 } 33 dsDataGridViewColumns.WriteXml(targetFileFullName);
然后,加载页面DataGridView控件上的列属性:
1 1 //配置数据权限 2 2 DataSet dsDataGridViewColumns = new DataSet(); 3 3 // 窗体的名字 4 4 string key = targetForm.Name; 5 5 System.Reflection.FieldInfo[] fieldInfo = targetForm.GetType().GetFields(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); 6 6 //检索出DataGridViews控件 7 7 var fieldDataGridViews = from dgv in fieldInfo 8 8 where dgv.FieldType.Name.Equals("DataGridView") 9 9 select dgv; 10 10 foreach (var item in fieldDataGridViews) 11 11 { 12 12 DataGridView targetDataGridView = (DataGridView)item.GetValue(targetForm); 13 13 // 加载事件 14 14 LoadMouseClick(targetDataGridView, targetForm); 15 15 string targetFileFullName = BaseSystemInfo.StartupPath + "\\UserParameter\\" + targetForm.Name + "_" + targetDataGridView.Name + ".xml"; 16 16 // 判断DataGridView配置文件是否存在,如果存在则设置列宽,如果不存在则新增文件。 17 17 if (System.IO.File.Exists(targetFileFullName)) 18 18 { 19 19 dsDataGridViewColumns.Tables.Clear(); 20 20 dsDataGridViewColumns.ReadXml(targetFileFullName); 21 21 // 如果列没有更新 22 22 if (dsDataGridViewColumns.Tables.Count > 0 23 23 && dsDataGridViewColumns.Tables[0].Rows.Count == targetDataGridView.ColumnCount) 24 24 { 25 25 for (int j = 0; j < targetDataGridView.ColumnCount; j++) 26 26 { 27 27 targetDataGridView.Columns[j].HeaderText = targetDataGridView.Columns[j].HeaderText; 28 28 // 设置冻结列 29 29 bool ColumnFrozen = bool.Parse(dsDataGridViewColumns.Tables[0].Select("ColumnName=‘" + targetDataGridView.Columns[j].Name + "‘")[0]["Frozen"].ToString()); 30 30 targetDataGridView.Columns[j].Frozen = ColumnFrozen; 31 31 // 设置显示 32 32 bool ColumnVisible = bool.Parse(dsDataGridViewColumns.Tables[0].Select("ColumnName=‘" + targetDataGridView.Columns[j].Name + "‘")[0]["Visible"].ToString()); 33 33 targetDataGridView.Columns[j].Visible = ColumnVisible; 34 34 // 设置位置 35 35 int DisplayIndex = int.Parse(dsDataGridViewColumns.Tables[0].Select("ColumnName=‘" + targetDataGridView.Columns[j].Name + "‘")[0]["DisplayIndex"].ToString()); 36 36 // 冻结列有待优化 37 37 try 38 38 { 39 39 targetDataGridView.Columns[j].DisplayIndex = DisplayIndex; 40 40 } 41 41 catch 42 42 { } 43 43 // 设置列宽 44 44 int ColumnsWidth = int.Parse(dsDataGridViewColumns.Tables[0].Select("ColumnName=‘" + targetDataGridView.Columns[j].Name + "‘")[0]["Width"].ToString()); 45 45 targetDataGridView.Columns[j].Width = ColumnsWidth; 46 46 } 47 47 } 48 48 else 49 49 { 50 50 SaveDataGridViewColumnWidth(targetForm, targetDataGridView); 51 51 } 52 52 } 53 53 else 54 54 { 55 55 if (!System.IO.Directory.Exists(BaseSystemInfo.StartupPath + "\\UserParameter")) 56 56 { 57 57 System.IO.Directory.CreateDirectory(BaseSystemInfo.StartupPath + "\\UserParameter"); 58 58 } 59 59 SaveDataGridViewColumnWidth(targetForm, targetDataGridView); 60 60 } 61 61 }
标签:
原文地址:http://www.cnblogs.com/Jason-Chan/p/4531607.html