高分提问, treeview小问题
网上看到几个差不多的代码:
- C# code
using System;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 System.Data.SqlClient;namespace hzquery.menu{ /// <summary> /// menu_Left 的摘要说明。 /// </summary> public class menu_Left : System.Web.UI.Page { [color=#FF0000]protected Microsoft.Web.UI.WebControls.TreeView tvMenu;[/color] SqlConnection Conn; SqlDataAdapter myCmd; DataSet ds; string cmdSelect; private void Page_Load(object sender, System.EventArgs e) { Conn=new SqlConnection(Application["ConnString"].ToString()); CreateDataSet(); [color=#FF0000]InitTree(tvMenu.Nodes,"0");[/color] } //建立数据集 private DataSet CreateDataSet() { cmdSelect="select * from S_Menu"; myCmd=new SqlDataAdapter(cmdSelect,Conn); ds=new DataSet(); myCmd.Fill(ds,"tree"); return ds; } //建树的基本思路是:从根节点开始递归调用显示子树 [color=#FF0000] private void InitTree(TreeNodeCollection Nds,string parentId)[/color] { DataView dv=new DataView(); [color=#FF0000]TreeNode tmpNd;[/color] string intId; dv.Table=ds.Tables["tree"]; dv.RowFilter="ParentId="" + parentId + """ ; foreach(DataRowView drv in dv) { tmpNd=new TreeNode(); tmpNd.ID=drv["NodeId"].ToString(); tmpNd.Text=drv["NodeName"].ToString(); tmpNd.ImageUrl="../images/"+drv["Icon"].ToString(); tmpNd.NavigateUrl="../"+drv["Address"].ToString(); Nds.Add(tmpNd); intId=drv["ParentId"].ToString(); InitTree(tmpNd.Nodes,tmpNd.ID); } } #region Web Form Designer generated code override protected void OnInit(EventArgs e) { InitializeComponent(); base.OnInit(e); } private void InitializeComponent() { this.Load += new System.EventHandler(this.Page_Load); } #endregion }}第一个红色的地方, 那tvMenu没看到初始化, 它这样能通过?
第三、四个红色的地方, 那里定义的没包名做为前缀会产生岐义。
请问如何改进,或者谁可以提供个完整的。本人.net菜鸟(*^_^*)...
[解决办法]
那tvMenu没看到初始化, 它这样能通过
-------
还没有用到它,可以只是申明一下。用的时候再实例化也行;
那里定义的没包名做为前缀会产生岐义
不是很明白你的意思,TreeNode 属于System.Web.UI.WebControls命名空间。 某个列属于哪个命名空间可以自己查询的,在VS的菜单栏的视图的对象管理器中可以查询。
[解决办法]
TreeNode tmpNd;
这句就是树的初始化
[解决办法]
你说的第一个地方,那是因为这棵树是一个控件放置在界面上,所有放置在界面上的控件的实例化已经被挪走,不象2003那样还放置在你看到的代码文件里。
第三第四个地方是一个递归函数,你说的是没有空间名称,他既然能编译通过,说明在他所引用到的空间中再没有第二个跟他完全一样的定义,也就是说他本是已经具有唯一性,所以不需要加空间名称。加空间名称的本质就是确定类的唯一性。
[解决办法]
mark
[解决办法]
[解决办法]
[解决办法]
VS2005中代码的隐藏文件不可见,不是没有初始化,VS2003,与Vs2008都可以看到代码隐藏文件,就是一个控件的初始化相关的
其实VS已经做了初始化
红色的地方没有看到,那里是标红的不清楚
[解决办法]
tvMenu不用初始化是因为在html中有一个
- HTML code
<asp:TreeView ID="tvMenu" runat="server">
------解决方案--------------------
TreeNode[] treenodes = new TreeNode[50];
int i = 0;
int menuid = 0;
string sqlParent = "select * from TB_MENU where MENUID=" + menuid;
DataSet ds = OracleHelp.Query(sqlParent);
foreach (DataRow dr in ds.Tables[0].Rows)
{
treenodes[i] = new TreeNode();
treenodes[i].ImageUrl = "images/main_36.jpg";
treenodes[i].Text = i.ToString();
TreeView1.Nodes.Add(treenodes[i]);
menuid = Convert.ToInt32(dr["ID"]);
sqlParent = "select * from TB_MENU where MENUID=" + menuid;
DataSet drs = oh.Query(sqlParent);
int Parent = i;
i++;
foreach (DataRow table in drs.Tables[0].Rows)
{
treenodes[i] = new TreeNode();
treenodes[i].Text = table["MENU"].ToString();
treenodes[i].ImageUrl = "images/77.GIF";
treenodes[Parent].ChildNodes.Add(treenodes[i]);
i++;
}
}
}
[解决办法]