首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

|M| TreeView 对数据要如何进行绑定

2012-01-16 
|M| TreeView 对数据要怎么进行绑定如我有数据班级学生表班级学生编号一班070101一班070102二班070201学生

|M| TreeView 对数据要怎么进行绑定
如我有数据
班级学生表
班级       学生编号
一班         070101
一班         070102
二班         070201

学生表
学生编号     学生姓名
070101         张三
070102         李四
070201         王五
------------------------
然后现在要绑定到TreeView的最终样式为

一班
          张三
          李四
二班
          王五

我要怎么来进行绑定最好

谢谢


[解决办法]
先绑定第一层

然后在绑定第一层的函数里面绑定第二层
[解决办法]
帮顶
[解决办法]
private bool isHaveCheckBox = false;
private bool isExpanded = false;
private DataTable dtTree = null;

protected void Page_Load(object sender, EventArgs e)
{

if (!IsPostBack)
{

TreeView1.Nodes.Add(getRootAreaTreeNode(false, false));
}

}

#region TreeViewBind
/// <summary>
/// 获取包含全部子节点的根节点数据
/// </summary>
/// <param name= "haveCheckBox "> 节点是否产生CheckBox </param>
/// <param name= "expanded "> 节点是否展开 </param>
/// <returns> </returns>
public Microsoft.Web.UI.WebControls.TreeNode getRootAreaTreeNode(bool haveCheckBox, bool expanded)
{

string rootID = "班级 ";
string rootName = "班级 ";
isHaveCheckBox = haveCheckBox;
isExpanded = expanded;

#region populate root node
Microsoft.Web.UI.WebControls.TreeNode rootNode = new Microsoft.Web.UI.WebControls.TreeNode();
rootNode.Text = rootName;
rootNode.ID = rootID;

rootNode.Expanded = true;
rootNode.CheckBox = isHaveCheckBox;
#endregion
//假设表 banji 和 xuesheng 数据操作部分用来sqlhelper楼主可 自行改成自己的
DataSet dsTree = SqlHelper.ExecuteDataset(connstring, CommandType.Text, "select 班级 as code, 班级 as sName, '班级 ' as parentCode from banji
union select banji.学生编号 as code, 学生姓名 as sName, 班级 as parentCode from xuesheng inner join banji on banji.学生编号 = xuesheng.学生编号 ");
dtTree = dsTree.Tables[0];


this.populateAreaTree(rootID, rootNode);

return rootNode;
}

private void populateAreaTree(string parentID, Microsoft.Web.UI.WebControls.TreeNode pNode)
{

DataRow[] dRows = dtTree.Select( "parentCode= ' " + parentID + " ' ");

if (dRows.Length > 0)
{
Microsoft.Web.UI.WebControls.TreeNode Node = null;
foreach (DataRow drow in dRows)
{
Node = new Microsoft.Web.UI.WebControls.TreeNode();
Node.Text = drow[ "SortName "].ToString();
Node.ID = drow[ "SortID "].ToString();

Node.Expanded = isExpanded;
pNode.Nodes.Add(Node);
populateAreaTree(Node.ID, Node); //递归
}
}
}
#endregion
[解决办法]
顶 先把整个表读出来放到DataTable里再进行筛选
[解决办法]
写两个函数,找出父子关系,迭代一下,还是简单的
------解决方案--------------------


有个疑问:楼主的两个表为什么不合成一个表呢?
[解决办法]
路过
[解决办法]
路过

[解决办法]
把班级标识在学生表里比较好



[解决办法]
班级表
班级编号 班级名称
1 一班
2 二班

学生表
班级编号 学生编号 学生姓名
1 070101 张三
1 070102 李四
2 070201 王五

string sql= "select 班级编号 as 编号,0 as 父编号,班级名称 as 名称 from 班级表 union select 学生编号 as 编号,班级编号 as 父编号,学生姓名 as 名称 ";

//填到表里

DataRow[] rows = table.select( "父编号=0 ");
TreeNode node = tree.Nodes.Add( "所有 ");

AddNode(node,rows);

private void AddNode(TreeNode node,DataRow[] rows){

foreach(DataRow row in rows){
//添上node
TreeNode n = node.Nodes.Add( " ");
DataRows[] subRows = table.Select( "父编号= " + row[ "编号 "]);
if(subRows.Length> 0)
AddNode(n,subRows);
}
}
[解决办法]
最好弄个父子关系列,再递归一下就行了

热点排行