龙的天空
WinForm C# Web .NET
自己写小程序,发现不懂的太多,写下博客记录下,以防以后又给忘了
根据后台需求建立动态的Expander 菜单
首先 数据库
/****** 对象:  Table [dbo].[菜单]    脚本日期: 06/05/2011 13:48:41 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[菜单](
    
[Guid] [uniqueidentifier] NOT NULL CONSTRAINT [DF_菜单_Guid]  DEFAULT (newid()),
    
[菜单名称] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
    
[上级Guid] [uniqueidentifier] NULL,
    
[排序] [int] NULL,
    
[地址] [nvarchar](255) COLLATE Chinese_PRC_CI_AS NULL,
    
[权限] [nvarchar](255) COLLATE Chinese_PRC_CI_AS NULL,
 
CONSTRAINT [PK_菜单] PRIMARY KEY CLUSTERED 
(
    
[Guid] ASC
)
WITH (IGNORE_DUP_KEY = OFFON [PRIMARY]
ON [PRIMARY]

GO
USE [linyu0423]
GO
ALTER TABLE [dbo].[菜单]  WITH CHECK ADD  CONSTRAINT [FK_菜单_菜单_Guid] FOREIGN KEY([上级Guid])
REFERENCES [dbo].[菜单] ([Guid])
 
后台方法
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            dockPanel_菜单面板.Children.Clear();
            Expander 主菜单 
= new Expander();
            主菜单.Header 
= "菜单";
            dockPanel_菜单面板.Children.Add(主菜单);
            var caidan 
= from a in entity.菜单
                         
where a.上级Guid == null
                         select a;
            
if (caidan.Count() > 0)
            {
                主菜单.Content 
= getExpander(caidan);
            }


        }

    

        
private StackPanel getExpander(IQueryable<菜单> caidan)
        {
            StackPanel dp 
= new StackPanel();
            
foreach (var a in caidan)
            {
                
if (a.菜单1.IsLoaded)
                    a.菜单1.Load();
                
if (a.菜单1.Count() > 0)
                {
                    Expander ep 
= new Expander();
                    ep.Header 
= a.菜单名称;
                    ep.Margin 
= new Thickness(10000);
                    ep.Content 
= getExpander(a.菜单1.AsQueryable());
                    dp.Children.Add(ep);
                }
                
else
                {
                    Button tb 
= new Button();
                    tb.Content 
= a.菜单名称 + a.地址;
                    tb.Margin 
= new Thickness(10000);
                    dp.Children.Add(tb);
                }
            }
            
return dp;
        }
效果
posted on 2011-06-05 14:06  龙的天空  阅读(338)  评论(0)    收藏  举报