最近用WPF的DataGrid的时候,发现一个很弱智的问题,DataGrid的ItemsSource是绑定了一个属性:

  

  然后取数给这个集合赋值的时候,第一次赋值,就会出现列移位

  

  起初还以为是显卡的问题,结果今天来集成显卡的电脑上也一样出现,具体原因不详,以下是几种解决办法:

    1.(首选,有效果)DataGrid的RowHeaderWidth="0",必须赋值为0,不能不赋值,也不能赋其他值。

    2.(有效果)绑定的源一开始就要赋值,即至少要有一行数据。

    3.(效果不一,有的地方有效有的地方无效)不用绑定,每次获得数据后手动赋ItemsSource的值。

    4.(有效,比较繁琐)把每一条数据封装成对象,DataGrid封装成列模板,每一列绑定这个对象的属性。

  对于使用DataTable还是用集合做为数据源,总结以下几点:

  a)绑定DataTable的DefaultView有几个个好处:

    1.方便,直接取数绑给目标,不需要再转成集合给目标每一列绑定。

    2.易替换,如果要增减列,只需要改取数语句,界面不需改动。

    3.相对于转换成集合来说理论上节省性能。

    4.在大数据量下,如果前后两次获取的数据源没有变动,不会重绘UI,而集合的话每次都会重绘。

  缺陷:

    1.需要代码设置每一列的列宽,否则UI会很难看,全挤在一起。(代码设置的过程可能会消耗性能)。

    2.无数据时UI的数据区域什么都没有,一片空白,影响用户体验。

  适用的地方:一般是使用在数据量大、不需要操作数据的地方,只是单纯的显示。

  b)绑定集合的好处:

    1.UI里可以直接设置列宽,不需要代码再设。

    2.不存在列位移的现象(至今未发现)。

    3.无数据时UI上也会有列头。

    4.可以灵活使用列模板。

  缺陷:

    1.UI和集合数据列绑死,增减列需要动UI。

    2.取到数据之后还要转换成集合,理论上耗能。

    3.步骤繁琐,需要将数据条目封装成对象,如果字段很多就烦了。

  适用的地方:数据量不大、需要操作数据,比如要加一列CheckBox标识选中,加列ComBox提供候选等。

最新文章

  1. XVI Open Cup named after E.V. Pankratiev. GP of Siberia
  2. python中if __name__ == '__main__': 的解析
  3. SQL Server复制情况下的高可用方案(一)镜像+复制
  4. ZOJ 3494 BCD Code(AC自动机+数位DP)
  5. Linux下远程cp命令scp
  6. WebAPI 安全性 使用TOKEN+签名验证(上)
  7. Struts2 web.xml文件配置
  8. SharePoint 2010 Ribbon的实现
  9. 模板-->单变元模线性方程
  10. 【持久化框架】Mybatis与Hibernate的详细对比
  11. cocos2d-x 3.0rc开发指南:Windows下Android环境搭建
  12. BZOJ 2096([Poi2010]Pilots-单调队列-差值)
  13. springmvc和servlet在上传和下载文件(保持文件夹和存储数据库Blob两种方式)
  14. 基于Java使用Snmp4j进行监控与采集(snmptrap、snmpwalk、snmpget)
  15. SynchronousQueue 的联想
  16. R语言仪表盘
  17. [UE4]Invalidation Box
  18. python numpy安装
  19. 拖拽TreeViewItem到OCX控件
  20. BZOJ2178: 圆的面积并(格林公式)

热门文章

  1. 初识jQuery 2013-09-26
  2. 安卓 Pickers(选择器)
  3. Android RecyclerView使用详解(一)
  4. WCF:百度百科
  5. LoadRunner参数数组
  6. Modularity模块化
  7. OTG_FS_ID功能及引申
  8. HTML5_布局and音视频
  9. DOM笔记(八):JavaScript执行环境和垃圾收集
  10. SAS、R以及SPSS的比较__统计语言大战