找回密码
 立即注册

QQ登录

只需一步,快速开始

tuifeishimei

初级会员

8

主题

20

帖子

200

积分

初级会员

积分
200

微信认证勋章

tuifeishimei
初级会员   /  发表于:2017-11-12 15:46  /   查看:3052  /  回复:3
本帖最后由 tuifeishimei 于 2017-11-12 16:02 编辑

目前的项目中经常用到spread控件,大部画面都是表格类型的,表格的一行数据来自不同的表和某些逻辑编辑后的值。
考虑到即使做一个DataTable的临时对象用来绑定Spread之后,
还需要记录第一次检索的数据库的得到的值和最终提交时的值是不是一样来选定对象行来发行对应的SQL,
DataTable不能完全满足客户的需求。
因此目前的思路是做一个List<User>这种自定义扩展对象,然后绑定的Spread的数据源去绑定。

大致的例子(C#)
User(一个表格的行的具体数据对象)的 内容类似下面这样。
   public class User :SpreadExtRow{
       public string Id {get;set;} //纯粹用来显示的列,不可编辑。
       public ColumnExt name{get;set;} //需要比较新旧值及 用来保存其他信息的列。
       .......................
}

//对应spread的一行数据的扩展类型(主要用来记录行的变化状态)
public class SpreadExtRow{
       public int RowStatus{get;set;}//1:inserted,2:updated,3:deleted,0:nochange
}


//对应spread的一列数据的扩展类型
public class ColumnExt{
     private bool isPrimaryKey;  //用来在行查找数据是不是被改变,删除或增加时用key
     private string oldValue{get;setl;}  //用来模拟当前Cell在某一时刻的值(例如第一次按下检索按钮成功后保存的值)oldValue,
     private string newValue{get;set;} //用来显示在Spread上的值,同时,在Spread调用SaveChanges之后,用来存取同步回来的值。
}

程序逻辑大概时这样。
    从数据库和逻辑处理中得到的结果,做成List<Users> ds;
    FPSpread1.datasource = ds
目前,基本类型String的Id能自动绑定和表示,但是name因为时ColumnExt类型,不能映射到Spread的name列上面。
暂时用的是土办法,一个单元格一个单元格两重for循环直接赋值到Spread上面去了。

想问一下大家 有什么办法(例如实现什么接口,重写方法:ex ToString,特性注解:ex ColumnName )能把name这列自动绑定到Spread上面去呢。


3 个回复

倒序浏览
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-11-13 18:02:07
沙发
Users 类里专门写一个属性去完成get ,把 ColumnExt tostring然后显示这个字段
回复 使用道具 举报
tuifeishimei
初级会员   /  发表于:2017-11-22 23:33:54
板凳
dexteryao 发表于 2017-11-13 18:02
Users 类里专门写一个属性去完成get ,把 ColumnExt tostring然后显示这个字段

嗯,看来这个限制还是避免不了,必须需要一个基本类型的属性去关联。回复的晚了,多谢指教。
回复 使用道具 举报
dexteryao讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-11-23 09:36:56
地板
嗯,产品本身在绑定的时候 并没有类似converter的东西,所以只能在数据源绑定前去转换了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部