网上看到几个差不多的代码:
- 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">
------解决方案--------------------------------------------------------