使用 ItemsSource 填充的 DataGrid 无法排序,尽管 CanUserSortColumns="true"
DataGrid populated using ItemsSource not sortable despite CanUserSortColumns="true"
我有一个从数据库填充的数据网格,因此我可以查看和更改数据库。
但是,您无法通过单击 header 对列进行排序。当您单击它们时,什么也没有发生。我在 S.O 上看到了很多问题。像这样,我已经更改了很多 XMAL 并尝试了不同的方法,但似乎没有答案能为我解决这个问题。
这是我的 C#。
public Window1()
{
InitializeComponent();
LoadDataGrid();
}
private void LoadDataGrid()
{
TasksDataContext tasksDB = new TasksDataContext();
var tasks = (from p in tasksDB.LubeTasks select p);
MyDataGrid.ItemsSource = tasks;
}
这是我从教程中第一次尝试的 XMAL:
<grid:DataGrid Name="MyDataGrid" CanUserSortColumns="True">
<grid:DataGrid.Columns>
<grid:DataGridTextColumn Binding="{Binding Path=Number}"
Header="Number" CanUserSort="True" />
<grid:DataGridTextColumn Binding="{Binding Path=Description}"
Header="Description" CanUserSort="True"/>
</grid:DataGrid.Columns>
</grid:DataGrid>
我也尝试添加 SortMemberPath="Number.code"
或 SortMemberPath="Number"
之类的东西,并尝试使用不同的标签,但它仍然无法排序。
我也在另一个教程 here 中尝试过这样的结构,但它也不起作用。
<grid:DataGrid Name="MyDataGrid" CanUserSortColumns="True" ItemsSource="{Binding}">
<grid:DataGrid.Columns>
<grid:DataGridTemplateColumn SortMemberPath="Number" CanUserSort="true">
<grid:DataGridTemplateColumn.CellTemplate >
<DataTemplate>
<TextBlock>
<TextBlock.Text>
<Binding Path="Number"/>
</TextBlock.Text>
</TextBlock>
</DataTemplate>
</grid:DataGridTemplateColumn.CellTemplate>
</grid:DataGridTemplateColumn>
<grid:DataGridTemplateColumn SortMemberPath="Description" CanUserSort="true">
<grid:DataGridTemplateColumn.CellTemplate >
<DataTemplate>
<TextBlock>
<TextBlock.Text>
<Binding Path="Description" />
</TextBlock.Text>
</TextBlock>
</DataTemplate>
</grid:DataGridTemplateColumn.CellTemplate>
</grid:DataGridTemplateColumn>
</grid:DataGrid.Columns>
</grid:DataGrid>
我填充数据网格的方式有问题吗?我试过使用 MyDataGrid.DataContext = tasks;
但如果我这样做,我似乎根本无法填写数据网格。
非常感谢任何建议。
您需要将来自数据库的 LINQ 结果放在支持排序的结构中。
试试这个:
TasksDataContext tasksDB = new TasksDataContext();
var tasks = (from p in tasksDB.LubeTasks select p).ToList();
MyDataGrid.ItemsSource = tasks;
我有一个从数据库填充的数据网格,因此我可以查看和更改数据库。
但是,您无法通过单击 header 对列进行排序。当您单击它们时,什么也没有发生。我在 S.O 上看到了很多问题。像这样,我已经更改了很多 XMAL 并尝试了不同的方法,但似乎没有答案能为我解决这个问题。
这是我的 C#。
public Window1()
{
InitializeComponent();
LoadDataGrid();
}
private void LoadDataGrid()
{
TasksDataContext tasksDB = new TasksDataContext();
var tasks = (from p in tasksDB.LubeTasks select p);
MyDataGrid.ItemsSource = tasks;
}
这是我从教程中第一次尝试的 XMAL:
<grid:DataGrid Name="MyDataGrid" CanUserSortColumns="True">
<grid:DataGrid.Columns>
<grid:DataGridTextColumn Binding="{Binding Path=Number}"
Header="Number" CanUserSort="True" />
<grid:DataGridTextColumn Binding="{Binding Path=Description}"
Header="Description" CanUserSort="True"/>
</grid:DataGrid.Columns>
</grid:DataGrid>
我也尝试添加 SortMemberPath="Number.code"
或 SortMemberPath="Number"
之类的东西,并尝试使用不同的标签,但它仍然无法排序。
我也在另一个教程 here 中尝试过这样的结构,但它也不起作用。
<grid:DataGrid Name="MyDataGrid" CanUserSortColumns="True" ItemsSource="{Binding}">
<grid:DataGrid.Columns>
<grid:DataGridTemplateColumn SortMemberPath="Number" CanUserSort="true">
<grid:DataGridTemplateColumn.CellTemplate >
<DataTemplate>
<TextBlock>
<TextBlock.Text>
<Binding Path="Number"/>
</TextBlock.Text>
</TextBlock>
</DataTemplate>
</grid:DataGridTemplateColumn.CellTemplate>
</grid:DataGridTemplateColumn>
<grid:DataGridTemplateColumn SortMemberPath="Description" CanUserSort="true">
<grid:DataGridTemplateColumn.CellTemplate >
<DataTemplate>
<TextBlock>
<TextBlock.Text>
<Binding Path="Description" />
</TextBlock.Text>
</TextBlock>
</DataTemplate>
</grid:DataGridTemplateColumn.CellTemplate>
</grid:DataGridTemplateColumn>
</grid:DataGrid.Columns>
</grid:DataGrid>
我填充数据网格的方式有问题吗?我试过使用 MyDataGrid.DataContext = tasks;
但如果我这样做,我似乎根本无法填写数据网格。
非常感谢任何建议。
您需要将来自数据库的 LINQ 结果放在支持排序的结构中。
试试这个:
TasksDataContext tasksDB = new TasksDataContext();
var tasks = (from p in tasksDB.LubeTasks select p).ToList();
MyDataGrid.ItemsSource = tasks;