|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);
}
}
[解决办法]
最好弄个父子关系列,再递归一下就行了