本帖最后由 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上面去呢。
|
|