C# 更改数据网格中列的顺序
我想创建一些类似于可重用控件的东西 我已将名为MyDataGrid.xaml的页面添加到我的项目(WPFAApplication2)的根目录中。我已将根元素从Page更改为DataGrid,并在其中添加了一列。您可以在下面的xaml中看到这些更改:C# 更改数据网格中列的顺序,c#,wpf,xaml,datagrid,C#,Wpf,Xaml,Datagrid,我想创建一些类似于可重用控件的东西 我已将名为MyDataGrid.xaml的页面添加到我的项目(WPFAApplication2)的根目录中。我已将根元素从Page更改为DataGrid,并在其中添加了一列。您可以在下面的xaml中看到这些更改: <DataGrid x:Class="WpfApplication2.MyDataGrid" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
<DataGrid x:Class="WpfApplication2.MyDataGrid"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="300" Width="300">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Delete">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="X" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
现在我已经默认提供了MainWindow.xaml。我将此可重用控件添加到MainWindow.xaml中,并添加了一些列,如下所示:
<Window x:Class="WpfApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Self="clr-namespace:WpfApplication2"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Self:MyDataGrid>
<Self:MyDataGrid.Columns>
<DataGridTextColumn Header="Name" />
<DataGridTextColumn Header="Age" />
<DataGridTextColumn Header="Class" />
<DataGridTextColumn Header="School" />
</Self:MyDataGrid.Columns>
</Self:MyDataGrid>
</Grid>
</Window>
我的问题:
当我运行程序时,列的顺序如下:
删除年龄班学校的名称
在上述列中,默认情况下提供Delete列,其他列在MainWindow.xmal中声明
现在,我想更改列的顺序,使默认列显示在DataGrid的末尾,如下所示:
Name Age Class School Delete首先,这不是创建可重用控件的方式。您应该定义一个仅继承到
DataGrid
的类,并对自定义控件使用style
您构建可重用控件的方式总是将第一列作为删除插入
为了修复您的问题,我将我的Delete列
定义为一个资源
<DataGrid x:Class="WindowsApplication1.Blah"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="300" Width="300">
<DataGrid.Resources>
<DataGridTemplateColumn Header="Delete" x:Key="DeleteColumn">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="X" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Header="Name" />
<DataGridTextColumn Header="Age" />
<DataGridTextColumn Header="Class" />
<DataGridTextColumn Header="School" />
</DataGrid.Columns>
</DataGrid>
现在,我们将始终在末尾添加删除列
。谢谢。在我看了你的答案之后,我已经用另一种方式做了。但是想法是一样的&我从你的回答中得到了这个想法。非常感谢你。
<DataGrid x:Class="WindowsApplication1.Blah"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="300" Width="300">
<DataGrid.Resources>
<DataGridTemplateColumn Header="Delete" x:Key="DeleteColumn">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="X" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTextColumn Header="Name" />
<DataGridTextColumn Header="Age" />
<DataGridTextColumn Header="Class" />
<DataGridTextColumn Header="School" />
</DataGrid.Columns>
</DataGrid>
public partial class Blah : DataGrid
{
public Blah()
{
InitializeComponent();
this.Loaded += OnLoaded;
}
private void OnLoaded(object sender, RoutedEventArgs routedEventArgs)
{
var templateColumn = this.Resources["DeleteColumn"] as DataGridTemplateColumn;
this.Columns.Add(templateColumn);
}
}