treeview数据绑定问题

slepin 2008-07-07 10:30:18
我在网上找的代码,只是我使用的是3层结构,我不的查询直接在另一个层里面,可是不知道怎么回事就是调用不到数据 我用的是窗体模式。
附上我的代码希望高手看看
界面代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace zxlogin
{
public partial class zxtree : Form
{
Tree tr = new Tree();
DataSet ds;
public zxtree()
{
InitializeComponent();
//tvRoom.ImageList = ilTreeRoom;
//TreeNode tmpNode = new TreeNode(appSet.appSetRow["用户名称"].ToString());
TreeNode tmpNode = new TreeNode();
tmpNode.Tag = "0";
tvRoom.Nodes.Add(tmpNode);
tmpNode.Expand();
//SqlConnection cnn = (new sqlConn()).sqlCreatConn();
//SqlDataAdapter sda = new SqlDataAdapter("select '0' as PARENTID,楼盘编号 as Tag,楼盘名称 as Text, * from 楼盘 where 类别<>1 order by 楼盘编号", cnn);
//ds = new DataSet();
ds = tr.getXlinfoxl("tabxlinfo");


//sda.Fill(ds, "楼盘");
//sda.SelectCommand.CommandText = "select 楼盘编号 as PARENTID,楼阁编号 as Tag,楼阁名称 as Text,* from 楼阁";
//sda.Fill(ds, "楼阁");
//sda.SelectCommand.CommandText = "SELECT DISTINCT 楼阁编号 as PARENTID,楼层 as Tag,楼层名称 as Text from 单元 ORDER BY 楼阁编号,楼层";
//sda.Fill(ds, "楼层");
ds = tr.getZtinfozt();
ds = tr.getTdinfotd();
AddTree(tvRoom.Nodes[0], ds, 0);
}
public void AddTree(TreeNode pNode, DataSet ds, int i)
{
if (i >= Convert.ToInt32(ds.Tables.Count))
{
return;
}
DataView dvTree = new DataView(ds.Tables[i]); //创建dvTree视图

//过滤ParentID,得到当前的所有子节点
dvTree.RowFilter = "PARENTID='" + pNode.Tag + "'"; //条件父节点
foreach (DataRowView Row in dvTree) //用行遍历视图
{
TreeNode Node = new TreeNode(); //创建新子节点
Node.Text = Row["Text"].ToString();
Node.Tag = Row["Tag"].ToString();
Node.ImageIndex = i;
Node.SelectedImageIndex = i;
pNode.Nodes.Add(Node); //添加当前节点的子节点
AddTree(Node, ds, i + 1); //再次递归
}
}


//下面的内容是打开窗体所执行的语句
private void zxtree_Load(object sender, EventArgs e)
{
//“绑定”按钮事件
//TreeViewDisplay();

}

//public DataSet ds = null;





//调用递归函数,完成树形结构的生成 AddTree(0, (TreeNode)null);
// 递归添加树的节点 父Node 数据 循环控制变量

}

}






类的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;

namespace zxlogin
{
class Tree
{
public DataSet getXlinfoxl(string tbl)
{
//查询线路信息语句

string sql = "select '0' as PARENTID,xlid as Tag,xlname as Text from tabxlinfo";


//在基础类 DBZX类中获取连接
//返回给 DBZX.GetTable 执行 语句,还要把执行后的值返回回来
return DBZX.GetDataSet(sql,tbl);
}
public DataSet getZtinfozt()
{
//查询线路信息语句

string sql = "select '1' as PARENTID,ztid as Tag,ztname as Text from tabztinfo";


//在基础类 DBZX类中获取连接
//返回给 DBZX.GetTable 执行 语句,还要把执行后的值返回回来
return DBZX.GetDataSet(sql);
}
public DataSet getTdinfotd()
{
//查询线路信息语句

string sql = "select '2' as PARENTID,tdid as Tag,tdname as Text from tabtdinfo";


//在基础类 DBZX类中获取连接
//返回给 DBZX.GetTable 执行 语句,还要把执行后的值返回回来
return DBZX.GetDataSet(sql);
}
}
}


...全文
168 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
slepin 2008-07-08
  • 打赏
  • 举报
回复
求高手指点,实在想不出来了,
现在只用一个 ds = tr.getXlinfoxl("tabxlinfo");
能出来这个表里面的树型结构,可是使用了其他2张表后,就无法显示树型结构了,不知道错在那里了。
slepin 2008-07-07
  • 打赏
  • 举报
回复
PARENTID Tag Text
这3个分别代表什么意思 我的id 用的是8个任意字符组成的
slepin 2008-07-07
  • 打赏
  • 举报
回复
显示为 0
pNode.Tag = "0"
Anders_lt 2008-07-07
  • 打赏
  • 举报
回复
dvTree 中有符合条件 dvTree.RowFilter = "PARENTID='" + pNode.Tag + "'"; //条件父节点
的数据吗
注意第一次 pNode.Tag 为0
slepin 2008-07-07
  • 打赏
  • 举报
回复
数据来自三张表,看类里面的3个查询语句,就是这三张表

跟踪 ds = tr.getXlinfoxl("tabxlinfo");
ds中有数据 显示的是
ds = {System.Data.DataSet}
yagebu1983 2008-07-07
  • 打赏
  • 举报
回复
问一下,
你绑定树的数据是来自一个表吗???
我姓区不姓区 2008-07-07
  • 打赏
  • 举报
回复
那ds中有数据吗?
slepin 2008-07-07
  • 打赏
  • 举报
回复
执行代码的时候 没有数据 是空的
跟踪的时候 没有执行到
{
TreeNode Node = new TreeNode(); //创建新子节点
Node.Text = Row["Text"].ToString();
Node.Tag = Row["Tag"].ToString();
Node.ImageIndex = i;
Node.SelectedImageIndex = i;
pNode.Nodes.Add(Node); //添加当前节点的子节点
AddTree(Node, ds, i + 1); //再次递归
}

直接跳过去了
我姓区不姓区 2008-07-07
  • 打赏
  • 举报
回复
详细解释一下“调用不到数据”是什么意思
slepin 2008-07-07
  • 打赏
  • 举报
回复
如果我添加一个 i=0;

public void AddTree(TreeNode pNode, DataSet ds, int i)
{
i = 0;
if (i >= Convert.ToInt32(ds.Tables.Count))
{
return;
}
DataView dvTree = new DataView(ds.Tables[i]); //创建dvTree视图

//过滤ParentID,得到当前的所有子节点
dvTree.RowFilter = "PARENTID='" + pNode.Tag + "'"; //条件父节点
foreach (DataRowView Row in dvTree) //用行遍历视图
{
TreeNode Node = new TreeNode(); //创建新子节点
Node.Text = Row["Text"].ToString();
Node.Tag = Row["Tag"].ToString();
//Node.ImageIndex = i;
//Node.SelectedImageIndex = i;
pNode.Nodes.Add(Node); //添加当前节点的子节点
AddTree(Node, ds, i + 1); //再次递归
}
}


可以获得一个只节点的数据,不过是把我的第一张表里面的数据放到了子节点,这个数据应该是放到父节点的。
i该为其他值都不行,还必须要把
ds = tr.getZtinfozt();
ds = tr.getTdinfotd();
这2行注销掉才能得到值
lonelygames 2008-07-07
  • 打赏
  • 举报
回复
以前我也碰到过这样的问题,原因是取子节点的数据条件的类型错了!!!!
你跟踪
dvTree.RowFilter = "PARENTID='" + pNode.Tag + "'"; //条件父节点
接着跟踪
DataRowView Row in dvTree
我想Row的维数是0(无数据)
原因,你dvTree.RowFilter = "PARENTID='" + pNode.Tag + "'"; 的条件出问题了!
注意:
1 pNode.tag 的值是什么?
2 PARENTID 的类型是否为string !!!!! 条件字段和条件要匹配.

zlkingdom 2008-07-07
  • 打赏
  • 举报
回复
不知道你有没有使用数据实体层
如果有的话其实可以将三张表中的所需要的数据添加到一个新的数据实体中,然后进行绑定
这样很容易发现什么地方出了问题
wbyfantasy 2008-07-07
  • 打赏
  • 举报
回复
可能还是dvtree中没数据吧
slepin 2008-07-07
  • 打赏
  • 举报
回复
tbl 不知道需不需要,
只是用来测试了一下,结果加上了还是不显示,还是没有获取到数据
wbyfantasy 2008-07-07
  • 打赏
  • 举报
回复
public DataSet getXlinfoxl(string tbl)
{
//查询线路信息语句

string sql = "select '0' as PARENTID,xlid as Tag,xlname as Text from tabxlinfo";


//在基础类 DBZX类中获取连接
//返回给 DBZX.GetTable 执行 语句,还要把执行后的值返回回来
return DBZX.GetDataSet(sql,tbl);
本人菜鸟,没太看懂 加个tbl参数什么意思啊? 为什么后面的又没加呢?
slepin 2008-07-07
  • 打赏
  • 举报
回复
高手都去吃饭了吗?

110,009

社区成员

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

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

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