表内容如下:
id child_id,parent_id, name
1 0 null 世界
2 01 0 中国
3 02 0 美国
4 011 01 上海
5 012 01 北京
6 013 01 武汉
7 0111 011 徐汇区
8 0112 011 闵行区
9 0121 012 朝阳区
......最后生成的的树形如下:
世界
中国
美国
上海
徐汇区
闵行区
北京
朝阳区
武汉
。能够一次性从数据库里读出数据生成。
因为我是在初始化的时候需要一次性的全部显示。
id child_id,parent_id, name
1 0 null 世界
2 01 0 中国
3 02 0 美国
4 011 01 上海
5 012 01 北京
6 013 01 武汉
7 0111 011 徐汇区
8 0112 011 闵行区
9 0121 012 朝阳区
......最后生成的的树形如下:
世界
中国
美国
上海
徐汇区
闵行区
北京
朝阳区
武汉
。能够一次性从数据库里读出数据生成。
因为我是在初始化的时候需要一次性的全部显示。
如:
TreeNode tnRoot;
tnRoot.Tag = 0;//根节点编号
tnRoot.Text = "世界";
this.TreeView1.Nodes.Add(tnRoot);
AddChilds(tnRoot);//调用增加子节点方法private void AddChilds(TreeNode tn)
{
DataRow[] drs = dsTree.Tables[0].Select("id="+tn.Tag.ToString());
foreach(DataRow dr in drs)
{
TreeNode tnChild;
tnChild.Tag = dr["id"].ToString();
tnChild.Text = dr["text"].ToString();
tn.Nodes.Add(tnChild);
AddChilds(tnChild);//递归调用增加子节点的方法,以实现对所有子节点的增加处理
}
}基本思路如此,你可以参考这个思路写就可以了.
基本实现是很简单的。
先选择,用DataView过滤出当前节点的子向节点就可以,
如果用是int类型更方便.
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;using Microsoft.Web.UI.WebControls;
using egov2;
using egov2.Components;namespace egov2.Query
{
/// <summary>
/// testTree 的摘要说明。
/// </summary>
public class testTree :BasePage
{
protected Microsoft.Web.UI.WebControls.TreeView treeView;
private string ccm="";
protected System.Web.UI.WebControls.TextBox tBox;
private string selectcom=""; private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
TreeNodeCollection TNC=new TreeNodeCollection();
treeView.ExpandLevel=1;
creatTree(ccm,treeView.Nodes);
} }
public void creatTree(string varccm,TreeNodeCollection treeView)
{
try
{
selectcom="select * from t_Industry where Industry_CCM like '"+varccm+"__' "; DataBase db=new DataBase(0);
db.Open();
DataSet ds=db.runSQLDataSet(selectcom);
db.Close(); for(int i=0;i<=ds.Tables[0].Rows.Count;i++)
{
TreeNode node = new TreeNode();
node.ID=ds.Tables[0].Rows[i]["Industry_ID"].ToString().Trim();
node.Text=ds.Tables[0].Rows[i]["Industry_Name"].ToString().Trim();
node.ImageUrl="/webctrl_client/1_0/images/folder.gif";
node.ExpandedImageUrl="/webctrl_client/1_0/images/folderopen.gif";
//node.NavigateUrl="/webctrl_client/1_0/images/folder.gif";
node.Expandable=ExpandableValue.Always;
treeView.Add(node);
creatTree(ds.Tables[0].Rows[i][2].ToString().Trim(),node.Nodes);
}
}
catch(Exception e)
{
Response.Write("");
} }
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.treeView.SelectedIndexChange += new Microsoft.Web.UI.WebControls.SelectEventHandler(this.treeView_SelectedIndexChange);
this.Load += new System.EventHandler(this.Page_Load); }
#endregion private void treeView_SelectedIndexChange(object sender, Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs e)
{
string[] index;
TreeNodeCollection tmp=treeView.Nodes; index=treeView.SelectedNodeIndex.Split(char.Parse("."));
for (int i=0;i<index.Length;i++)
{
if ((i+1)==index.Length)
{
//Response.Write(tmp[int.Parse(index[i])].ID+"<br>");
tBox.Text=tmp[int.Parse(index[i])].Text;
}
tmp=tmp[int.Parse(index[i])].Nodes;
}
//tBox.Text=e.NewNode.ToString();
}
}
}
其实用TreeView控件,取出数据,一个一个的递归往上画,就行了。
报错位置:
DataRow[] drs = dsTree.Tables[0].Select("id="+tn.Tag.ToString());我贴出源码:
private void button1_Click(object sender, EventArgs e)
{
TreeNode tnRoot = new TreeNode();
tnRoot.Tag = 0;//根节点编号。
tnRoot.Text = "世界";
this.tvSysModule.Nodes.Add(tnRoot);
AddChilds(tnRoot);//调用增加子节点方法
} private void AddChilds(TreeNode tn)
{ pubclass pc = new pubclass();
pc.Open(); string sql = "select id,childid,parentid,name from modules";
SqlDataAdapter da = new SqlDataAdapter(sql, pc.conn);
DataSet dsTree = new DataSet();
da.Fill(dsTree, "dsTree");
DataRow[] drs = dsTree.Tables[0].Select("parentid=" + tn.Tag.ToString().Trim());
foreach (DataRow dr in drs)
{
TreeNode tnChild = new TreeNode();
tnChild.Tag = dr["childid"].ToString().Trim();
tnChild.Text = dr["name"].ToString().Trim();
tn.Nodes.Add(tnChild);
AddChilds(tnChild);//递归调用增加子节点的方法,以实现对所有子节点的增加处理
}
}
private void InitGoodsTypeTree()
{
//清空树
this.tvwGoodsType.Nodes.Clear ();GoodsTypeNode gn = new GoodsTypeNode ();
gn.Tag = -1;
gn.Text = "货物分类树";
gn.Grade = 0;this.tvwGoodsType.Nodes.Add (gn);
AddChildNode(gn);
this.tvwGoodsType.ExpandAll ();}private void AddChildNode(GoodsTypeNode gn)
{
string strFilter = "PARENT_CODE="+gn.Tag .ToString ();
//string strOrderBy = "OrderBy asc ";
DataRow[] drs = null;
try
{
drs = this.dtGoodsType.Select (strFilter);
}
catch(Exception ex)
{
throw ex;
}foreach(DataRow dr in drs)
{
GoodsTypeNode goodstypeNode = new GoodsTypeNode ();
goodstypeNode.Tag = Convert.ToInt32 (dr["GOODSTYPE_CODE"]);
goodstypeNode.Text = dr["GOODSTYPE_NAME"].ToString ();
goodstypeNode.Grade = Convert.ToInt32 (dr["Grade"]);AddChildNode(goodstypeNode);
gn.Nodes.Add (goodstypeNode);}
}
非常感谢!
这个filter是怎么用的呢?