【问题标题】:DataGrid strange behaviour for autogenerated columns order自动生成的列顺序的 DataGrid 奇怪行为
【发布时间】:2017-04-23 11:52:35
【问题描述】:

我在项目中使用绑定到可观察集合的数据网格,但自动生成的列顺序存在问题。

在我向绑定类添加新属性之前一切正常,现在在第三列中生成 Name 属性...

这是课程:

[StructLayout(LayoutKind.Sequential)]
[XmlRoot("ConfData")]
public class XapDataVals : XapBaseClass, INotifyPropertyChanged
{
    [XmlAttribute]
    public string Name { get; set; } = "";

    [XmlAttribute]
    public float Min { get; set; } = 0;

    [XmlAttribute]
    public float Max { get; set; } = 0;

    [XmlAttribute]
    public float ALVal { get; set; } = 0;

    /* more properties */

    public event PropertyChangedEventHandler PropertyChanged;
    protected void PropertyChangedNotify(string propertyName)
    {
        if (this.PropertyChanged != null)
        {
            this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    public XapDataVals()
    {

    }
}

Datagrid 的 AutoGeneratinColumn 事件函数中的 order 没有什么特别之处,只是样式应用。

datagrid 的 XAML 代码:

<DataGrid x:Name="DgDataTable" Grid.Row="0" Grid.ColumnSpan="2" Margin="10,10,10,0" FrozenColumnCount="1" AutoGenerateColumns="true" HeadersVisibility="All" RowHeaderWidth="20" GridLinesVisibility="Horizontal"
              Style="{StaticResource AzureDataGrid}"  LoadingRow="dgDataTable_LoadingRow" AlternatingRowBackground="{DynamicResource {x:Static SystemColors.GradientActiveCaptionBrushKey}}" 
              AutoGeneratingColumn="DgDataTable_AutoGeneratingColumn" CellStyle="{StaticResource CommonCell}" CurrentCellChanged="DgDataTable_CurrentCellChanged" PreviewMouseLeftButtonDown="DgDataTable_PreviewMouseLeftButtonDown" 
              Drop="DgDataTable_Drop" AllowDrop="True" IsManipulationEnabled="True" PreviewMouseRightButtonDown="DgDataTable_PreviewMouseRightButtonDown" CanUserSortColumns="False">
        <DataGrid.RowHeaderStyle>
            <Style TargetType="DataGridRowHeader">
                <Setter Property="FontSize" Value="10"/>
                <Setter Property="Background" Value="LightCyan"/>
                <Setter Property="HorizontalContentAlignment" Value="Center"/>
            </Style>
        </DataGrid.RowHeaderStyle>
        <DataGrid.RowStyle>
            <Style TargetType="DataGridRow">
                <Style.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter Property="BorderBrush" Value="Blue" />
                        <Setter Property="BorderThickness" Value="1" />
                    </Trigger>
                </Style.Triggers>
                <Style.Resources>
                    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
                    <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Blue" />
                </Style.Resources>
            </Style>
        </DataGrid.RowStyle>
        <DataGrid.RowValidationRules>
            <DataErrorValidationRule ValidatesOnTargetUpdated="True" ValidationStep="UpdatedValue" />
        </DataGrid.RowValidationRules>
    </DataGrid>

以及生成的网格顺序:

我可以更改什么以使名称列再次显示在第一个位置?

感谢您的帮助。

【问题讨论】:

    标签: c# wpf datagrid


    【解决方案1】:

    请读入DataGrid.AutoGeneratedColumns Event

    <sdk:DataGrid x:Name="yourcolorfulDatagrid"
            AutoGenerateColumns="True"
            AutoGeneratingColumn="yourcolorfulDatagrid_AutoGeneratingColumn"/>
    

    然后是事件:

    private void yourcolorfulDatagrid_AutoGeneratedColumns(object sender, EventArgs e)
    {
            yourcolorfulDatagrid_.Columns.FirstOrDefault(x => x.Header.ToString() == "Name").DisplayIndex = 0;
    }
    

    【讨论】:

    • 这是您在 Windows 窗体应用程序中的操作方式 -> How to: Change the Order of Columns in the Windows Forms DataGridView Control
    • 我还有一个问题:当网格的窗口对于数据来说太小时,单击网格的滑块会被网格的行占用。在这种情况下,如何让网格的行忽略点击事件?
    • 请用图片解释->为此打开一个新问题。
    • 我在另一篇文章中找到了答案,我使用 VisualTreeHelper.GetParent 来获取被点击的依赖对象的类型。数据网格边框点击被一行捕获,
    猜你喜欢
    • 2014-03-12
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 2013-09-15
    • 2020-10-06
    • 1970-01-01
    • 2011-04-04
    • 1970-01-01
    相关资源
    最近更新 更多