XtraGridView有个SaveLayoutToXml方法能把关于整个GridView的参数设置保存为XML。我们就是通过操作改变XML达到控制XtraGridView的各项相应的属性设置。
今天这里将列举的是控制显示的列。修改后的XML文件中XtraGridView中有个RestoreLayoutFromXml方法载入就SaveLayoutToXml方法导出修改后的XML文件。关于这两个方法
具体看官方网站的帮助文档,地址是:http://documentation.devexpress.com/#WindowsForms/DevExpressXtraGridViewsBaseBaseView_SaveLayoutToXmltopic。这个网站是学习Developer Express 控件的好地方,运到问题多看,Demo,上该网站查查,还有就是官方论坛,你遇到的问题,人家也在之前遇到过,上面的还是不错的,上博客园找找也行。
言归正传,通过这两个方法我们就可以对XtraGridView的属性在,程序运行时随心所欲的操作啦。下面给出相关的Demo和代码:
解释下上面的思路,那个在底下大的XtraGridView上面的列是设计的时候创建好了,显示在上面。获取初始化Xml是用SaveLayoutToXml方法把这个XtraGridView的列信息保存为XML
文件,小的那个XtraGridView上面的读取XML就是把上面生成的XMl文件解析后绑定成数据源给小的XtraGridView,正如上面所显示那样,然后我们对这个XtraGridView进行操作,操作完成后把修改的通过保存修改按钮保存到XML文件中,那个小的我此Demo中只是修改那个Visble属性而已,这样做的效果就是可以给人自己定义要显示什么列。修改后的xml,通过载入XML按钮载入此处就用到了RestoreLayoutFromXml方法。如下图:
效果就是这样。小弟不才,哪里还不好的,请各位大侠多多指教。给遇到此问题的朋友借鉴下,要给本人做个记录,正所谓好记性不如烂笔头。下面就贴出代码:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using DevExpress.Utils; using DevExpress.XtraEditors; using System.Xml; namespace WFADynamicallyGeneratedCommlueColumn { public partial class Form1 : Form { public Form1() { InitializeComponent(); } string path= System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "test.xml"; private void sbtnStact_Click(object sender, EventArgs e)//获取初始化Xml { path=cInputBox.InputBox("操作", "文件名:", gv1.ViewCaption); if (path.Length > 0) { path = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + path; OptionsLayoutBase options = new OptionsLayoutBase(); gv1.SaveLayoutToXml(path, options); XtraMessageBox.Show("操作成功"); } else { } } private void sbtnReadXml_Click(object sender, EventArgs e)//读取Xml { XmlDocument objXmlDoc = new XmlDocument(); path = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "test.xml"; objXmlDoc.Load(path); string tNodeCaption; XmlNodeList node = objXmlDoc.SelectSingleNode("//property[@name='Columns']").ChildNodes; DataTable dt = new DataTable(); dt.Columns.Add("VisibleIndex", System.Type.GetType("System.String")); dt.Columns.Add("Visible", System.Type.GetType("System.Boolean")); dt.Columns.Add("Caption", System.Type.GetType("System.String")); dt.Columns.Add("Name", System.Type.GetType("System.String")); dt.Columns.Add("FieldName", System.Type.GetType("System.String")); foreach (XmlNode nodeChiled in node) { DataRow dr = dt.NewRow(); foreach (XmlNode nodeChileds in nodeChiled.ChildNodes) { tNodeCaption = nodeChileds.Attributes["name"].Value; switch(tNodeCaption) { case "VisibleIndex": dr[0] = nodeChileds.InnerText; break; case "Visible": dr[1] = Convert.ToBoolean(nodeChileds.InnerText)?true:false; break; case "Caption": dr[2] = nodeChileds.InnerText; break; case "Name": dr[3] = nodeChileds.InnerText; break; case "FieldName": dr[4] = nodeChileds.InnerText; break; } } dt.Rows.Add(dr); } gc2.DataSource = dt; } private void saveChang_Click(object sender, EventArgs e)//保存修改 { XmlDocument objXmlDoc = new XmlDocument(); path = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase + "test.xml"; objXmlDoc.Load(path); string tNodeCaption; XmlNodeList node = objXmlDoc.SelectSingleNode("//property[@name='Columns']").ChildNodes; DataTable dt = new DataTable(); dt.Columns.Add("VisibleIndex", System.Type.GetType("System.String")); dt.Columns.Add("Visible", System.Type.GetType("System.Boolean")); dt.Columns.Add("Caption", System.Type.GetType("System.String")); dt.Columns.Add("Name", System.Type.GetType("System.String")); dt.Columns.Add("FieldName", System.Type.GetType("System.String")); dt =(DataTable)gc2.DataSource; int i = 0; foreach (XmlNode nodeChiled in node) { DataRow dr = dt.Rows[i]; foreach (XmlNode nodeChileds in nodeChiled.ChildNodes) { tNodeCaption = nodeChileds.Attributes["name"].Value; switch (tNodeCaption) { case "VisibleIndex": nodeChileds.InnerText =Convert.ToString(dr[0]); break; case "Visible": nodeChileds.InnerText =Convert.ToBoolean( dr[1])?"true":"false"; break; case "Caption": nodeChileds.InnerText = Convert.ToString(dr[2]); break; case "Name": nodeChileds.InnerText =Convert.ToString( dr[3]); break; case "FieldName": nodeChileds.InnerText =Convert.ToString(dr[4]) ; break; } } if (i < dt.Rows.Count) i++; } objXmlDoc.Save(path); } private void sbtnLoadXml_Click(object sender, EventArgs e)//载入Xml { gv1.RestoreLayoutFromXml(path); } } }