找回密码
 立即注册

QQ登录

只需一步,快速开始

chixingyue

论坛元老

7

主题

20

帖子

4375

积分

论坛元老

积分
4375

活字格认证

最新发帖

[已处理] 继承GeneralCellType

chixingyue
论坛元老   /  发表于:2015-9-25 14:51  /   查看:3858  /  回复:3
我编类SheetCellType继承FarPoint.Win.Spread.CellType.GeneralCellType
添加属性 string ConerText
在deginer窗体生成对象
在设计器上点击 cells 错误提示信息是 SheetCellType类不能序列化

3 个回复

倒序浏览
frank.zhang
社区贡献组   /  发表于:2015-9-25 16:48:00
沙发
您好,

这个问题验证的结果如下:
设计器会生成一个XML格式的文档。这个文档,在生成的时候,将所有的设置都转换为XML,在加载的时候,根据XML转换为Spread。
如果是一个自定义的celltype,设计器无法知道这个新的celltype如何序列化和反序列化,所以导致这个错误的发生。

您的问题,我会尽快提交给产品组,看是否有解决方案。
回复 使用道具 举报
frank.zhang
社区贡献组   /  发表于:2015-10-12 17:30:00
板凳
您好,

解决的思路是实现GeneralCellType, ISerializeSupport

可以参考代码:
  1. public class MyCellType : GeneralCellType, ISerializeSupport
  2.   {
  3.     private string cornerText = null;
  4.     [DefaultValue((string)null)]
  5.     public string CornerText
  6.     {
  7.       get
  8.       {
  9.         return cornerText;
  10.       }
  11.       set
  12.       {
  13.         cornerText = value;
  14.       }
  15.     }
  16.     public override bool Serialize(XmlTextWriter w)
  17.     {
  18.       if (!string.IsNullOrEmpty(this.CornerText))
  19.         Serializer.SerializeString(this.CornerText, "CornerText", w);
  20.       base.Serialize(w);
  21.       return true;
  22.     }
  23.     public override bool Deserialize(XmlNodeReader r)
  24.     {
  25.       bool readNext = true;
  26.       string cornerText = string.Empty;
  27.       if (r.IsEmptyElement)
  28.         return true;
  29.       while (true)
  30.       {
  31.         if (readNext)
  32.         {
  33.           if (!r.Read())
  34.             break;
  35.         }
  36.         else
  37.           readNext = true;
  38.         switch (r.NodeType)
  39.         {
  40.           case XmlNodeType.Element:
  41.             if (r.Name.Equals("CornerText"))
  42.             {
  43.               cornerText = Serializer.DeserializeString(r);
  44.               CornerText = cornerText;
  45.             }
  46.             r.MoveToFirstAttribute();
  47.             readNext = false;
  48.             break;
  49.           default:
  50.             break;
  51.         }
  52.         if (!readNext)
  53.           break;
  54.       }
  55.       base.Deserialize(r);
  56.       return true;
  57.     }
  58.   }
复制代码
  1.     private void button1_Click(object sender, EventArgs e)
  2.     {
  3.       MyCellType m = new MyCellType();
  4.       m.CornerText = "a";
  5.       m.DropDownButton = true;
  6.       m.ButtonAlign = ButtonAlign.Left;
  7.       m.FormatString = @"dd\mm\yy";
  8.       fpSpread1.ActiveSheet.Cells[0, 0].CellType = m;
  9.       fpSpread1.ActiveSheet.Cells[0, 0].Value = @"10\01\1908";
  10.       MessageBox.Show(m.CornerText);
  11.       fpSpread1.Save(path + "abc.xml", false);
  12.     }
  13.     private void button2_Click(object sender, EventArgs e)
  14.     {
  15.       fpSpread1.Reset();
  16.       MessageBox.Show(fpSpread1.Open(path + "abc.xml").ToString());
  17.       MyCellType m = new MyCellType();
  18.       m = (MyCellType)fpSpread1.ActiveSheet.Cells[0, 0].CellType;
  19.       MessageBox.Show(m.CornerText);
  20.     }
复制代码
回复 使用道具 举报
frank.zhang
社区贡献组   /  发表于:2015-10-20 17:53:00
地板
您好,
距离这个问题的最后回复已经过去了一段时间,不知道这个问题您是否已经解决?
如果没有解决,欢迎跟贴接续讨论,如果已经解决请对本次服务进行评分。我们会认真对待你提出的宝贵意见,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部