【问题标题】:Column Reorder in Datagrid数据网格中的列重新排序
【发布时间】:2023-03-29 22:18:02
【问题描述】:

我使用 Datagrid 在 Silverlight 中显示记录。我使用 Itemsource 来绑定 DataGrid 中的数据。它工作正常。

我形成了类似的网格,

Grid x:Name="LayoutRoot" Background="White" Margin="-157,-45,-318,0">

       <sdk:DataGrid HorizontalAlignment="Left" Height="242.195"                                        
                     Margin="93.282,26.764,0,0" VerticalAlignment="Top" 
                     Width="496.08" RenderTransformOrigin="0.5,0.5"
                     UseLayoutRounding="False" d:LayoutRounding="Auto" Name="showrecordgrid" >

           <sdk:DataGrid.Columns>
                <sdk:DataGridTemplateColumn>
                    <sdk:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Button >Edit</Button>
                        </DataTemplate>
                    </sdk:DataGridTemplateColumn.CellTemplate>
                </sdk:DataGridTemplateColumn>

                <sdk:DataGridTemplateColumn>
                    <sdk:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <Button >Delete</Button>
                        </DataTemplate>
                    </sdk:DataGridTemplateColumn.CellTemplate>
                </sdk:DataGridTemplateColumn>
            </sdk:DataGrid.Columns>

            <sdk:DataGrid.RenderTransform>
                <CompositeTransform Rotation="-0.566"/>
            </sdk:DataGrid.RenderTransform>


        </sdk:DataGrid>

按钮将显示在列的开头。我需要重新排序列末尾的按钮吗?

参考截图,

【问题讨论】:

  • EditDelete 列在哪里定义?
  • @Bahman_Aries 请现在检查我的 xaml 代码。我在编辑和删除按钮位置中错误地提到了列名。
  • 如果我的回答没有解决你的问题,请详细说明。
  • @Bahman_Aries 我使用上面的代码部分现在按钮将显示在 Column1 和 C2 之间
  • @Bahman_Aries 我更改了显示区域中的所有内容,但按钮无法显示在最后

标签: c# wpf silverlight datagrid


【解决方案1】:

您可以使用AutoGeneratedColumns 事件对列进行重新排序。首先为您的列设置一些标题名称,如下所示:

   <sdk:DataGrid ItemsSource="{Binding YourItems}" AutoGeneratedColumns="DataGrid_AutoGeneratedColumns" Name="showrecordgrid" ...>

       <sdk:DataGrid.Columns>
            <sdk:DataGridTemplateColumn Header="Edit">
                <sdk:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Button >Edit</Button>
                    </DataTemplate>
                </sdk:DataGridTemplateColumn.CellTemplate>
            </sdk:DataGridTemplateColumn>

            <sdk:DataGridTemplateColumn Header="Delete">
                <sdk:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Button >Delete</Button>
                    </DataTemplate>
                </sdk:DataGridTemplateColumn.CellTemplate>
            </sdk:DataGridTemplateColumn>
        </sdk:DataGrid.Columns>

然后通过标题找到这些列并将它们重新排序为最后一个:

    private void DataGrid_AutoGeneratedColumns(object sender, EventArgs e)
    {
        var grid = (DataGrid)sender;
        foreach (var item in grid.Columns)
        {
            if (item.Header.ToString() == "Edit")
            {
                item.DisplayIndex = grid.Columns.Count - 1;
            }
            else if (item.Header.ToString() == "Delete")
            {
                item.DisplayIndex = grid.Columns.Count - 2;
            }
        }
    } 

【讨论】:

  • 我现在使用上面的代码部分,按钮将显示在 Column1 和 C2 之间
  • 列定义的顺序和设置各自的DisplayIndex 很重要。如果您在Delete 列之前定义了Edit 列,则必须首先设置Edit 列的DisplayIndex。如果您完全按照我在回答中所写的方式执行此操作,那将起作用。
  • 您是否更改了列定义的顺序或item.DisplayIndex = grid.Columns.Count - 1;item.DisplayIndex = grid.Columns.Count - 2; 的顺序?
猜你喜欢
  • 2012-08-11
  • 1970-01-01
  • 2015-03-25
  • 2011-03-21
  • 2011-10-03
  • 2010-12-30
  • 2020-02-28
  • 2023-03-10
  • 1970-01-01
相关资源
最近更新 更多