用List<T>做DataGridView 的数据源时,如何查询被修改的对象? 本帖最后由 csz_1987 于 2015-02-03 16:37:22 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不能不仅无法得到被修改的list内容而且如果list内容在外部被修改,也不会通知DataGridView刷新数据 是,目前也是这样想。要是太麻烦,还是转回DataTable好了。 如果你是winform的话,你可以通过BindSource来通知DataGridView啊BindSource bs;bs.DataSourcer = list;view.DataSource = bs;这样子你对list的任何变动都会实时更新GridView或者绑定过的输入框 各有各的用处,不能说哪一种就更好实体类是强类型,DataTable是弱类型,会产生装箱拆箱的问题,而且弱类型对于团队合作很不利,别人不仔细看你的代码逻辑都不知道里面打底放了啥玩意,你自己时间长了可能也不记得里面到底放了啥玩意,到底有几列,都是什么类型 让类继承自 INotifyPropertyChanged 接口,并实现PropertyChanged方法。例如属性Name的更改,private string _name; public string Name { get { return _name; } set { _name = value; OnChangedProperty("Name"); } }绑定到控件上指定的列。 BindSource可以实现双向绑定,但还是解决不了操作记录的问题吧?如我1楼所说的,DataTable可以通过Select方法,很方便的得到,新增行、修改行、删除行。 BindSource可以实现双向绑定,但还是解决不了操作记录的问题吧?如我1楼所说的,DataTable可以通过Select方法,很方便的得到,新增行、修改行、删除行。 对于gridview做的任何操作,你都可以获取到当前行对应的object的啊不就是 list.Where(xxx)吗?可以根据主键获取到的 可能你没明白我的意思。用户可以在DataGridView内进行增、删、改等操作,等他都操作完了,通过一个“提交”按钮触发提交数据库的操作,通过一次交互,把用户所有的操作都提交给服务器。比如在点提交之前,用户新增了3条数据,删除了5条数据,并且修改了1条数据,这9条数据是一次性提交给服务器的。而你说的意思,大概是用户没做一个操作,立马提交服务器,那么9条数据提交9次。如果用DataTable绑定DataGridView 可以在提交服务器之前很轻松的拿到用户所有的操作记录。 GridView用DataTable做数据源比用List合适,在GridView里面,弱类型并不会造成理解问题,因为列都是显式而且是可视化的。 这样就要自己去判断用户的操作是增、删、改之一,或者这三种操作的组合。单纯的增删改固然好判断,但是如果存在操作组合,就要新增好多种判断,还必须保证判断的都正确,还是挺麻烦的。如果用用户新增一条记录(还未提交),然后对其进行修改,修改后再删掉;---当作啥都没操作处理或者新增(未提交),然后修改;---当作新增处理又或者新增(未提交),然后删除;---当做啥都没操作处理再或者编辑一条数据(未提交),然后再删除;---当作啥都没操作处理还或者编辑一条数据(未提交),有把编辑的数据改回了原数据。 ---当作啥都没操作处理 都自己做的话,要做好多判断,还得保证万无一失。很费劲。在DataTable做数据源的情况下,处理这种问题就很简单了。感觉List、BindingList 做不到DataTable那样灵活。 为什么不用BindingList<T>或者ObservableCollection<T>做后台数据容器 因为数据从WCF 或 WebService返回,如果服务端直接返回太高级的数据结构(如DataTable),其他平台(Android或IOS)的没有对应的数据类型来匹配。所以选择返回数组类型,或者List<T>类型。如果没有更好的方案,那么List<T>到了客户端后,只能再转为DataTable绑定DataGridView。BindingList<T> 解决不了操作记录的问题。 observableCollection<T>没用过,能实现操作记录的问题么?参见13楼。。 没更好的结果的话 还是决定用DataTable绑了。 DataTable天然不是数据源,数据源天然是DataTable。绑定什么的,交给DataTable最好vs提供了强命名的数据集(xsd),使dataTable也具备实体的强命名的优势。更复杂的还有“ADO.NET实体数据模型”,我没有用过,有兴趣的话百度了解下吧 C#中treeview中父节点和子节点的互选问题 程序中有循环调用,四五次之后程序出错,求解。 求一个 支持多个下载工具下载 C#源码 水晶报表中图标轴标签格式更改问题 iFrame Image 问题 菜鸟学C#以来的几个苦恼。求援助! 如果通过窗口句柄获得窗口类或给未知名称已知类窗体发消息。 这个错误怎么解决?? 如何计算比例尺 在线等--WINFORM将SQL2000里的图片数据变为图片文件?? 比较字符串有地方不懂 WPF,验证码框框是怎么做的?
不仅无法得到被修改的list内容
而且如果list内容在外部被修改,也不会通知DataGridView刷新数据
是,目前也是这样想。要是太麻烦,还是转回DataTable好了。
bs.DataSourcer = list;view.DataSource = bs;这样子你对list的任何变动都会实时更新GridView或者绑定过的输入框
实体类是强类型,DataTable是弱类型,会产生装箱拆箱的问题,而且弱类型对于团队合作很不利,别人不仔细看你的代码逻辑都不知道里面打底放了啥玩意,你自己时间长了可能也不记得里面到底放了啥玩意,到底有几列,都是什么类型
例如属性Name的更改,private string _name; public string Name
{
get { return _name; }
set
{
_name = value;
OnChangedProperty("Name");
}
}绑定到控件上指定的列。
BindSource可以实现双向绑定,但还是解决不了操作记录的问题吧?
如我1楼所说的,DataTable可以通过Select方法,很方便的得到,新增行、修改行、删除行。
BindSource可以实现双向绑定,但还是解决不了操作记录的问题吧?
如我1楼所说的,DataTable可以通过Select方法,很方便的得到,新增行、修改行、删除行。
可能你没明白我的意思。用户可以在DataGridView内进行增、删、改等操作,等他都操作完了,通过一个“提交”按钮触发提交数据库的操作,
通过一次交互,把用户所有的操作都提交给服务器。比如在点提交之前,用户新增了3条数据,删除了5条数据,并且修改了1条数据,这9条数据是一次性提交给服务器的。而你说的意思,大概是用户没做一个操作,立马提交服务器,那么9条数据提交9次。如果用DataTable绑定DataGridView 可以在提交服务器之前很轻松的拿到用户所有的操作记录。
或者新增(未提交),然后修改;---当作新增处理
又或者新增(未提交),然后删除;---当做啥都没操作处理
再或者编辑一条数据(未提交),然后再删除;---当作啥都没操作处理
还或者编辑一条数据(未提交),有把编辑的数据改回了原数据。 ---当作啥都没操作处理
都自己做的话,要做好多判断,还得保证万无一失。很费劲。在DataTable做数据源的情况下,处理这种问题就很简单了。感觉List、BindingList 做不到DataTable那样灵活。
因为数据从WCF 或 WebService返回,
如果服务端直接返回太高级的数据结构(如DataTable),其他平台(Android或IOS)的没有对应的数据类型来匹配。
所以选择返回数组类型,或者List<T>类型。如果没有更好的方案,那么List<T>到了客户端后,只能再转为DataTable绑定DataGridView。BindingList<T> 解决不了操作记录的问题。 observableCollection<T>没用过,能实现操作记录的问题么?
参见13楼。。