← 返回所有博客文章

C1FlexGrid提供了可供用户调整列顺序的接口,在设置下面代码后:

  1:  this.c1FlexGrid1.AllowDragging = C1.Win.C1FlexGrid.AllowDraggingEnum.Columns;

可方便的在UI上拖拽列进行重新布局,非常方便,满足了不同用户的日常个性化设置。

但是有一个问题,如何能在下次程序启动后能“自动还原”现场?

答案是有的,这个就是序列化思想:

“序列化是指一个对象的实例可以被保存,保存成一个二进制串、文本串、XML、二进制加密数据等;把数据放在硬盘上。这样,关机时序列化它,开机时反序列化它。序列化概念的提出和实现,可以使我们的应用程序的设置信息保存和读取更加方便。序列化有很多好处,比如,在一台机器上产生一个实例,初始化完毕,然后可以序列化,通过网络传送到另一台机器,然后反序列化,得到对象实例,之后再执行某些业务逻辑,得到结果,再序列化,返回第一台机器,第一台机器得到对象实例,得到结果。这个例子是目前比较先进的“智能代理”的原理。 当前比较热火的web services使用soap协议,soap协议也是以对象的可序列化为基础的; 以及WCF通信原理也是通过序列化为XML、JSON字符串在网络中传送,在另外一台电脑再反序列化,还原对象。”

为了实现的更自动,响应了c1FlexGrid1_AfterDragColumn事件,每次当拖动列后,可触发该事件,我们进行序列化:保存为文本文件(您也可自行实现保存为二进制或者XML文件)。

  1:         /// <summary>
  2:         /// Save Layout
  3:         /// </summary>
  4:         /// <param name="sender"></param>
  5:         /// <param name="e"></param>
  6:         private void c1FlexGrid1_AfterDragColumn(object sender, C1.Win.C1FlexGrid.DragRowColEventArgs e)
  7:         {
  8:             StringBuilder sb = new StringBuilder();
  9:             foreach (C1.Win.C1FlexGrid.Column item in this.c1FlexGrid1.Cols)
 10:             {
 11:                 sb.AppendLine(item.Name);
 12:             }
 13: 
 14:             File.WriteAllText(C1FlexGridLayout_file, sb.ToString());
 15:         }

 

当程序启动后,在Form_load方法中,可通过设置各个Column的Index进行恢复:

  1:         /// <summary>
  2:         /// Load Layout
  3:         /// </summary>
  4:         /// <param name="sender"></param>
  5:         /// <param name="e"></param>
  6:         private void Form1_Load(object sender, EventArgs e)
  7:         {
  8:             LoadFile();
  9: 
 10:             for (int i = 0; i < c1FlexGrid1.Cols.Count; i++)
 11:             {
 12:                 C1.Win.C1FlexGrid.Column item = c1FlexGrid1.Cols[i];
 13:                 int newOne = GetNewPostion(item.Name);
 14:                 if (newOne == -1 || newOne == item.Index)
 15:                 {
 16:                     continue;
 17:                 }
 18: 
 19:                 item.Move(newOne);
 20:             }
 21:         }

 

image

源码下载: