现在的位置: 首页 > 综合 > 正文

Developer Express 之 XtraGridView如何动态控制列的显示

2012年08月22日 ⁄ 综合 ⁄ 共 4131字 ⁄ 字号 评论关闭

XtraGridView有个SaveLayoutToXml方法能把关于整个GridView的参数设置保存为XML。我们就是通过操作改变XML达到控制XtraGridView的各项相应的属性设置。

今天这里将列举的是控制显示的列。修改后的XML文件中XtraGridView中有个RestoreLayoutFromXml方法载入就SaveLayoutToXml方法导出修改后的XML文件。关于这两个方法

具体看官方网站的帮助文档,地址是:http://documentation.devexpress.com/#WindowsForms/DevExpressXtraGridViewsBaseBaseView_SaveLayoutToXmltopic。这个网站是学习Developer Express 控件的好地方,运到问题多看,Demo,上该网站查查,还有就是官方论坛,你遇到的问题,人家也在之前遇到过,上面的还是不错的,上博客园找找也行。

言归正传,通过这两个方法我们就可以对XtraGridView的属性在,程序运行时随心所欲的操作啦。下面给出相关的Demo和代码:

image

解释下上面的思路,那个在底下大的XtraGridView上面的列是设计的时候创建好了,显示在上面。获取初始化Xml是用SaveLayoutToXml方法把这个XtraGridView的列信息保存为XML

文件,小的那个XtraGridView上面的读取XML就是把上面生成的XMl文件解析后绑定成数据源给小的XtraGridView,正如上面所显示那样,然后我们对这个XtraGridView进行操作,操作完成后把修改的通过保存修改按钮保存到XML文件中,那个小的我此Demo中只是修改那个Visble属性而已,这样做的效果就是可以给人自己定义要显示什么列。修改后的xml,通过载入XML按钮载入此处就用到了RestoreLayoutFromXml方法。如下图:

image

效果就是这样。小弟不才,哪里还不好的,请各位大侠多多指教。给遇到此问题的朋友借鉴下,要给本人做个记录,正所谓好记性不如烂笔头。下面就贴出代码:

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);
        }
    }
}

抱歉!评论已关闭.