最终显示效果,如下图所示:
datagridview开始显示通过调用XML存储的字段值及顺序来显示,右键调出Tools来控制显示的顺序及是否显示,通过加号和减号进行调整顺序。

XML存储字段值及顺序

主要代码及事件:
获取datagridview当前显示的字段值及顺序,并存储到数组中,用于listview显示原始的全部的字段值,以及当前显示的顺序;
        private string[] _GetColunmName()
         {
             string[] value=new string[dataGridView1.ColumnCount]; 
             for (int i = 0; i < dataGridView1.ColumnCount; i++)
             {
                 int x = dataGridView1.Columns[i].DisplayIndex;
                 value[x]= dataGridView1.Columns[i].HeaderText;
             }
             return value;
         }
从XML中获取需要显示的字段值的信息,并进行显示及显示顺序的设置;
        private void SetColumn(string GridName) //GridName为指定节点的名称;
         {
             string d = GetXmlColumnName(GridName); //调用事件获取指定节点的内容
             string[] dstr = d.Split(',');
             dataGridView1.SuspendLayout();
             for (int i = 0; i < dataGridView1.Columns.Count; i++)
             {
                 dataGridView1.Columns[i].Visible = dstr.Contains(dataGridView1.Columns[i].HeaderText);
                 string _header = dataGridView1.Columns[i].HeaderText;
                 for (int j = 0; j < dstr.Length; j++)
                 {
                     string s = dstr[j];
                     if (s == _header)
                     {
                         dataGridView1.Columns[i].DisplayIndex = j;
                     }
                 }
             }
             dataGridView1.ResumeLayout(true);
         }
tools页面与主页面通过委托与事件的方式进行调用;
tools的主要代码
Tools的onload的事件代码
  private void Tools_Load(object sender, EventArgs e)
         {
             string[] str = _columnname;//获取调用模块的列明;
             string d = GetXmlColumnName(_mainname); //获取xml中存储的值;
            string[] dstr = d.Split(',');//xml中的列
             //显示全部的GridView名称
             foreach (var _str in str)
             {
                 listView1.Items.Add(_str.ToString());
             }
             //将XML中存在的字段名进行打钩选中
             for (int i = 0; i < listView1.Items.Count; i++)
             {
                 foreach (var _str in dstr)
                 {
                     if (listView1.Items[i].Text == _str.ToString())
                     {
                         listView1.Items[i].Checked = true;
                     }
                 }
             }
         }
//保存到XML的代码;_mainname为节点的名称,value为获取的字段名称的顺序;
 private void SaveXmlColumn() 
         {
             string value = "";
             for (int i = 0; i < listView1.Items.Count; i++)
             {
                 if (listView1.Items[i].Checked==true)
                 {
                     value += listView1.Items[i].Text + ",";
                 }
             }
             if (value.Length > 0)
             {
                 value = value.Remove(value.Length - 1, 1);
             }
             SaveXmlHeader(_mainname, value); //调用保存到XML中;
             SetXmlColumn();  //调用事件进行显示页面的调整
         }