自己写小程序,发现不懂的太多,写下博客记录下,以防以后又给忘了
根据后台需求建立动态的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 = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
USE [linyu0423]
GO
ALTER TABLE [dbo].[菜单] WITH CHECK ADD CONSTRAINT [FK_菜单_菜单_Guid] FOREIGN KEY([上级Guid])
REFERENCES [dbo].[菜单] ([Guid])
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 = OFF) ON [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(10, 0, 0, 0);
ep.Content = getExpander(a.菜单1.AsQueryable());
dp.Children.Add(ep);
}
else
{
Button tb = new Button();
tb.Content = a.菜单名称 + a.地址;
tb.Margin = new Thickness(10, 0, 0, 0);
dp.Children.Add(tb);
}
}
return dp;
}
{
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(10, 0, 0, 0);
ep.Content = getExpander(a.菜单1.AsQueryable());
dp.Children.Add(ep);
}
else
{
Button tb = new Button();
tb.Content = a.菜单名称 + a.地址;
tb.Margin = new Thickness(10, 0, 0, 0);
dp.Children.Add(tb);
}
}
return dp;
}
效果

浙公网安备 33010602011771号