由于我的时间的关系我就不具体到你列举的数据库表中了,给你我的例子看看,是C# 绑定到Dataset中的Table 数据源,我的例子是Oracle数据库。
在Page_Load中调用InitRoot 方法。
InitRoot 方法为:
private void InitRoot(TreeView Nds, string sqlstr)
{
try
{
Nds.Nodes.Clear();
DataView dvTree = new DataView();
TreeNode tmpNd;
//调用生成数据集的DS
DbClass d = new DbClass();
DataSet ds = d.CreateDataSet(sqlstr);
//把ds的数据填充到dvTree中
dvTree.Table = ds.Tables["Table"];
foreach (DataRowView drvTree in dvTree)
{
//创建要添加结点
tmpNd = new TreeNode();
tmpNd.Value = drvTree["tid"].ToString();
tmpNd.Text = drvTree["tname"].ToString();
//tmpNd.Target = "BoardTitle";
//给控件添加根结点
Nds.Nodes.Add(tmpNd);
//设置其自动检查是否有子结点
tmpNd.PopulateOnDemand = true;
tmpNd.SelectAction = TreeNodeSelectAction.Expand;
}
}
catch (Exception ex)
{
throw new ApplicationException(ex.ToString());
}
}
其中的d.CreateDataSet(sqlstr) 是返回Dataset 具体如下实现:
public DataSet CreateDataSet(string sqlstr)
{
try
{
OracleConnection myConn = new OracleConnection(System.Configuration.ConfigurationManager.ConnectionStrings["strcon"].ConnectionString);
myConn.Open();
//clsConn myConn = new clsConn();
OracleDataAdapter cd = new OracleDataAdapter();
cd.SelectCommand = new OracleCommand(sqlstr, myConn);
cd.SelectCommand.CommandType = CommandType.Text;
DataSet dsTree = new DataSet();
cd.Fill(dsTree, "Table");
myConn.Close();
return dsTree;
}
catch
{
Console.WriteLine("Exception in Main :");
return null;
}
}
然后再在TreeView的TreeNodePopulate时间中调用AddEditTreeChild(e.Node);
具体方法如下:
private void AddEditTreeChild(TreeNode tnd)
{
try
{
DataView dvTree = new DataView();
TreeNode tmpNd;
//调用生成数据集的DS
DbClass d = new DbClass();
DataSet ds = d.CreateDataSet("select * from di_user_permissionView where userid='" + Session["userid"].ToString() + "'");
//把ds的数据填充到dvTree中
dvTree.Table = ds.Tables["Table"];
//筛选出当前结点的父结点ID
dvTree.RowFilter = "pid=" + tnd.Value.ToString() + "";
foreach (DataRowView drvTree in dvTree)
{
//创建要添加结点
tmpNd = new TreeNode();
tmpNd.Value = drvTree["tid"].ToString();
tmpNd.Text = drvTree["tname"].ToString();
//tmpNd.Target = "BoardTitle";
//添加到当前结点处
tnd.ChildNodes.Add(tmpNd);
//设置其自动搜索是否有子结点
tmpNd.PopulateOnDemand = true;
}
if (tnd.ChildNodes.Count != 0) tnd.SelectAction = TreeNodeSelectAction.Expand;
}
catch
{
//
}
}
这样就能实现TreeView的绑定 ,具体整个树结构是几级的 要看你数据库的设计了。
我这个应该是不用javascript 纯C#的表中TreeView的绑定了,你可以参考。