本帖最后由 csz_1987 于 2015-02-03 16:37:22 编辑

解决方案 »

  1.   

    不能
    不仅无法得到被修改的list内容
    而且如果list内容在外部被修改,也不会通知DataGridView刷新数据
      

  2.   


    是,目前也是这样想。要是太麻烦,还是转回DataTable好了。
      

  3.   

    如果你是winform的话,你可以通过BindSource来通知DataGridView啊BindSource bs;
    bs.DataSourcer = list;view.DataSource = bs;这样子你对list的任何变动都会实时更新GridView或者绑定过的输入框
      

  4.   

    各有各的用处,不能说哪一种就更好
    实体类是强类型,DataTable是弱类型,会产生装箱拆箱的问题,而且弱类型对于团队合作很不利,别人不仔细看你的代码逻辑都不知道里面打底放了啥玩意,你自己时间长了可能也不记得里面到底放了啥玩意,到底有几列,都是什么类型
      

  5.   

    让类继承自  INotifyPropertyChanged 接口,并实现PropertyChanged方法。
    例如属性Name的更改,private string _name;        public string Name
            {
                get { return _name; }
                set
                {
                    _name = value;
                    OnChangedProperty("Name");
                }
            }绑定到控件上指定的列。
      

  6.   


    BindSource可以实现双向绑定,但还是解决不了操作记录的问题吧?
    如我1楼所说的,DataTable可以通过Select方法,很方便的得到,新增行、修改行、删除行。
      

  7.   


    BindSource可以实现双向绑定,但还是解决不了操作记录的问题吧?
    如我1楼所说的,DataTable可以通过Select方法,很方便的得到,新增行、修改行、删除行。
      

  8.   

    对于gridview做的任何操作,你都可以获取到当前行对应的object的啊不就是 list.Where(xxx)吗?可以根据主键获取到的
      

  9.   


    可能你没明白我的意思。用户可以在DataGridView内进行增、删、改等操作,等他都操作完了,通过一个“提交”按钮触发提交数据库的操作,
    通过一次交互,把用户所有的操作都提交给服务器。比如在点提交之前,用户新增了3条数据,删除了5条数据,并且修改了1条数据,这9条数据是一次性提交给服务器的。而你说的意思,大概是用户没做一个操作,立马提交服务器,那么9条数据提交9次。如果用DataTable绑定DataGridView 可以在提交服务器之前很轻松的拿到用户所有的操作记录。
      

  10.   

    GridView用DataTable做数据源比用List合适,在GridView里面,弱类型并不会造成理解问题,因为列都是显式而且是可视化的。
      

  11.   

    这样就要自己去判断用户的操作是增、删、改之一,或者这三种操作的组合。单纯的增删改固然好判断,但是如果存在操作组合,就要新增好多种判断,还必须保证判断的都正确,还是挺麻烦的。如果用用户新增一条记录(还未提交),然后对其进行修改,修改后再删掉;---当作啥都没操作处理
    或者新增(未提交),然后修改;---当作新增处理
    又或者新增(未提交),然后删除;---当做啥都没操作处理
    再或者编辑一条数据(未提交),然后再删除;---当作啥都没操作处理
    还或者编辑一条数据(未提交),有把编辑的数据改回了原数据。 ---当作啥都没操作处理
     都自己做的话,要做好多判断,还得保证万无一失。很费劲。在DataTable做数据源的情况下,处理这种问题就很简单了。感觉List、BindingList 做不到DataTable那样灵活。
      

  12.   

    为什么不用BindingList<T>或者ObservableCollection<T>做后台数据容器
      

  13.   


    因为数据从WCF 或 WebService返回,
    如果服务端直接返回太高级的数据结构(如DataTable),其他平台(Android或IOS)的没有对应的数据类型来匹配。
    所以选择返回数组类型,或者List<T>类型。如果没有更好的方案,那么List<T>到了客户端后,只能再转为DataTable绑定DataGridView。BindingList<T> 解决不了操作记录的问题。   observableCollection<T>没用过,能实现操作记录的问题么?
    参见13楼。。
      

  14.   

    没更好的结果的话 还是决定用DataTable绑了。
      

  15.   

    DataTable天然不是数据源,数据源天然是DataTable。绑定什么的,交给DataTable最好vs提供了强命名的数据集(xsd),使dataTable也具备实体的强命名的优势。更复杂的还有“ADO.NET实体数据模型”,我没有用过,有兴趣的话百度了解下吧