DataGrid 进行不必要的重新排列
Posted
技术标签:
【中文标题】DataGrid 进行不必要的重新排列【英文标题】:DataGrid doing unwanted rearranging 【发布时间】:2013-06-15 05:29:31 【问题描述】:当我不想让 WPF DataGrid
重新排列我的行时,我遇到了麻烦。
步骤:
-
应用分组
将
DataGrid
按组内重复的列排序
更改不在排序列中的单元格
观察行重新排序,将已编辑的行移动到在其排序列中具有匹配值的行集的底部
示例(注意按姓氏排序):
FirstName | LastName ^ | Amount
----------+------------+---------
Group:Flinstone
Fred | Flinstone | 42
Wilma | Flinstone | 22
Pebbles | Flinstone | 28
Dino | Flinstone | 64
将 Wilma 的数量从 22 更改为 18 将导致 DataGrid 重新排列如下:
FirstName | LastName ^ | Amount
----------+------------+---------
Group:Flinstone
Fred | Flinstone | 42
Pebbles | Flinstone | 28
Dino | Flinstone | 64
Wilma | Flinstone | 18
如何阻止DataGrid
像这样重新排列行?
注意:如果 DataGrid
没有应用任何分组,则不会发生不需要的重新排序。
这是我正在使用的代码:
视图模型:
public class MainViewModel
public ObservableCollection<Item> Items get; set;
public ListCollectionView ItemsView get; set;
public MainViewModel()
Items = new ObservableCollection<Item>();
Items.Add(new Item("Fred", "Flinstone", 42));
Items.Add(new Item("Wilma", "Flinstone", 22));
Items.Add(new Item("Pebbles", "Flinstone", 52));
Items.Add(new Item("Dino", "Flinstone", 52));
Items.Add(new Item("Barney", "Rubble", 32));
Items.Add(new Item("Betty", "Rubble", 62));
Items.Add(new Item("BamBam", "Rubble", 42));
Items.Add(new Item("George", "Jetson", 22));
Items.Add(new Item("Jane", "Jetson", 52));
Items.Add(new Item("Judy", "Jetson", 32));
Items.Add(new Item("Elroy", "Jetson", 62));
Items.Add(new Item("Astro", "Jetson", 42));
ItemsView = new ListCollectionView(Items);
ItemsView.GroupDescriptions.Add(new PropertyGroupDescription("LastName"));
查看:
<DataGrid
ItemsSource="Binding ItemsView">
<DataGrid.GroupStyle>
<GroupStyle>
<GroupStyle.ContainerStyle>
<Style TargetType="x:Type GroupItem">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="x:Type GroupItem">
<StackPanel>
<TextBlock Text="Binding Path=Name" />
<ItemsPresenter />
</StackPanel>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</GroupStyle.ContainerStyle>
</GroupStyle>
</DataGrid.GroupStyle>
</DataGrid>
型号:
public class Item
public string FirstName get; set;
public string LastName get; set;
public decimal Amount get; set;
public Item(string firstName, string lastName, decimal amount)
FirstName = firstName;
LastName = lastName;
Amount = amount;
【问题讨论】:
你能显示你进行更改的代码吗(威尔玛的金额从 22 到 18)? @DrDev 我通过 UI 而不是代码来更改 Wilma 的金额。 【参考方案1】:这不是最好的解决方案,但过去我通过对数据源中的数据进行排序来规避这个问题,而不是在 DataGridView 中。我从this forum 学到了如何做到这一点。 (我总是收藏有用的编码技巧)
我希望这就是你要找的东西!
编辑:底部的倒数第二个帖子是实际有效的。
【讨论】:
您能否总结一下链接中找到的解决方案?寻找更多信息时,链接非常有用,但on their own they are not good answers。【参考方案2】:您可以使用附加属性覆盖特定列的默认排序行为(即使单击列标题),这应该可以解决您的问题。使用此解决方案,单击标题将应用您的自定义排序顺序,无论基础数据如何更改,该顺序都应保持“活动”。
https://***.com/a/18218963/2115261
【讨论】:
以上是关于DataGrid 进行不必要的重新排列的主要内容,如果未能解决你的问题,请参考以下文章
easyui------设置datagrid('getEditor')时焦点问题