为啥 GridControl 在执行后会创建一个额外的列/空间?

Posted

技术标签:

【中文标题】为啥 GridControl 在执行后会创建一个额外的列/空间?【英文标题】:Why GridControl is creating an extra column/space after execution?为什么 GridControl 在执行后会创建一个额外的列/空间? 【发布时间】:2016-05-30 20:30:08 【问题描述】:

DevExpress UI 控件用于 Windows Presentation Foundation(或 WPF)应用程序,我正在尝试修复/改进它。

应用程序中的多个视图包括向用户显示某种数据的网格。网格在设计器中看起来很正常,正常我的意思是列数与所需的相同。然而,在应用程序执行后,每个视图中的每个 Grid 都会生成一个新的列/空间 - 空的不可点击且无用。

我玩弄了 Grid 的属性,但似乎无法修复它。 AutoGenerateColumns="None" 是为整个 Grid 设置的,并且在每一列的属性中没有任何可疑之处。我尝试查看 DevExpress 文档,但没有帮助,而且很耗时。他们提到了隐藏/显示东西是如何工作的,但不是自动生成的。

我怎样才能防止这种情况发生?

在编译器中查看:Here

执行后查看:Here

网格 XAML:

            <dxg:GridControl x:Name="sessionGrid" SelectedItem="Binding SelectedSession" ItemsSource="Binding Sessions" AutoGenerateColumns="None" Margin="0,10,0,0" SelectionMode="Row" Grid.Row="2" DesignTimeDataSourceRowCount="15" TouchDown="sessionGrid_TouchDown" MouseDown="sessionGrid_MouseDown" >
            <dxg:GridControl.Columns>
                <dxg:GridColumn x:Name="sessionNameColumn" Header="Name" FieldName="Name" AllowAutoFilter="False" AllowBestFit="True" AllowEditing="False"  AllowConditionalFormattingMenu="False" AllowGrouping="True" AllowMoving="True" MinWidth="5"/>

                <dxg:GridColumn x:Name="sessionTypeColumn" Header="Type" FieldName="Type" AllowAutoFilter="False"  AllowEditing="False"  AllowColumnFiltering="False" AllowConditionalFormattingMenu="False" SortOrder="Ascending" SortIndex="0">
                    <dxg:GridColumn.EditSettings>
                        <dxe:TextEditSettings HorizontalContentAlignment="Left"/>
                    </dxg:GridColumn.EditSettings>
                </dxg:GridColumn>
                <dxg:GridColumn x:Name="sessionToleranceColumn" Header="Tolerance" FieldName="ToleranceFormatted" AllowAutoFilter="False"  AllowEditing="False"  AllowColumnFiltering="False" AllowConditionalFormattingMenu="False"/>
                <dxg:GridColumn x:Name="sessionDateColumn" Header="Date Created" FieldName="DateCreated" AllowAutoFilter="False" AllowColumnFiltering="False" AllowConditionalFormattingMenu="False" AllowEditing="False" RoundDateTimeForColumnFilter="False">
                    <dxg:GridColumn.EditSettings>
                        <dxe:TextEditSettings DisplayFormat="G" />
                    </dxg:GridColumn.EditSettings>
                </dxg:GridColumn>
            </dxg:GridControl.Columns>

            <dxg:GridControl.View>
                <dxg:TableView x:Name="sessionTable" AllowPerPixelScrolling="True" AllowEditing="False" ShowIndicator="False" AutoWidth="True"  AllowColumnMoving="True" AllowResizing="True" AllowSorting="True" IsColumnMenuEnabled="True" EditorShowMode="MouseUpFocused" IndicatorWidth="70" IsGroupFooterMenuEnabled="False" PrintGroupFooters="False" ShowBandsPanel="False" AllowMasterDetail="False" ShowBandsInCustomizationForm="False" AllowColumnFiltering="False" ShowSearchPanelMode="Never" AllowMoveColumnToDropArea="False">
                    <dxg:TableView.ColumnMenuCustomizations>
                        <dxb:RemoveBarItemAndLinkAction ItemName="x:Static dxg:DefaultColumnMenuItemNamesBase.ColumnChooser" />
                    </dxg:TableView.ColumnMenuCustomizations>
                </dxg:TableView>
            </dxg:GridControl.View>
        </dxg:GridControl>

.

尝试:

Here 它说我需要输入 Width = '*' 但编译器不允许我输入它,无论是在 XAML 中还是在列属性中,所以我尝试对列 WidthMinWidth 进行硬编码,如上所述Here。但是,它仍然无法正常工作。错误是“无法将 System.Windows.GridLength 类型隐式转换为双精度”

        private void sessionGrid_Loaded(object sender, RoutedEventArgs e)
         
        foreach (DevExpress.Xpf.Grid.GridColumn gridColumn in sessionGrid.Columns)
        
        // Do something
        gridColumn.MinWidth = ActualWidth;
        gridColumn.Width = new GridLength(1, GridUnitType.Star);
        
    

【问题讨论】:

看起来你的最后一列不适合网格宽度 ***.com/questions/5028894/… 奇怪的是,它在设计器中看起来很正常,但一旦执行就会改变.. 【参考方案1】:

已通过调整和解锁主网格内网格控件的宽度来解决此问题。但是,我们找不到问题的确切模式/原因。因此,它是通过反复试验修复的。

【讨论】:

以上是关于为啥 GridControl 在执行后会创建一个额外的列/空间?的主要内容,如果未能解决你的问题,请参考以下文章

为啥在我第一次授予用户权限时会创建“GRANT USAGE”?

Django 为啥我应用迁移时会创建一个字段?

为啥会创建一个名为 Azure Blob 存储容器内文件夹名称的空文件?

为啥c ++ std::hash会创建一个仿函数结构并且可以在不每次创建结构的情况下调用它

为啥 React.createElement() 会创建一个对象?

如果键不存在,为啥 std::map operator[] 会创建一个对象?