• 疑问:WPFToolkit中的DataGrid数据列为何会意外丢失?


    我有一个工程,要多次使用数据表格,每次使用的数据集的列可能不同,那么我就想到写一个UserControl公共控件来使用,将经常对数据集操作的通用的动作放到里面。UserControl中,DataGrid的具体定义如下:

    代码
    1 <dg:DataGrid DockPanel.Dock="Top" Name="dgData" ItemsSource="{Binding}" BorderThickness="0" AlternationCount="2" AutoGenerateColumns="True" ColumnHeaderStyle="{StaticResource dgHeaderStyle}"
    2 RowStyle="{StaticResource dgRowStyle}" CellStyle="{StaticResource dgCellStyle}" SelectionMode="Extended"
    3 SelectionUnit="FullRow" GridLinesVisibility="All" VerticalGridLinesBrush="DarkGray">


    然后在工程里使用这个包含DataGrid的定义好的UserControl,具体实现是使用C#代码创建的,没有在xaml文件中实现(其实效果一样),运行程序发现,DataGrid只可以正常呈现数据集一次,只要我把鼠标放到DataGrid的边框左边或数据单元中点击一下,数据列马上就消失了,数据也看不到了,我用一个信息框打开看到Items.Count>0,Columns.Count=0!

    操作截图如下:

    1)正常打开数据。

    2)打开数据之后鼠标在UserControl的DataGrid中点击。

    注意:不能点击DataGrid那个左边框(类似RowHeader),不然程序会崩溃,出现致命错误。错误信息如下:

    未处理 System.ArgumentOutOfRangeException
      Message="The given DisplayIndex is out of range.  DisplayIndex must be greater than or equal to 0 and less than Columns.Count.\r\n参数名: displayIndex\r\n实际值是 0。"
      Source="WPFToolkit"
      ParamName="displayIndex"
      StackTrace:
           在 Microsoft.Windows.Controls.DataGrid.ColumnFromDisplayIndex(Int32 displayIndex) 位置 C:\dd\WPF_1\src\wpf\src\ControlsPack\WPFToolkit\DataGrid\Microsoft\Windows\Controls\DataGrid.cs:行号 354

    。。。。

    很郁闷!

    3)然后数据列不见了,点击上方的Button按钮查看没有Column了。

    4)运行时动态创建的包含了DataGrid的UserControl就可以正常显示操作数据。

    5)在另外的程序中单独使用这个UserControl也是正常的。

    请各位精通WPF的高手帮忙!(程序方面,我使用了RibbonControl和WPFToolkit两个控件包,程序主窗口基承自RibbonWindow,但反复测试过,这个问题与窗体是否为标准Window无关,而且与DataGrid中是否使用了Style也无关。)

    (程序代码在这里:https://files.cnblogs.com/glowworm/GWControlLib%2bSQLEditor.rar

    谢谢!

  • 相关阅读:
    nextSibling VS nextElementSibling
    线程实现连续启动停,并在某一时间段内运行
    线程:安全终止与重启
    监控知识体系
    后台服务变慢解决方案
    Java泛型类型擦除以及类型擦除带来的问题
    常见的 CSRF、XSS、sql注入、DDOS流量攻击
    Spring对象类型——单例和多例
    一次线上OOM过程的排查
    深入浅出理解基于 Kafka 和 ZooKeeper 的分布式消息队列
  • 原文地址:https://www.cnblogs.com/glowworm/p/1753466.html
Copyright © 2020-2023  润新知