两张表是父级和子级的关系,部门信息表和员工信息表,员工表有部门idtry
{
tree = new TreeItem();
string sql = "select e.id, e.name,s.seid, s.sename from employee e,section s where e.seid = s.seid"; DataTable dt = oct.getSelect(sql);//连表查询
//部门表去除重复
DataTable dtBm = dt.DefaultView.ToTable(true, "SENAME"); for (int i = 0; i < dtBm.Rows.Count; i++)
{
TreeItem tv = new TreeItem();
tv.text = dtBm.Rows[i]["SENAME"].ToString();
tv.id = dt.Rows[i]["SEID"].ToString(); DataRow[] drArr = dt.Select("SEID=" + tv.id + "");
DataTable dtNew = dt.Clone();
int j;
for (j = 0; j < drArr.Length; j++)
{
dtNew.ImportRow(drArr[j]);
}
for (int k = 0; k < j; k++)
{
TreeItem yg = new TreeItem();
yg.text = dtNew.Rows[k]["NAME"].ToString();
yg.id = dtNew.Rows[k]["ID"].ToString();
tv.children.Add(yg);
//yg.parent = tv;
}
tree.children.Add(tv);
//tv.parent = tree;
}
// 把数据绑定到控件
treeViewMine.ItemsSource = tree.children;
}
这是没有用递归,求助怎么用递归绑定
{
tree = new TreeItem();
string sql = "select e.id, e.name,s.seid, s.sename from employee e,section s where e.seid = s.seid"; DataTable dt = oct.getSelect(sql);//连表查询
//部门表去除重复
DataTable dtBm = dt.DefaultView.ToTable(true, "SENAME"); for (int i = 0; i < dtBm.Rows.Count; i++)
{
TreeItem tv = new TreeItem();
tv.text = dtBm.Rows[i]["SENAME"].ToString();
tv.id = dt.Rows[i]["SEID"].ToString(); DataRow[] drArr = dt.Select("SEID=" + tv.id + "");
DataTable dtNew = dt.Clone();
int j;
for (j = 0; j < drArr.Length; j++)
{
dtNew.ImportRow(drArr[j]);
}
for (int k = 0; k < j; k++)
{
TreeItem yg = new TreeItem();
yg.text = dtNew.Rows[k]["NAME"].ToString();
yg.id = dtNew.Rows[k]["ID"].ToString();
tv.children.Add(yg);
//yg.parent = tv;
}
tree.children.Add(tv);
//tv.parent = tree;
}
// 把数据绑定到控件
treeViewMine.ItemsSource = tree.children;
}
这是没有用递归,求助怎么用递归绑定
其次,如果绑定的话
<TreeView ItemsSource={Binding SourceCollection}>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Path=Children}">
<Grid>
<Lable Content="{Binding Name}"/>
</Grid>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>SourceCollection是你的顶级数据源集合,一般为ObservableCollection,集合中的数据有一个Children属性,一般也是ObservabelCollection,
那怎么递归呢,我不太会我的前台是这样的 <HierarchicalDataTemplate DataType="{x:Type local:TreeItem}" ItemsSource="{Binding Path=children}" >
<StackPanel Orientation="Horizontal" Margin="0,2,0,2" >
<CheckBox Focusable="False" IsChecked="{Binding IsChecked,Mode=TwoWay}" VerticalAlignment="Center" />
<Image VerticalAlignment="Center" Source="{Binding itemIcon}" ></Image>
<TextBlock VerticalAlignment="Center" Text="{Binding text}" ToolTip="{Binding text}" />
</StackPanel>
</HierarchicalDataTemplate>
之前看到过,是winfrom的,和wpf有一点出入,而且只有一张表
<Window x:Class="WpfApp3.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/up-compatibility/2006"
xmlns:local="clr-namespace:WpfApp3"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TreeView x:Name="tvTest" ItemsSource="{Binding SourceCollection}">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Children}">
<Grid>
<Label Content="{Binding Name}"/>
</Grid>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</Grid>
</Window> /// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public event PropertyChangedEventHandler PropertyChanged;
public MainWindow()
{
InitializeComponent();
DataContext = new ViewModel();
}
} public class ViewItemModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged; private string _name = "";
private ObservableCollection<ViewItemModel> _children = new ObservableCollection<ViewItemModel>(); public string Name
{
get
{
return _name;
}
set
{
_name = value;
if(PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("Name"));
}
}
} public ObservableCollection<ViewItemModel> Children
{
get { return _children; }
set
{
_children = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("Name"));
}
}
}
}
public class ViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public ObservableCollection<ViewItemModel> SourceCollection { get; set; } public ViewModel()
{
SourceCollection = new ObservableCollection<ViewItemModel>(); for (int i = 0; i < 3; i++)
{
ViewItemModel vim = new ViewItemModel();
vim.Name = "部门-" + i; for(int j = 0; j < 3; j++)
{
ViewItemModel childVim = new ViewItemModel();
childVim.Name = "员工-" + i.ToString() + "-" + j.ToString();
vim.Children.Add(childVim);
} SourceCollection.Add(vim);
}
}
}只要往每一层的Children集合中加入数据,就可以实现多层显示。
之前看到过,是winfrom的,和wpf有一点出入,而且只有一张表
这只是一个方向。我不清楚wpf和winform,如果控件都是绑定数据源的话,那应该也没什么问题。
至于多表,感觉只是链表查询的问题。