• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
zx1993
博客园    首页    新随笔    联系   管理    订阅  订阅

以简单的例子谈一下C#中的COPY

周五晚上加班的时候做一堆ComboBox直接的联动,然后呢,这些cbo的DataSource都是同一个DataTable,当时写代码的时候求快也就没有太注意DataTable的绑定,然后就出了一些小问题。

出问题前的代码:

var dt = new DataTable();
dt.Columns.Add();
dt.Rows.Add();

var cbos = new ComboBox[] { comboBox1,comboBox2 };
foreach (var cbo in cbos)
{
       cbo.DataSource = dt;
}

去界面操作这些cbo的时候你会发现cbo1选择了第一个选项的话,cbo2也会跟着自动选成第一个选项。为什么呢?因为这两个cbo绑定的都是同一个dt,当cbo1选择dt中的第一行数据的时候,内存里面自然也会反应cbo1的selectedvalue是dt的第一行,那么绑定着相同dt的cbo2的selectedvalue自然也会跟着变成第一个选项。

遇到这种情况,我们在给复数个cbo绑定相同数据源的时候,就不要单纯的直接把DataTable给绑定上去,而是用一个拷贝的DataTable,就是cbo.DataSource = dt.Copy();,这样两个cbo绑定的数据源就不在相同,它们两个也不能互相影响了。

所以,在处理DataTable的时候,加一个Copy()就是一个很好的代码习惯,就算不是处理控件,简简单单的new一个DataTable,或者把sql取出来的DataTable赋给我们自己new的DataTable,最好都在后面加个Copy(),因为一旦代码多了起来,你会无法完全掌握在哪里new的这个DataTable会需要变更,一旦在不经意间变更,那么必然会影响到其它绑定这个DataTable的地方。记得某一次前辈给我review代码的时候就给我指出过来,当时也查过copy和clone的区别用法。然后在写代码的时候不经意又忘记了= =。。。

 

posted @ 2017-03-19 20:35  zx1993  阅读(631)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3