写网站的时候,想让TreeView控件根据数据库中的字段自动生成父节点及对应的子结点,研究了半天终于搞定。。。
TreeView对应的后台代码为:(数据库名FlowControl,表名test,)
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//连接数据库,连接串自己改一下。
SqlConnection conn = new SqlConnection(@"Data Source=localhost;Initial Catalog=dbo.FlowControl;User ID=sa;Pwd=123456;");
SqlCommand cmd = new SqlCommand("select ProgramName from test group by ProgramName", conn); //对数据库操作.
//下面这三步 目前可以当做公司来套. 先New个 SqlDataAdapter和 DataSet对象。再用Fill方法填充;
SqlDataAdapter sda = new SqlDataAdapter(cmd); //new一个适配器对象
DataSet ds = new DataSet(); //new一个数据集对象
sda.Fill(ds, "test"); //把test表fill到数据集里
TreeNode xin = new TreeNode("流程控制"); //根节点命名为:流程控制
for (int i = 0; i < ds.Tables["test"].Rows.Count; i++) //这里的 ds.Tables["test"].Rows.count表示数据集里test表里总的行数,这有两行,可以建表执行下这个语句
select ProgramName from test group by ProgramName
{
string programName = ds.Tables["test"].Rows[i]["ProgramName"].ToString();
///把test表里第一行中ProgramName列中的内容转为字符串
TreeNode Node = new TreeNode(programName);
//new一个对象;当i 为0时 ,programName='杭电施工' 1时.理工施工.
string strCmd = "select HouseName FROM test where ProgramName='" + programName + "'"; ///选出杭电施工
SqlCommand _cmd = new SqlCommand(strCmd, conn);
SqlDataAdapter _sda = new SqlDataAdapter(_cmd);
DataSet _ds = new DataSet();
_sda.Fill(_ds, "test");
for (int j = 0; j < _ds.Tables["test"].Rows.Count; j++)
{
string HouseName = _ds.Tables["test"].Rows[j]["HouseName"].ToString();
TreeNode _Node = new TreeNode(HouseName);
Node.ChildNodes.Add(_Node); ///把HouseName里选出的东西放进杭电施工
}
xin.ChildNodes.Add(Node); ///把杭电施工放进流程控制
}
this.TreeView1.Nodes.Add(xin); ///把整个树形结构放进TreeView中
}
}
protected void TreeView1_SelectedNodeChanged(object sender, EventArgs e)
{
this.label1.Text = this.TreeView1.SelectedValue;//这个我只是拿来测试结点的点击事件。
}
}