C# TreeView怎么绑定数据库数据?

mgs834 2017-08-08 12:52:26
我的数据库表是这样的,


现在我想做一个Treeview控件 ,树型展示这个表里的数据,
我在网上找了一段别人写的代码,但是看不太懂,

private void bindTreeView1()
{
string sql = "select * from dm_category";
DataTable dt = db.ExecuteDataTable(sql, CommandType.Text, null);
DataRow[] dr = dt.Select("parent_id is null");
for (int i = 0; i < dr.Length; i++)
{
TreeNode tn = new TreeNode();
tn.Text = dr[i]["category_name"].ToString();
tn.Tag = dr[i]["id"].ToString();
FillTree(tn, dt);
treeView1.Nodes.Add(tn);
}
}

private void FillTree(TreeNode node, DataTable dt)
{
DataRow[] drr = dt.Select("parent_id='" + node.Tag.ToString() + "'");
if (drr.Length > 0)
{
for (int i = 0; i < drr.Length; i++)
{
TreeNode tnn = new TreeNode();
tnn.Text = drr[i]["category_name"].ToString();
tnn.Tag = drr[i]["id"].ToString();
if (drr[i]["parent_id"].ToString() == node.Tag.ToString())
{
FillTree(tnn, dt);
}
node.Nodes.Add(tnn);
}
}
}


问题:
1,DataRow[] drr = dt.Select("parent_id='" + node.Tag.ToString() + "'");这里的'" + node.Tag.ToString() + "是不是一个控件?
这个node从哪冒出来的?
2,我要实现button按钮事件就展开treeview,那么,我的这段代码该放哪里?如何调用?
谢谢各位大哥了。
...全文
1317 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
城里的乡下鱼 2017-08-22
  • 打赏
  • 举报
回复
楼上已给出答案
Jia_ShengJie 2017-08-22
  • 打赏
  • 举报
回复
用DEV 控件,直接绑定就好; treeList1.DataSource = CreateTreeListTable();   treeList1.ParentFieldName = "FParentID";   treeList1.KeyFieldName = "FInterID";  
sjbcl2008 2017-08-22
  • 打赏
  • 举报
回复
TreeView绑定,需要使用递归函数实现
zhuyinshengNo1 2017-08-08
  • 打赏
  • 举报
回复
这个是你上面绑定的时候给TreeNode赋的值: tn.Tag = dr[i]["id"].ToString(); 所以你下面这一句的node.Tag.ToString() 就是ID的值: DataRow[] drr = dt.Select("parent_id='" + node.Tag.ToString() + "'");
全栈极简 2017-08-08
  • 打赏
  • 举报
回复
private void Form1_Load(object sender, EventArgs e)
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("FInterID", typeof(int));
            dt.Columns.Add("FParentID", typeof(int));
            dt.Columns.Add("FName", typeof(string));
            dt.Columns.Add("FNumber", typeof(string));
            dt.Columns.Add("FBootID", typeof(int));

            dt.Rows.Add(1038, 0, "3300A", "3300A项目", 1038);
            dt.Rows.Add(1039, 1038, "成品组件", "3300A", 1038);
            dt.Rows.Add(1040, 1038, "注塑件", "3300A01", 1038);

            dt.Rows.Add(1052, 0, "3602U", "3602U项目", 1052);
            dt.Rows.Add(1053, 1052, "成品组件", "3602U", 1052);
            dt.Rows.Add(1054, 1052, "注塑件", "3602U01", 1052);
            dt.Rows.Add(1055, 1052, "涂装件", "3602U02", 1052);
            dt.Rows.Add(1056, 1052, "真镀件", "3602U03", 1052);
            dt.Rows.Add(1057, 1052, "点胶件", "3602U04", 1052);
            dt.Rows.Add(1058, 1052, "冲切件", "3602U05", 1052);
            dt.Rows.Add(1059, 1052, "夹具", "3602U17", 1052);

            dt.Rows.Add(1060, 0, "3622A", "3622A项目", 1060);
            dt.Rows.Add(1061, 1060, "夹具1", "3622A", 1060);
            dt.Rows.Add(1062, 1060, "夹具2", "3622A01", 1060);
            dt.Rows.Add(1063, 1060, "夹具3", "3622A02", 1060);

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                if (int.Parse(dt.Rows[i]["FParentID"].ToString()) == 0) //如果是根
                {
                    TreeNode root = new TreeNode();
                    root.Text = dt.Rows[i]["FName"].ToString();
                    root.Tag = dt.Rows[i]["FInterID"].ToString();
                    this.treeView1.Nodes.Add(root);
                }
                else//如果不是根
                {
                    TreeNode root = this.treeView1.Nodes.OfType<TreeNode>().FirstOrDefault(t => (string)t.Tag == dt.Rows[i]["FParentID"].ToString());
                    if (root != null)
                    {
                        TreeNode node = new TreeNode();
                        node.Text = dt.Rows[i]["FName"].ToString();
                        node.Tag = dt.Rows[i]["FInterID"].ToString();
                        root.Nodes.Add(node);
                    }
                }
            }

            this.treeView1.ExpandAll();//展开tree
        }
xdashewan 2017-08-08
  • 打赏
  • 举报
回复
引用 5 楼 mgs834 的回复:
dt.Select("parent_id='" + node.Tag.ToString() + "'"); 这个 + node.Tag.ToString() + 是啥意思呢,是控件吗, 比如我们使用textbox时的时候就是这样用: +textbox1.ToString() +
dt就是datatable,node是TreeNode节点(你可以认为是控件的一部分)
mgs834 2017-08-08
  • 打赏
  • 举报
回复
private void bindTreeView1() private void FillTree(TreeNode node, DataTable dt) 都放在button的click事件下吗??
mgs834 2017-08-08
  • 打赏
  • 举报
回复
引用 2 楼 xdashewan 的回复:
1.这段代码显然是把数据库数据抽取到DataTable中,所以参数中有DataTable dt,而DataRow就是从DataTable中取父类id为XXX的数据 2.你自己都说是button按钮事件了 补充,这段代码使用递归方式添加树形结构,我觉得你要改动的无非只是字段名而已
dt.Select("parent_id='" + node.Tag.ToString() + "'"); 这个 + node.Tag.ToString() + 是啥意思呢,是控件吗, 比如我们使用textbox时的时候就是这样用: +textbox1.ToString() +
iiihavedone 2017-08-08
  • 打赏
  • 举报
回复
引用 3 楼 x15037308498 的回复:
1: 那个 node 应该是你父节点的属性 2: 点击Button 展开父节点,当然要写在Button的点击事件里面了 调用:获取你的treeView对象treeView1,使用它下面的Expand方法,展开父节点 treeView1.Nodes[0].Expand();
说错了 node应该是 TreeNode对象,获取你树中节点的信息的
iiihavedone 2017-08-08
  • 打赏
  • 举报
回复
1: 那个 node 应该是你父节点的属性 2: 点击Button 展开父节点,当然要写在Button的点击事件里面了 调用:获取你的treeView对象treeView1,使用它下面的Expand方法,展开父节点 treeView1.Nodes[0].Expand();
xdashewan 2017-08-08
  • 打赏
  • 举报
回复
1.这段代码显然是把数据库数据抽取到DataTable中,所以参数中有DataTable dt,而DataRow就是从DataTable中取父类id为XXX的数据 2.你自己都说是button按钮事件了 补充,这段代码使用递归方式添加树形结构,我觉得你要改动的无非只是字段名而已
ilikeff8 2017-08-08
  • 打赏
  • 举报
回复
tag里是父亲id

110,536

社区成员

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

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

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