WPF的DataGrid绑定ItemsSource后第一次加载数据有个别列移位的解决办法_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > WPF的DataGrid绑定ItemsSource后第一次加载数据有个别列移位的解决办法

WPF的DataGrid绑定ItemsSource后第一次加载数据有个别列移位的解决办法

 2013/11/30 15:18:57  热卡  博客园  我要评论(0)
  • 摘要:最近用WPF的DataGrid的时候,发现一个很弱智的问题,DataGrid的ItemsSource是绑定了一个属性:然后取数给这个集合赋值的时候,第一次赋值,就会出现列移位起初还以为是显卡的问题,结果今天来集成显卡的电脑上也一样出现,具体原因不详,以下是几种解决办法:1.(首选,有效果)DataGrid的RowHeaderWidth="0",必须赋值为0,不能不赋值,也不能赋其他值。2.(有效果)绑定的源一开始就要赋值,即至少要有一行数据。3.(效果不一,有的地方有效有的地方无效)不用绑定
  • 标签:解决办法 解决 item 数据 tag SSO

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

  

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

  

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

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

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

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

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

 

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

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

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

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

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

  缺陷:

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

  2.一开始UI的数据区域什么都没有,一片空白。

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

  b)绑定集合的好处

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

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

  3.一开始就会有列头。

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

  缺陷

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

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

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

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

 

2013-11-30 14:19:15 发布于博客园,转载请注明出处。

发表评论
用户名: 匿名