.NET 做树状菜单不求人(TreeView控件实战)

目的:
通过TreeView控件的运用,从Sql2005的表中生成两级联动的树状菜单。

最终的显示效果:


数据库test,主类表为big,子类表为class


aspx中的TreeView控件的代码
ContractedBlock.gif ExpandedBlockStart.gif Code
<asp:TreeView ID="TreeView1" runat="server" Height="168px" ImageSet="Simple" Width="175px">
            
<ParentNodeStyle Font-Bold="False" />
            
<HoverNodeStyle Font-Underline="True" ForeColor="#5555DD" />
            
<SelectedNodeStyle Font-Underline="True" ForeColor="#5555DD" 
                HorizontalPadding
="0px" VerticalPadding="0px" />
            
<NodeStyle Font-Names="Tahoma" Font-Size="10pt" ForeColor="Black" 
                HorizontalPadding
="0px" NodeSpacing="0px" VerticalPadding="0px" />
        
</asp:TreeView>

cs中的代码:
ContractedBlock.gif ExpandedBlockStart.gif Code
protected void Page_Load(object sender, EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif        
{
            
if (!Page.IsPostBack) 
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                
//填充一级菜单节点
                DataView dv = drv("select * from big");
                
foreach (DataRowView datav in dv)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
{
                    TreeNode tn 
= new TreeNode();
                    tn.Text 
= datav["title"].ToString();
                    tn.Value 
= datav["bid"].ToString();
                    
//一级菜单是折叠状态
                    tn.Expanded = false;
                    TreeView1.Nodes.Add(tn);
                    AddChildNodes(tn);
                }

            }

        }


ExpandedBlockStart.gifContractedBlock.gif        
/**//// <summary>
        
/// 根据所对应的一级菜单ID,来填充二级菜单节点
        
/// </summary>
        
/// <param name="tn"></param>

        private void AddChildNodes(TreeNode tn)
ExpandedBlockStart.gifContractedBlock.gif        

            
//先获取一级菜单的ID
            int bid = int.Parse(tn.Value);
            DataView dv 
= drv("select * from class where bid=" + bid);
            
foreach (DataRowView datav in dv)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                TreeNode ctn 
= new TreeNode();
                ctn.Text 
= datav["title"].ToString();
                ctn.Value 
= datav["cid"].ToString();
                ctn.NavigateUrl 
= "TreeView.aspx?cid=" + datav["cid"].ToString();
                tn.ChildNodes.Add(ctn);
            }

        }


ExpandedBlockStart.gifContractedBlock.gif        
/**//// <summary>
        
/// 根据Sql语句返回数据视图
        
/// </summary>
        
/// <param name="sql">要执行的sql语句</param>
        
/// <returns></returns>

        private DataView drv(string sql)
ExpandedBlockStart.gifContractedBlock.gif        
{
            
string connString = "server=.; uid=sa; pwd=qaz!123; database=test";
            SqlConnection conn 
= new SqlConnection(connString);
            SqlDataAdapter sda 
= new SqlDataAdapter(sql, conn);
            DataSet ds 
= new DataSet();
            sda.Fill(ds,
"tree");
            
return ds.Tables["tree"].DefaultView;            
        }
 
cs中引用两个命名空间:
using System.Data;
using System.Data.SqlClient;

OK,大功告成,两级树状菜单完成。且主菜单负责展开和合拢,而二级子菜单为导航链接。
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值