WinUI 3中如何将分类Data Grid的父ID替换为父分类名称?
解决方案
1. 更新模型类
给IngredientCategory新增一个用于存储父分类名称的属性:
public class IngredientCategory { public int Id { get; set; } public string Name { get; set; } public int Parent { get; set; } // 新增属性,用于展示父分类名称 public string ParentName { get; set; } public IngredientCategory(){} public IngredientCategory(int id, string name, int parent) { Id = id; Name = name; Parent = parent; ParentName = string.Empty; } }
2. 拉取数据后匹配父分类名称
从SQLite获取所有分类后,通过字典映射快速匹配父ID对应的分类名称:
// 从数据库获取全部分类数据 var categories = GetAllIngredientCategoriesFromSqlite(); // 构建ID到分类名称的映射字典,提升查找效率 var categoryIdMap = categories.ToDictionary(c => c.Id, c => c.Name); // 遍历分类列表,为每个子分类设置父分类名称 foreach (var category in categories) { // 假设无父分类时Parent字段值为0,可根据实际数据库规则调整 if (category.Parent != 0 && categoryIdMap.ContainsKey(category.Parent)) { category.ParentName = categoryIdMap[category.Parent]; } else { category.ParentName = string.Empty; } } // 将处理后的列表绑定到DataGrid dataGrid.ItemsSource = categories;
3. 配置DataGrid列展示
在XAML中修改DataGrid的列绑定,替换原Parent字段为新增的ParentName:
<DataGrid x:Name="dataGrid" AutoGenerateColumns="False"> <DataGrid.Columns> <DataGridTextColumn Header="分类名称" Binding="{Binding Name}" /> <DataGridTextColumn Header="父分类" Binding="{Binding ParentName}" /> <!-- 其他列按需添加 --> </DataGrid.Columns> </DataGrid>
注意:如果数据库中无父分类时
Parent字段的默认值不是0,需要同步调整代码中的判断条件。
内容的提问来源于stack exchange,提问作者Nuvolari
相关产品推荐
相关产品推荐

