我知道是用递归写但给点思路吧贴点代码解释一下代码的内容主要是不怎么明白递归思想顺便也说说递归算法吧各位神啊救救我吧.NET treeview无限分级问题???谢谢勒
解决方案 »
- ASP.NET的初级知识
- 求一正则表达式:输入框中不能输入中文和全角字符
- 【Jinglecat过来接分之三】
- 高手请指点:自动生成文本框
- 如何使用SQL语句完成将秒转换成时分秒的形式
- 请问如何将另外一个页面引入当前页面?
- 要设置一个按键,按一下加粗字体,再按一下消除加粗应该怎么做呢????
- 这是我第三次提同样的问题了,难道真没人能解决吗.
- 在DataGrid里加了一个编辑按钮,但是要按两下才能显示编辑状态
- 深入了解petshop例子的朋友请进来帮帮忙(关于身份验证)
- 我的document.body.clientHeight和document.body.offsetHeight的值为什么都是24啊
- 把数据库放到万网上数据库连接怎么写?
{
public partial class _Default : System.Web.UI.Page
{
string StrConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + HttpContext.Current.Server.MapPath("~/") + "b.mdb";
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
LoadData();
}
} private void LoadData()
{ OleDbConnection cn = new OleDbConnection(StrConn);
cn.Open();
OleDbCommand cmd = new OleDbCommand("select * from D where DID=PID", cn);
OleDbDataReader read = cmd.ExecuteReader();
while (read.Read())
{
MyTreeView.Nodes.Clear();
TreeNode part = new TreeNode();
part.Expanded = true;
part.Text = read["DName"].ToString();
part.Value = read["DId"].ToString();
MyTreeView.Nodes.Add(part);
FillFolderNode(read["DId"].ToString(), part);
}
read.Close();
cn.Close(); } private void FillFolderNode(string p, TreeNode part)
{
OleDbConnection cn = new OleDbConnection(StrConn);
cn.Open();
OleDbCommand cmd = new OleDbCommand("select * from D where PID=" + p + " and DID<>PID", cn);
OleDbDataReader read = cmd.ExecuteReader();
while (read.Read())
{ TreeNode parts = new TreeNode();
parts.Expanded = false;
parts.Text = read["DName"].ToString();
parts.Value = read["DId"].ToString();
part.ChildNodes.Add(parts);
FillFolderNode1(read["DId"].ToString(), parts); }
read.Close();
cn.Close();
} private void FillFolderNode1(string p, TreeNode part)
{
OleDbConnection cn = new OleDbConnection(StrConn);
cn.Open();
OleDbCommand cmd = new OleDbCommand("select * from D where DID=" + p + " and DID<>PID", cn);
OleDbDataReader read = cmd.ExecuteReader();
while (read.Read())
{ TreeNode parts = new TreeNode();
parts.Expanded = false;
parts.Text = read["DName"].ToString();
parts.Value = read["DId"].ToString();
part.ChildNodes.Add(parts); }
read.Close();
cn.Close();
} protected void MyTreeView_TreeNodeExpanded(object sender, TreeNodeEventArgs e)
{
string id = e.Node.Value;
TreeNode subnode = e.Node;
subnode.ChildNodes.Clear();//删除以前的,然后才可向下添加两级
FillFolderNode(id, subnode);
} protected void MyTreeView_SelectedNodeChanged(object sender, EventArgs e)
{
string id = MyTreeView.SelectedNode.Value;
MyTreeView.SelectedNode.Expanded = true;
TreeNode subnode = MyTreeView.SelectedNode;//当前节点
subnode.ChildNodes.Clear();//删除以前的,然后才可向下添加两级
FillFolderNode(id, subnode); Response.Write("<script>window.open('t.aspx?id=" + id + "');</script>");
}
}
}
{
BindJG();
}
private void BindJG()
{
DataSet ds = new DataSet();
//获取数据
DataTable dtb = ds.Tables[0];
TreeNode root = new TreeNode();
root.Value = "0";
root.Text = "";
root.ImageUrl = "../images/folder.gif";
root.Expanded = true;
this.TreeView1.Nodes.Add(root);
initTree(dtb, "", root);
this.TreeView1.ExpandAll();
} protected void initTree(DataTable dt, string nFatherid, TreeNode fatherNode)
{
DataView dv = new DataView(dt); if (nFatherid == "")
dv.RowFilter = "depth='1'";
else
dv.RowFilter = "ParentId='"+nFatherid+"'";
foreach (DataRowView Row in dv)
{
TreeNode node = new TreeNode();
if (fatherNode.Value == "0")
{
node.Value = Row["BH"].ToString();
node.Text = Row["mc"].ToString();
node.NavigateUrl = "";
node.ImageUrl = "../images/folder.gif";
fatherNode.ChildNodes.Add(node);
initTree(dt, Row["BH"].ToString(), node);
}
else
{
node.Text = Row["mc"].ToString();
node.Value = Row["BH"].ToString();
node.ImageUrl = "../images/jg.gif";
fatherNode.ChildNodes.Add(node);
}
}
}
因为这样效率不高,你可以看一下Windows操作系统(比如资源管理器)就是逐级加载的表结构就是多加个Pid
如果非要递归,好像也只能在业务逻辑层来实现,想直接通过sql语句来实现好像是不现实的