找回密码
 立即注册

QQ登录

只需一步,快速开始

holly.huang
初级会员   /  发表于:2014-8-13 10:58:00
11#
我这边取Items的值,能告诉如何操作吗?
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-8-13 17:25:00
12#
回复 11楼holly.huang的帖子

你好,
我不是特别理解你目前遇到的问题,问题是怎么从数据库中提取数据转换为 items【】吗?
回复 使用道具 举报
holly.huang
初级会员   /  发表于:2014-8-14 17:43:00
13#
可能我描述不清楚,
我再描述一下吧
我的SPREAD使用跟微软的gridview有点类似,每一列绑定数据库里一个字段。
对于ComboBoxCellType类型 的列,由于ComboBoxCellType 存在一个是显示的值Items ,另外一个是隐藏的值ItemData ,数据库存储的是ItemData ,所以要求从数据库中读取并绑定spread的时候,把ItemData转化一下,并显示在ComboBoxCellType中。。。
理解吗?呵呵
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-8-15 11:56:00
14#
回复 13楼holly.huang的帖子

这次理解了。
Spread ComboBoxCellType 提供了序列化和反序列化方法,具体做法如下:

  1.             FarPoint.Win.Spread.CellType.ComboBoxCellType combo = new FarPoint.Win.Spread.CellType.ComboBoxCellType();
  2.             string[] cbstr;
  3.             cbstr = new String[] { "One", "Two", "Three" };
  4.             string[] strval;
  5.             strval = new String[] { "1", "2", "3" };
  6.             combo.Items = cbstr;
  7.             combo.ItemData = strval;
  8.             combo.EditorValue = FarPoint.Win.Spread.CellType.EditorValue.ItemData;
  9.             fpSpread1.Sheets[0].Cells[0, 0].CellType = combo;

  10.             System.Xml.XmlTextWriter writer = new System.Xml.XmlTextWriter("combo.xml", System.Text.Encoding.UTF8);
  11.             writer.Formatting = System.Xml.Formatting.Indented; writer.Indentation = 2;
  12.             writer.WriteStartDocument();
  13.             writer.WriteStartElement("ComboBox");
  14.             combo.Serialize(writer);
  15.             combo.Serialize(writer);
  16.             writer.WriteEndElement();
  17.             writer.WriteEndDocument();
  18.             writer.Close();


  19.             FarPoint.Win.Spread.CellType.ComboBoxCellType combo1 = new FarPoint.Win.Spread.CellType.ComboBoxCellType();
  20.             System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
  21.             doc.Load("combo.xml");
  22.             System.Xml.XmlNode node;
  23.             node = doc.FirstChild;
  24.             while (!node.Name.Equals("ComboBox"))
  25.                 node = node.NextSibling;
  26.             System.Xml.XmlNodeReader r = new System.Xml.XmlNodeReader(node);
  27.             r.Read();
  28.             combo1.Deserialize(r);

  29.             fpSpread1.Sheets[0].Cells[0, 1].CellType = combo1;

复制代码


所以建议您在存储数据库的同时把 ComboCellType 序列化,从数据库中提取数据绑定到 Spread 之后,再反序列化ComboCellType 设置给Combo列,这样即可自动转换了,测试代码:

  1.         private void gettextToolStripMenuItem_Click(object sender, EventArgs e)
  2.         {
  3.             DataTable dt = new DataTable();
  4.             dt.Columns.Add("combotest",typeof(System.Int32));

  5.             dt.Rows.Add(1);
  6.             dt.Rows.Add(2);
  7.             dt.Rows.Add(3);

  8.             this.fpSpread1.DataSource = dt;

  9.             FarPoint.Win.Spread.CellType.ComboBoxCellType combo1 = new FarPoint.Win.Spread.CellType.ComboBoxCellType();
  10.             System.Xml.XmlDocument doc = new System.Xml.XmlDocument();
  11.             doc.Load("combo.xml");
  12.             System.Xml.XmlNode node;
  13.             node = doc.FirstChild;
  14.             while (!node.Name.Equals("ComboBox"))
  15.                 node = node.NextSibling;
  16.             System.Xml.XmlNodeReader r = new System.Xml.XmlNodeReader(node);
  17.             r.Read();
  18.             combo1.Deserialize(r);

  19.             fpSpread1.Sheets[0].Columns[0].CellType = combo1;
  20.             
  21.         }
复制代码


不知道我表达的清楚吗?

评分

参与人数 1满意度 +5 收起 理由
holly.huang + 5 非常好。。。

查看全部评分

回复 使用道具 举报
holly.huang
初级会员   /  发表于:2014-8-15 23:50:00
15#
除此之外,还有没有别的思路?因为我的ComboBoxCellType的Items和ItemData都是可以配置的,保存时序列化ComboBoxCellType不太合适啊。。。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-8-18 11:02:00
16#
回复 15楼holly.huang的帖子

抱歉,我不是特别理解,即使是可以配置,在保存时应该也是有最终状态吧?保存即可。
或者不用序列化,单独存储items和itemdata字符串也可以,这部分代码需要您自定义代码实现。
回复 使用道具 举报
holly.huang
初级会员   /  发表于:2014-8-19 09:09:00
17#
简单的说是这样,你现在提供的方式是用序列化和反序列化ComboBoxCellType的方式,而不是真正把用户操作的时候选择ComboBoxCellType的值存储到对应数据库相应字段里边。我们其实希望的是这样:用户选择了什么,数据库就存储相应的值,读取的道理也一样。。。
回复 使用道具 举报
iceman
社区贡献组   /  发表于:2014-8-20 10:03:00
18#
回复 17楼holly.huang的帖子

请留下您的联系方式我们电话沟通下,或者您拨打过来,我已经把服务电话发送到您的站内短消息里。
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 立即注册
返回顶部