Northwind数据库的三个表之间依次有一对多关系:
Customers-Orders-Order Details
要想在TreeView上表现这种关系,就需要HierarchicalDataTemplate.
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"];
}