WPF多表关联数据绑定

简介: Northwind数据库的三个表之间依次有一对多关系:  Customers-Orders-Order Details  要想在TreeView上表现这种关系,就需要HierarchicalDataTemplate.
Northwind数据库的三个表之间依次有一对多关系: 
Customers-Orders-Order Details 

要想在TreeView上表现这种关系,就需要HierarchicalDataTemplate. 

<Grid> 
  <Grid.Resources> 
  <DataTemplate x:Key="detailTemplate"> 
  <Grid> 
  <Grid.ColumnDefinitions> <ColumnDefinition Width="100" /> 
  <ColumnDefinition Width="100" /> 
  <ColumnDefinition Width="100" /> 
  </Grid.ColumnDefinitions> 
  <TextBlock Grid.Column="0" Text="{Binding UnitPrice}" /> 
  <TextBlock Grid.Column="1" Text="{Binding Quantity}" /> 
  <TextBlock Grid.Column="2" Text="{Binding Discount}" /> 
  </Grid> 
  </DataTemplate> 

  <HierarchicalDataTemplate x:Key="orderTemplate" ItemsSource="{Binding Orders2OrderDetails}" ItemTemplate ="{StaticResource detailTemplate}"> 
  <Grid> 
  <Grid.ColumnDefinitions> 
  <ColumnDefinition Width="100"></ColumnDefinition> 
  <ColumnDefinition Width="150"></ColumnDefinition> 
  <ColumnDefinition Width="150"></ColumnDefinition> 
  <ColumnDefinition Width="150"></ColumnDefinition> 
  <ColumnDefinition Width="100"></ColumnDefinition> 
  </Grid.ColumnDefinitions> 
  <TextBlock Grid.Column="0" Text="{Binding Path=OrderID}" /> 
  <TextBlock Grid.Column="1" Text="{Binding Path=OrderDate}" /> 
  <TextBlock Grid.Column="2" Text="{Binding Path=RequiredDate}" /> 
  <TextBlock Grid.Column="3" Text="{Binding Path=ShippedDate}" /> 
  <TextBlock Grid.Column="4" Text="{Binding Path=Freight}" /> 
  </Grid> 
  </HierarchicalDataTemplate> 

  <HierarchicalDataTemplate x:Key="treeTemplate" ItemsSource="{Binding Customers2Orders}" ItemTemplate="{StaticResource orderTemplate}"> 
  <TextBlock Text="{Binding CompanyName}" /> 
  </HierarchicalDataTemplate> 
</Grid.Resources> 

<TreeView Grid.Column="0" Name="myTreeView" ItemsSource="{Binding}" ItemTemplate="{StaticResource treeTemplate}"> 
</TreeView> 
</Grid> 
---------------------------

.cs部分  
 public partial class Window1 : System.Windows.Window 
 { 
 public DataSet ds; 
 public Window1() 
 { 
 InitializeComponent(); 

 ds = new DataSet();  

 SqlConnection conn = new SqlConnection(); 
 conn.ConnectionString = "server=(local);database=northwind;uid=sa;pwd="; 

 SqlCommand cmd = new SqlCommand(); 
 cmd.Connection = conn; 
  
 // Load Customers  
 SqlDataAdapter daCustomers = new SqlDataAdapter("select * from Customers",conn);  
 daCustomers.Fill(ds, "Customers"); 

 // Load Orders 
 SqlDataAdapter daOrders = new SqlDataAdapter("select * from Orders", conn); 
 daOrders.Fill(ds, "Orders"); 


 // Load OrderDetails 
 SqlDataAdapter daOrderDetails = new SqlDataAdapter("select * from [Order Details]", conn); 
 daOrderDetails.Fill(ds, "OrderDetails"); 

  

 ds.Relations.Add("Customers2Orders", ds.Tables["Customers"].Columns["CustomerID"], ds.Tables["Orders"].Columns["CustomerID"]); 
 ds.Relations.Add("Orders2OrderDetails", ds.Tables["Orders"].Columns["OrderID"], ds.Tables["OrderDetails"].Columns["OrderID"]); 

 myTreeView.DataContext = ds.Tables["Customers"]; 

 }   


相关文章
|
C#
WPF QuickStart系列之数据绑定(Data Binding)
原文:WPF QuickStart系列之数据绑定(Data Binding) 这篇博客将展示WPF DataBinding的内容。 首先看一下WPF Data Binding的概览, Binding Source可以是任意的CLR对象,或者XML文件等,Binding Target需要有依赖属性。
1168 0
|
C# 存储
WPF 实现跑马灯效果的Label控件,数据绑定方式实现
原文:WPF 实现跑马灯效果的Label控件,数据绑定方式实现 项目中需要使用数据绑定的方式实现跑马灯效果的Label,故重构了Label控件;具体代码如下 using System; using System.
2288 0
|
C#
WPF Label控件在数据绑定Content属性变化触发TargetUpdated事件简单实现类似TextChanged 事件效果
原文:WPF Label控件在数据绑定Content属性变化触发TargetUpdated事件简单实现类似TextChanged 事件效果   本以为Label也有TextChanged 事件,但在使用的时候却没找到,网友说Label的Content属性改变肯定是使用赋值操作,赋值的时候就可以对其进行相应的操作所以不需TextChanged 事件。
1951 0
|
C# 存储
【值转换器】 WPF中Image数据绑定Icon对象
原文:【值转换器】 WPF中Image数据绑定Icon对象        这是原来的代码:                这里的MenuIcon是string类型,MenuIcon = "/Image/Tux.ico"。
872 0
|
C# 容器
WPF: WrapPanel 容器的数据绑定(动态生成控件、遍历)
原文:WPF: WrapPanel 容器的数据绑定(动态生成控件、遍历) 问题:        有一些CheckBox需要作为选项添加到页面上,但是数目不定。
2352 0
|
C#
wpf Content数据绑定StringFormat起作用的原理和解决
原文:wpf Content数据绑定StringFormat起作用的原理和解决 03/29/2016 15:05:30 TextBox按照预期的,显示了完整的英文星期,但是Label的格式没有任何改变。
1484 0
|
C# 数据安全/隐私保护 索引
WPF入门:数据绑定
原文:WPF入门:数据绑定 上一篇我们将XAML大概做了个了解 ,这篇将继续学习WPF数据绑定的相关内容 数据源与控件的Binding Binding作为数据传送UI的通道,通过INotityPropertyChanged接口的PropertyChanged事件通知Binding数据属性...
1099 0
|
C#
通过数据绑定控制WPF动画启动,WPF动画开始
原文:通过数据绑定控制WPF动画启动,WPF动画开始 1.主要代码: ...
1524 0