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"]; 

 }   


相关文章
通过Demo学WPF—数据绑定(一)
通过Demo学WPF—数据绑定(一)
146 1
|
开发框架 缓存 前端开发
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(11) -- 下拉列表的数据绑定以及自定义系统字典列表控件
循序渐进介绍基于CommunityToolkit.Mvvm 和HandyControl的WPF应用端开发(11) -- 下拉列表的数据绑定以及自定义系统字典列表控件
|
存储 开发框架 .NET
通过Demo学WPF—数据绑定(二)
通过Demo学WPF—数据绑定(二)
124 1
|
安全 C# 数据安全/隐私保护
WPF安全加固全攻略:从数据绑定到网络通信,多维度防范让你的应用固若金汤,抵御各类攻击
【8月更文挑战第31天】安全性是WPF应用程序开发中不可或缺的一部分。本文从技术角度探讨了WPF应用面临的多种安全威胁及防护措施。通过严格验证绑定数据、限制资源加载来源、实施基于角色的权限管理和使用加密技术保障网络通信安全,可有效提升应用安全性,增强用户信任。例如,使用HTML编码防止XSS攻击、检查资源签名确保其可信度、定义安全策略限制文件访问权限,以及采用HTTPS和加密算法保护数据传输。这些措施有助于全面保障WPF应用的安全性。
253 0
|
数据处理 开发者 C#
WPF数据绑定实战:从零开始,带你玩转数据与界面同步,让你的应用程序更上一层楼!
【8月更文挑战第31天】在WPF应用开发中,数据绑定是核心技能之一,它能实现界面元素与数据源的同步更新。本文详细介绍了WPF数据绑定的概念与实现方法,包括属性绑定、元素绑定及路径绑定等技术,并通过示例代码展示了如何创建数据绑定。通过数据绑定,开发者不仅能简化代码、提高可维护性,还能提升用户体验。无论初学者还是有经验的开发者,都能从中受益,更好地掌握WPF数据绑定技巧。
328 0
WPF/C#:数据绑定到方法
WPF/C#:数据绑定到方法
163 0
|
C#
WPF QuickStart系列之数据绑定(Data Binding)
原文:WPF QuickStart系列之数据绑定(Data Binding) 这篇博客将展示WPF DataBinding的内容。 首先看一下WPF Data Binding的概览, Binding Source可以是任意的CLR对象,或者XML文件等,Binding Target需要有依赖属性。
1427 0
|
C# 存储
WPF 实现跑马灯效果的Label控件,数据绑定方式实现
原文:WPF 实现跑马灯效果的Label控件,数据绑定方式实现 项目中需要使用数据绑定的方式实现跑马灯效果的Label,故重构了Label控件;具体代码如下 using System; using System.
2536 0
|
C#
WPF Label控件在数据绑定Content属性变化触发TargetUpdated事件简单实现类似TextChanged 事件效果
原文:WPF Label控件在数据绑定Content属性变化触发TargetUpdated事件简单实现类似TextChanged 事件效果   本以为Label也有TextChanged 事件,但在使用的时候却没找到,网友说Label的Content属性改变肯定是使用赋值操作,赋值的时候就可以对其进行相应的操作所以不需TextChanged 事件。
2202 0
|
C# 存储
【值转换器】 WPF中Image数据绑定Icon对象
原文:【值转换器】 WPF中Image数据绑定Icon对象        这是原来的代码:                这里的MenuIcon是string类型,MenuIcon = "/Image/Tux.ico"。
965 0