<UserControl x:Class="cldd.WPFCompanyTree"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:cldd"
mc:Ignorable="d"
>
<StackPanel>
<StackPanel>
<TreeView x:Name="treeView1" Margin="5" VerticalAlignment="Center" HorizontalAlignment="Center">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:CompanyNodeItem}" ItemsSource="{Binding Children}">
<TextBlock VerticalAlignment="Center" Text="{Binding CompanyName}" TextWrapping="Wrap" MaxWidth="200" ></TextBlock>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</StackPanel>
<StackPanel Margin="5" HorizontalAlignment="Center" VerticalAlignment="Center">
<Button Content="选择" Width="70" Click="Button_Click_1"/>
</StackPanel>
</StackPanel>
</UserControl>
public partial class WPFCompanyTree : UserControl
{
/// <summary>
/// 获取选择列的Company对象
/// </summary>
public static CompanyNodeItem SelectCompanyNode { private set; get; }
private List<CompanyNodeItem> listNode;
public Action SelectButtonAction { set; get; }
public WPFCompanyTree()
{
InitializeComponent();
InitDbData();
treeView1.ItemsSource = InitTreeData();
}
private void InitDbData()
{
DataTable dt = SqlClass.GetTable(@"SELECT [CID]
,[CName]
,[CParentID]
FROM [jq.666gps.com].[dbo].[XFJCompany]");
int count = dt.Rows.Count;
listNode = new List<CompanyNodeItem>();
for (int i = 0; i < count; i++)
{
listNode.Add(new CompanyNodeItem() { CompanyId = Convert.ToInt32(dt.Rows[i][0]), CompanyName = dt.Rows[i][1].ToString(), ParentId = Convert.ToInt32(dt.Rows[i][2]) });
}
}
private List<CompanyNodeItem> InitTreeData()
{
List<CompanyNodeItem> nodes = new List<CompanyNodeItem>();
listNode.ForEach(s =>
{
if (s.ParentId == 0)
nodes.Add(s);
else
{
CompanyNodeItem temp = NextFindNode(listNode, s.ParentId);
if (temp != null)
{
temp.Children.Add(s);
}
}
});
return nodes;
}
private CompanyNodeItem NextFindNode(List<CompanyNodeItem> list, int id)
{
if (list == null)
return null;
foreach (CompanyNodeItem node in list)
{
if (node.CompanyId == id)
return node;
CompanyNodeItem temp = NextFindNode(node.Children, id);
if (temp != null)
return temp;
}
return null;
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
SelectCompanyNode = (treeView1.SelectedItem as CompanyNodeItem);
if (SelectCompanyNode == null)
{
MessageBox.Show("请选择单位");
return;
}
if (SelectButtonAction != null)
SelectButtonAction();
}
}
public class CompanyNodeItem
{
public int CompanyId { set; get; }
public string CompanyName { set; get; }
public int ParentId { set; get; }
public List<CompanyNodeItem> Children { set; get; }
public CompanyNodeItem()
{
Children = new List<CompanyNodeItem>();
}
}