1、数据库结构
每级分类递增两位数字,这样,每级分类的数目限定在100个之间,
分类方法主要为编码法;
示例:
一级分类:01,02,03
二级分类:0101,0102,0103,0201,0202........
三级分类:010101,010102,010103,010104..........
数据库查询时使用 like '01%'就可得到一级分类01下的所有子分类,非常方便!
如果要列出所有分类的树型结构,只需用一条语句select * from pro_class order by code,再稍微处理一下就可。(其中,pro_class为产品分类表,code为类别编码)。
https://blog.csdn.net/zhangpengyu321/article/details/12871307
2、数据库查询
public static DataTable GetSubjectData()
{
string sql = string.Format(@"SELECT * FROM Sys_Subject t order by classcode");
DataTable dt = Global.csrSQLite.dtQuery(sql);
return dt;
}
3、Xaml
<TreeView x:Name="treeView" Grid.Row="2" Grid.Column="0" Width="400" Margin="10" HorizontalAlignment="Left">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type model:PropertyNodeItem}" ItemsSource="{Binding Path=Children}">
<StackPanel Orientation="Horizontal">
<Image Source="{Binding Icon}" Width="20"/>
<TextBlock Text="{Binding classname}"/>
<Image Source="{Binding EditIcon}" Width="20"/>
<StackPanel.ToolTip>
<TextBlock Text="{Binding Name}"/>
</StackPanel.ToolTip>
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
4、后台
private void ShowTreeView()
{
List<SubjectNodeItem> itemList = new List<SubjectNodeItem>();
DataTable dt = SubjectService.GetSubjectData();
if (dt == null || dt.Rows.Count == 0)
{
return;
}
foreach (DataRow dr in dt.Rows)
{
SubjectNodeItem item = GetTreeItem(itemList, dr["parent"].ToString());
SubjectNodeItem node1 = new SubjectNodeItem();
node1.classname = dr["classname"].ToString();
node1.classcode = dr["classcode"].ToString();
node1.parent = dr["parent"].ToString();
node1.layer = dr["layer"].ToString();
node1.Children = new List<SubjectNodeItem>();
if (item != null)
{
item.Children.Add(node1);
}
else
{
itemList.Add(node1);
}
}
treeView.ItemsSource = itemList;
}
/// <summary>
/// 递归获取父类
/// </summary>
/// <param name="members"></param>
/// <param name="m"></param>
/// <returns></returns>
public SubjectNodeItem GetTreeItem(List<SubjectNodeItem> members, string parent)
{
SubjectNodeItem result = members.Find(x => x.classcode == parent);
if (result == null && members.Count != 0)
{
for (int i = 0; i < members.Count; i++)
{
result = GetTreeItem(members[i].Children, parent);
if (result != null)
{
return result;
}
}
}
return result;
}
5、效果