周五晚上加班的时候做一堆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的区别用法。然后在写代码的时候不经意又忘记了= =。。。

最新文章

  1. bzoj 1065: [NOI2008] 奥运物流
  2. CMake 使用方法(转)
  3. 08Mybatis_入门程序——增加用户的操作以及返回自增主键的功能以及返回非自增主键的功能
  4. Apache Spark源码走读之1 -- Spark论文阅读笔记
  5. Python 将pdf转换成txt(不处理图片)
  6. Html辅助方法(分页、下拉框)
  7. git的一些命令
  8. uistepper on ios versions prior to 5.0
  9. Linux-Tcp-IP
  10. PHP安全设置
  11. eclipse中使用git进行版本号控制
  12. CATranstion动画
  13. 老李分享:loadrunne动态查询db2数据库
  14. HTML基本文件, CSS基础
  15. python3全栈开发-多进程的守护进程、进程同步、生产者消费者模式(重点)
  16. 浅析跨域的方法之一 JSONP
  17. NOIP2013提高组 T2 火柴排队
  18. [android]常见的adb指令
  19. LNMP时,出现502 Bad Gateway的错误提示
  20. M - COURSES

热门文章

  1. hdu 2255KM算法模板
  2. codeforces gym 100357 K (表达式 模拟)
  3. zoj——3557 How Many Sets II
  4. 晶振虚焊导致TI 28335 DSP 烧写FLASH后,连接仿真器时正常工作,拔掉仿真器却不能启动运行
  5. LSN
  6. go语言中log包的使用
  7. sqlite 数据库 相关知识
  8. WPF,Silverlight与XAML读书笔记(3) - 标记扩展
  9. bzoj2744 [HEOI2012]朋友圈——二分图匹配
  10. RDA 字库制作