最近用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提供候选等。

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

  1. datagrid 根据指定参数重新加载数据

    $('#statisticalRecordList').datagrid('reload',{ start_date:$('#dd1').datebox('getValue'), end_date: ...

  2. vue页面加载前显示{{代码}}的原因及解决办法

    进入正题,简单说说自己对html中出现{{}}的原因及解决办法: 这样写的话,就会出现{{}}一闪的情况: 原因:html的加载顺序: 解析html结构 -> 加载外部脚本和样式表文件 -> ...

  3. 【转】android加载大量图片内存溢出的三种解决办法

    方法一: 在从网络或本地加载图片的时候,只加载缩略图. /** * 按照路径加载图片 * @param path 图片资源的存放路径 * @param scalSize 缩小的倍数 * @return ...

  4. Github网站加载不完全,响应超时,解决办法

    Github网站加载缓慢信息不全解决方法 Github是一个代码托管平台和开发者社区,开发者可以在Github上创建自己的开源项目并与其他开发者协作编码.毫不夸张地说,高效利用Github是一个优秀的 ...

  5. 频繁加载、删除swf造成flash崩溃解决办法

    最近在项目中遇到flash崩溃问题,经分析,都是在swfobject.embedSWF这一步卡死,页面及flash均无反应.   造成此问题的场景是,在同一根节点上频繁清空节点.调用swfobject ...

  6. vue+elementui 开发的网站IE浏览器加载白屏(不兼容)解决办法

    1.需要检查一下 export default { name: 'aa',-------vue的name是不可以重复的-----这个是决定性原因 data() { return {} } 2.变量声明 ...

  7. 解决easyui datagrid加载数据时,checkbox列没有根据checkbox的值来确定是否选中

    背景:   昨天帮朋友做一个easyui datagrid的小实例时,才发现easyui datagrid的checkbox列,没有根据值为true或false来选中checkbox,当时感觉太让人失 ...

  8. Flutter 初始化数据完成后再加载页面

    一.初始化数据完成后再加载数据 1.为了达成这个目标尝试了多种方法总是失败 在Init 和didChangeDependencies 初始化数据过也不行 @override void didChang ...

  9. C# superGridControl 样式设置、加载数据、获取数据

    样式设置 superGridControl1.PrimaryGrid.SelectionGranularity = SelectionGranularity.Cell; //设置选中样式 单元格.整列 ...

随机推荐

  1. 格式化输出星期几 C#

    string Today = DateTime.Now.ToString("yyyy-MM-dd dddd",new System.Globalization.CultureInf ...

  2. 字符串string

    1.字符串获取类.封装检测数字的方法 var str = '前端开发'; //alert(str.length); //alert(str.charAt()); //没有参数 取得索引是0 结果是:前 ...

  3. Android中弹出输入法界面不影响app界面布局

    默认情况下,输入法弹出的时候,原来的view会被挤扁.有些应用不想被挤,它们可以接受被输入法view覆盖在上面.这时候需要在AndroidManifest.xml acitivty里面加上一句: an ...

  4. Nginx实现多个站点使用一个端口(配置Nginx的虚拟主机)

    Nginx 是一个轻量级高性能的 Web 服务器, 并发处理能力强, 消耗资源小, 无论是静态服务器还是网站, Nginx 表现更加出色, 作为 Apache 的补充和替代使用率越来越高,目前很多大型 ...

  5. ERROR 1130: Host '192.168.1.3' is not allowed to connect to this MySQL ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY'

    use mysql mysql> select host, user from user; 将相应用户数据表中的host字段改成'%': update user set host='%' whe ...

  6. php 采用fpdf乱码问题

    步骤1.首先下载fpdf http://www.fpdf.org/en/download.php(本人用的是1.7版本) 步骤2.下载中文包 http://www.fpdf.org/download/ ...

  7. 嵌入式 hi3518平台获取网络环境中的ip、netmask、broadcast等信息

    <span style="font-family:Courier New;"> /********************************** (C) COPY ...

  8. SQL语句构建器类

    问题 Java程序员面对的最痛苦的事情之一就是在Java代码中嵌入SQL语句.这么来做通常是由于SQL语句需要动态来生成-否则可以将它们放到外部文件或者存储过程中.正如你已经看到的那样,MyBatis ...

  9. Gridview点击Edit编辑未update和cancel后的问题

    在使用GridView时无意中发现一个问题: 第一步:点击列表中的某一行的"Edit"(例如第一行数据), 第二步:点击下一页,于是在下一页数据加载完成后就会看到对应的行(与第一步 ...

  10. 使用ncc分析代码

    1 ncc是一个编译器, 用于输出程序的一些调用信息等, 可以查看函数调用关系, 支持函数指针, 查看数据结构和代码. 可以用来分析和理解代码. “" ... with ncc, in le ...