请问,我要用C# winform的treeview动态绑定sql数据库
请问,我要用C#winform的treeview动态绑定sql数据库,前提是只知道数据库的名字,怎么动态绑定库里所有的表及表对应的所有字段。。请高手帮忙啊。。。。。。。。...
请问,我要用C# winform的treeview动态绑定sql数据库,前提是只知道数据库的名字,怎么动态绑定库里所有的表及表对应的所有字段。。
请高手帮忙啊。。。。。。。。。。谢谢 展开
请高手帮忙啊。。。。。。。。。。谢谢 展开
4个回答
展开全部
我以例子来说吧
先建一个数据库Test,里面建一个表Project
表中 id字段(主键,标识列,int),pid字段(int,允许空),tname字段(varchar,50,允许空)
输入一些数据:
Id pid tname
1 0 食品
2 0 生活用品
3 0 学习用品
4 1 面食
5 1 膨化食品
6 1 熟食
7 1 冰激凌
8 4 糕点
9 4 主食
10 2 卫生用品
11 2 生活用具
12 3 笔类
13 3 纸类
14 3 工具类
界面:一个TreeView
代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace MyProjectTree
{
public partial class Form1 : Form
{
SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=;database=test");
SqlDataAdapter dtd;
DataSet ds;
DataView dv;//表示用于排序、筛选、搜索、编辑和导航的System.Data.DataTable+的可绑定数据的自定义视图
private TreeNode Node;
public Form1()
{
InitializeComponent();
}
//自定义方法
private void GetData(int pid, TreeNode pnode)
{
dv = ds.Tables[0].DefaultView;//获取可能包括筛选视图或游标位置的表的自定义视图
dv.RowFilter = "pid=" + pid;
int dvC = dv.Count;
if (pnode == null)
{
int i = 0;
while (i < dvC)
{
dv = ds.Tables[0].DefaultView;
dv.RowFilter = "pid=" + pid;
TreeNode node = new TreeNode();
node.Text = dv[i]["tname"].ToString();
node.Tag = int.Parse(dv[i]["id"].ToString());
this.treeView1.Nodes.Add(node);
GetData((int)node.Tag, node);
i++;
}
}
else
{
int i = 0;
while (i < dvC)
{
dv = ds.Tables[0].DefaultView;
dv.RowFilter = "pid=" + pid;
TreeNode node = new TreeNode();
node.Text = dv[i]["tname"].ToString();
node.Tag = int.Parse(dv[i]["id"].ToString());
pnode.Nodes.Add(node);
GetData(int.Parse(dv[i]["id"].ToString()), node);
i++;
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
dtd = new SqlDataAdapter("select * from [project] order by id", conn);
ds = new DataSet();
dtd.Fill(ds, "test");
GetData(0, null);
}
这个程序是用,net2005做的
先建一个数据库Test,里面建一个表Project
表中 id字段(主键,标识列,int),pid字段(int,允许空),tname字段(varchar,50,允许空)
输入一些数据:
Id pid tname
1 0 食品
2 0 生活用品
3 0 学习用品
4 1 面食
5 1 膨化食品
6 1 熟食
7 1 冰激凌
8 4 糕点
9 4 主食
10 2 卫生用品
11 2 生活用具
12 3 笔类
13 3 纸类
14 3 工具类
界面:一个TreeView
代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace MyProjectTree
{
public partial class Form1 : Form
{
SqlConnection conn = new SqlConnection("server=.;uid=sa;pwd=;database=test");
SqlDataAdapter dtd;
DataSet ds;
DataView dv;//表示用于排序、筛选、搜索、编辑和导航的System.Data.DataTable+的可绑定数据的自定义视图
private TreeNode Node;
public Form1()
{
InitializeComponent();
}
//自定义方法
private void GetData(int pid, TreeNode pnode)
{
dv = ds.Tables[0].DefaultView;//获取可能包括筛选视图或游标位置的表的自定义视图
dv.RowFilter = "pid=" + pid;
int dvC = dv.Count;
if (pnode == null)
{
int i = 0;
while (i < dvC)
{
dv = ds.Tables[0].DefaultView;
dv.RowFilter = "pid=" + pid;
TreeNode node = new TreeNode();
node.Text = dv[i]["tname"].ToString();
node.Tag = int.Parse(dv[i]["id"].ToString());
this.treeView1.Nodes.Add(node);
GetData((int)node.Tag, node);
i++;
}
}
else
{
int i = 0;
while (i < dvC)
{
dv = ds.Tables[0].DefaultView;
dv.RowFilter = "pid=" + pid;
TreeNode node = new TreeNode();
node.Text = dv[i]["tname"].ToString();
node.Tag = int.Parse(dv[i]["id"].ToString());
pnode.Nodes.Add(node);
GetData(int.Parse(dv[i]["id"].ToString()), node);
i++;
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
dtd = new SqlDataAdapter("select * from [project] order by id", conn);
ds = new DataSet();
dtd.Fill(ds, "test");
GetData(0, null);
}
这个程序是用,net2005做的
展开全部
DataTable dt = new DataTable();
for (Int32 i = 0; i < dt.Columns; i++)
{
TreeNode tn = new TreeNode();
tn.Name = dt.Rows[i][0].ToString();
tn.Text = dt.Rows[i][1].ToString();
treeView1.Nodes.Add(tn);
}
要是无限添加的话就再加个方法就好了
for (Int32 i = 0; i < dt.Columns; i++)
{
TreeNode tn = new TreeNode();
tn.Name = dt.Rows[i][0].ToString();
tn.Text = dt.Rows[i][1].ToString();
treeView1.Nodes.Add(tn);
}
要是无限添加的话就再加个方法就好了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这样就应该可以了。
string sql="select name from sysobject where xtype ='U'";
SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
adapter.Fill(resultDS, "sysobject");
foreach(DataRow row in resultDS.Talbes["sysobject"].Rows)
{
sql="Select top 1 * From "+row["Name"].ToString();
adapter = new SqlDataAdapter(sql, conn);
adapter.Fill(resultDS, row["Name"].ToString());
TreeNode tn = new TreeNode();
tn.Name = row["Name"].ToString();
tn.Text = row["Name"].ToString();
treeView1.Nodes.Add(tn);
foreach(DataColumn col in resultDS.Talbes[row["Name"].ToString()].Columns)
{
TreeNode subtn = new TreeNode();
subtn.Name = col.ColumnName;
subtn.Text = col.ColumnName;
tn.Nodes.Add(subtn );
}
}
string sql="select name from sysobject where xtype ='U'";
SqlDataAdapter adapter = new SqlDataAdapter(sql, conn);
adapter.Fill(resultDS, "sysobject");
foreach(DataRow row in resultDS.Talbes["sysobject"].Rows)
{
sql="Select top 1 * From "+row["Name"].ToString();
adapter = new SqlDataAdapter(sql, conn);
adapter.Fill(resultDS, row["Name"].ToString());
TreeNode tn = new TreeNode();
tn.Name = row["Name"].ToString();
tn.Text = row["Name"].ToString();
treeView1.Nodes.Add(tn);
foreach(DataColumn col in resultDS.Talbes[row["Name"].ToString()].Columns)
{
TreeNode subtn = new TreeNode();
subtn.Name = col.ColumnName;
subtn.Text = col.ColumnName;
tn.Nodes.Add(subtn );
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用第归算法种书是最好的方法了。具体做法自己有心去研究研究吧.方法调用自己方法.提醒一下.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询