WPF中TreeView控件如何读取数据库中的数据?

longjun1627 2008-10-20 11:58:30
之前在WINFORM中,用TreeView来读取数据库中的数据来形成树形结构很容易,建个表就可以了

可是现在WPF中,WINFORM中的那种方法根本没法用了,在网上找了N久,也没有,连动态创建TreeView的也没有

汗~~~,哪位高手在WPF中动态创建过TREEVIEW的,指教指教呀

在线等~~帮顶也散分~~
...全文
1152 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
superstar4488 2010-11-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 canhui112 的回复:]
正在学习WPF中的TREEVIEWD!
[/Quote]

这是在创建表连接
学习鬼谷子 2010-07-22
  • 打赏
  • 举报
回复
namhyuk 的数据库是怎么建的?下面的代码是什么意思?
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"]);
Canhui112 2010-03-09
  • 打赏
  • 举报
回复
正在学习WPF中的TREEVIEWD!
longjun1627 2008-10-20
  • 打赏
  • 举报
回复
To:namhyuk,不知道如何从一个表中来读取,以前在WINFROM中是这样的:

DbBuild dbbuild = new DbBuild();//实例化数据库操作对象

/// <summary>
/// 动态创建TreeView
/// </summary>
/// <param name="sqlText">传入的SQL语句</param>
/// <param name="nodes">TreeView节点集</param>
public void CreateTreeView(string sqlText, TreeNodeCollection nodes)
{
try
{
DataTable dbTable = new DataTable();//实例化一个DataTable数据表对象

dbTable = dbbuild.GetDbTable(sqlText);//返数据表

//将第一级菜单取出生成TreeView的节点,作为递归运算的入口递归查询出TreeView的所有节点数据
CreateTreeViewRecursive(nodes, dbTable, 0);
}
catch (Exception tv_ex)
{
MessageBox.Show(tv_ex.Message);
}
}
/// <summary>
/// 递归查询
/// </summary>
/// <param name="nodes">TreeView节点集合</param>
/// <param name="dataSource">数据源</param>
/// <param name="parentid">上一级菜单节点标识码</param>
public void CreateTreeViewRecursive(TreeNodeCollection nodes, DataTable dataSource, int parentid)
{
string filter;//定义一个过滤器
filter = string.Format("Menu_ParentId={0}", parentid);

DataRow[] drarr = dataSource.Select(filter);//将过滤的ID放入数组中

TreeNode node;
foreach (DataRow dr in drarr)//递归循环查询出数据
{
node = new TreeNode();
node.Text = dr["Menu_Name"].ToString();
node.Tag = Convert.ToInt32(dr["Menu_Id"]);
nodes.Add(node);//加入节点
CreateTreeViewRecursive(node.Nodes, dataSource, Convert.ToInt32(node.Tag));
}
}
namhyuk 2008-10-20
  • 打赏
  • 举报
回复
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"];

}

longjun1627 2008-10-20
  • 打赏
  • 举报
回复
问题解决了,多谢各位
longjun1627 2008-10-20
  • 打赏
  • 举报
回复
namhyuk,能说说如何读取出一个表中的吗?
kent4j 2008-10-20
  • 打赏
  • 举报
回复
好贴 回答也很好

110,525

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧