赞
踩
WPF 项目开发入门(一) 安装运行
WPF 项目开发入门(二) WPF 页面布局
WPF 项目开发入门(三)WPF 窗体与页面
WPF 项目开发入门(四) MVVM 模式 与 TreeView树组件
WPF 项目开发入门(五)ListView列表组件 与 Expander组件
WPF 项目开发入门(六)DataGrid组件
WPF 项目开发入门(七) From表单组件
WPF 项目开发入门(八)数据库驱动配置与数据库操作
WPF 项目开发入门(九)数据库连接 NHibernate使用
WPF 项目开发入门(十)DevExpress 插件+NHibernate登录
WPF 项目开发入门(十一)DevExpress 插件 Grid表格应用
WPF开发中最常使用的是DevExpress 插件。下面实现一个DevExpress 插件+NHibernate 操作数据库开发一个简单的用户登录与菜单框架页面功能。
1 项目目录
|---db 数据库业务数据目录
|---page 系统子页面
|---App.xaml 启动设置
|---DXLogin.xaml 登录页面
|---DXMainWindow.xaml 后台框架页面
项目如果没有驱动,导入NuGet中数据库驱动 Oracle.ManagedDataAccess,FluentNHibernate ,NHibernate 到项目中来。
1 创建用户表
create table SYS_USER(
USER_ID NUMBER not null,
DEPT_ID NUMBER,
LOGIN_NAME NVARCHAR2(30),
USER_NAME NVARCHAR2(30),
PASSWORD NVARCHAR2(50)
)
2 创建表POJO
public class UserMap : ClassMap<SysUserPojo>{ public UserMap() { Table("SYS_USER");//映射表 //主键设置 Id(m => m.userid).Column("USER_ID").GeneratedBy.Assigned(); Map(m => m.loginname).Column("LOGIN_NAME"); Map(m => m.name).Column("USER_NAME"); Map(m => m.password).Column("PASSWORD"); } } public class SysUserPojo{ public virtual int userid { get; set; } public virtual string name { get; set; } public virtual string password { get; set; } public virtual string loginname { get; set; } //登录成功与失败判断 public virtual String mesages { get; set; } }
HOracleDb 类中引入POJO
return FluentNHibernate.Cfg.Fluently.Configure()
.Database(OracleConfiguration.Oracle10
........ 导入 UserMap 配置类
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<UserMap>())
.BuildSessionFactory();
3 登录DAO数据库业务类
public class SysLoginDao{ //用户登录判断 public SysUserPojo Login(string name,string passwrd) { SysUserPojo user=null; string sql = "select * from sys_user where LOGIN_NAME='"+ name + "'"; List<SysUserPojo> ls= HOracleDb .FindListSqlObj<SysUserPojo>(sql).ToList(); if (ls.Any()) {//判断是否查到用户信息 user=ls[0]; if (!passwrd.Equals(user.password)) { //判断密码,密码错误为 user.mesages = "01"; } } return user; } //登录用户信息保存内存中 public static SysUserPojo getUserPojo =null; }
4 登录页面DXLogin.xaml
<dx:ThemedWindow x:Class="JMDJ.DXLogin" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core" xmlns:dxlc="http://schemas.devexpress.com/winfx/2008/xaml/layoutcontrol" xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors" dx:ThemeManager.ThemeName="Office2019Colorful" HeaderBackground="DodgerBlue" HeaderForeground="White" ResizeMode ="NoResize" ----窗体大小不可变 Top="250" Left="500" Title="登录" Height="170" Width="450"> <Grid> <dxlc:LayoutControl Orientation="Vertical" Width="300" > <dxlc:LayoutGroup Orientation="Vertical" > <dxlc:LayoutItem Label="名称" > <dxe:TextEdit NullText="请录入用户名称" x:Name="name" Width="150"/> </dxlc:LayoutItem> <dxlc:LayoutItem Label="密码" > <dxe:PasswordBoxEdit x:Name="paw" ShowCapsLockWarningToolTip="True" NullValue="" NullText="请录入密码信息" Width="150"/> </dxlc:LayoutItem> </dxlc:LayoutGroup> <dxlc:LayoutGroup Orientation="Horizontal" > <dxlc:LayoutItem > </dxlc:LayoutItem> <dxlc:LayoutItem > <dx:SimpleButton Width="100" Height="22" Content="登录" Click="Login_Click" /> </dxlc:LayoutItem> </dxlc:LayoutGroup> <dxlc:LayoutGroup Orientation="Horizontal" > <dxlc:LayoutItem > <!------错误消息提示--------> <TextBlock TextAlignment="Center" VerticalAlignment="Center" FontSize="20" x:Name="megname" ></TextBlock> </dxlc:LayoutItem> </dxlc:LayoutGroup> </dxlc:LayoutControl> </Grid> </dx:ThemedWindow>
5 DXLogin.CS 登录业务
public partial class DXLogin : ThemedWindow{ public DXLogin(){ InitializeComponent(); } //登录数据库业务类 SysLoginDao dao = new SysLoginDao(); //登录数据模型 SysUserPojo user = null; //登录事件 private void Login_Click(object sender, RoutedEventArgs e){ OnLogin();//业务判断 } private void OnLogin() { try{ //用户名称与密码验证 user = dao.Login(name.Text, paw.Text); } catch (Exception eg){ //判断数据库操作是否正确 megname.Text = "数据库连接失败(联系管理员)"; return; } //判断用户是否正确 if (user == null){ megname.Text = "用户名称错误"; } else{ //判断密码是否正确 if ("01".Equals(user.mesages)){ megname.Text = "用户密码错误"; }else{ SysLoginDao.getUserPojo = user;//登录用户信息保存内存中 DXMainWindow win = new DXMainWindow(); win.Show(); this.Close(); } } } }
用户登录成功之后查询数据库中的菜单表,获得系统菜单信息内容。
1 创建菜单表
create table SYS_MENU(
MUID NUMBER,
PMUID NUMBER,
NAME VARCHAR2(200),
IS_DEL VARCHAR2(1),
WPF_URL VARCHAR2(300),
WEB_URL VARCHAR2(300),
WPF_IMG VARCHAR2(300)
)
2 创建表POJO
public class SysMenuMap : ClassMap<SysMenuPojo>{ public SysMenuMap(){ Table("SYS_MENU");//映射表 Id(m => m.MUID).Column("MUID") .GeneratedBy.Assigned();//主键设置 Map(m => m.PMUID).Column("PMUID"); Map(m => m.NAME).Column("NAME"); Map(m => m.IS_DEL).Column("IS_DEL"); Map(m => m.WPF_URL).Column("WPF_URL"); Map(m => m.WEB_URL).Column("WEB_URL"); } } public class SysMenuPojo{ public virtual int MUID { get; set; } public virtual int PMUID { get; set; } public virtual string NAME { get; set; } public virtual string IS_DEL { get; set; } public virtual string WPF_URL { get; set; } public virtual string WEB_URL { get; set; } }
HOracleDb 类中引入POJO
return FluentNHibernate.Cfg.Fluently.Configure()
.......
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<SysMenuMap>())
.BuildSessionFactory();
3 菜单生成数据库业务类
public class SysLoginDao{
public List<SysMenuPojo> getUserMeut() {
string sql = "select * from sys_menu where IS_DEL=0";
return HOracleDb
.FindListSqlObj<SysMenuPojo>(sql)
.ToList();
}
}
4 菜单架构DXMainWindow.xaml
<dx:ThemedWindow x:Class="JMDJ.DXMainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core" xmlns:dxlc="http://schemas.devexpress.com/winfx/2008/xaml/layoutcontrol" xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors" xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid" xmlns:dxa="http://schemas.devexpress.com/winfx/2008/xaml/accordion" xmlns:dxwui="http://schemas.devexpress.com/winfx/2008/xaml/windowsui" xmlns:dxwuin="http://schemas.devexpress.com/winfx/2008/xaml/windowsui/navigation" xmlns:dxmvvm="http://schemas.devexpress.com/winfx/2008/xaml/mvvm" dx:ThemeManager.ThemeName="Office2019Colorful" HeaderBackground="#FF2A8AD4" HeaderForeground="White" Title="系统架构"> <Grid> <dxlc:DockLayoutControl> <dxlc:GroupBox dxlc:DockLayoutControl.Dock="Top" Height="50" > </dxlc:GroupBox> <dxg:TreeViewControl x:Name="usermenu"----菜单组件 dxlc:DockLayoutControl.Dock="Left" Width="170" FontSize="13" TreeDerivationMode="Selfreference" KeyFieldName="MUID" ParentFieldName="PMUID" TreeViewFieldName="NAME" SelectedItemChanged="usermenu_SelectedItemChanged">----菜单事件 </dxg:TreeViewControl> <dxwui:NavigationFrame ----业务页面组件 dxlc:DockLayoutControl.Dock="Client" x:Name="zhttFrame" AnimationType="SlideHorizontal" NavigationCacheMode="Required"> <dxmvvm:Interaction.Behaviors> <dxwuin:FrameNavigationService /> </dxmvvm:Interaction.Behaviors> </dxwui:NavigationFrame> </dxlc:DockLayoutControl> </Grid> </dx:ThemedWindow>
5 菜单架构DXMainWindow.CS业务类
public partial class DXMainWindow : ThemedWindow{ SysLoginDao dao=new SysLoginDao(); public DXMainWindow(){ InitializeComponent(); Window_Loaded();// 初始化设置全屏 //菜单数据生成组件 usermenu.ItemsSource = dao.getUserMeut(); } // 设置全屏 private void Window_Loaded(){ // 设置全屏 this.Left = 0.0; this.Top = 0.0; this.Width = System.Windows.SystemParameters.PrimaryScreenWidth; this.Height = System.Windows.SystemParameters.PrimaryScreenHeight; } //菜单点击事件 private void usermenu_SelectedItemChanged( object sender, DevExpress.Xpf.Grid.SelectedItemChangedEventArgs e){ SysMenuPojo meu=e.NewItem as SysMenuPojo; if (meu!=null&& meu.WPF_URL!=null) { //动态创建视图页面 例如:视图地址JMDJ.page.scgl.page1 Type type = Type.GetType(meu.WPF_URL); object ojb = type.Assembly.CreateInstance(meu.WPF_URL); zhttFrame.Content = ojb; } } }
在page 目录中创建用户管理视图页面,生成user.xaml与对应的user.cs业务代码。业务逻辑完成用户表的查询,添加,删除功能。
在sys_menu表中加入菜单信息内容,并将它的路径和程序地址关联。
MUID PMUID NAME WPF_URL
10000 0 系统管理 0
10001 10000 用户管理 JMDJ.page.user
user.xaml页面
<UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:dx="http://schemas.devexpress.com/winfx/2008/xaml/core" xmlns:dxlc="http://schemas.devexpress.com/winfx/2008/xaml/layoutcontrol" xmlns:dxe="http://schemas.devexpress.com/winfx/2008/xaml/editors" xmlns:dxg="http://schemas.devexpress.com/winfx/2008/xaml/grid" xmlns:dxa="http://schemas.devexpress.com/winfx/2008/xaml/accordion" xmlns:dxwui="http://schemas.devexpress.com/winfx/2008/xaml/windowsui" xmlns:dxwuin="http://schemas.devexpress.com/winfx/2008/xaml/windowsui/navigation" xmlns:dxmvvm="http://schemas.devexpress.com/winfx/2008/xaml/mvvm" mc:Ignorable="d" d:DesignHeight="1000" d:DesignWidth="800"> <!--------------- 提示消息设置 --------------------> <UserControl.Resources> <DataTemplate x:Key="CustomNotificationTemplate"> <Border Background="DarkBlue" BorderThickness="1" BorderBrush="Black"> <StackPanel Orientation="Vertical" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> <TextBlock HorizontalAlignment="Center" Text="{Binding}" Foreground="LightGray" FontSize="16" Margin="3" FontFamily="SegoeUI"/> </StackPanel> </Border> </DataTemplate> </UserControl.Resources> <dxmvvm:Interaction.Behaviors> <!--------------- 通知框 --------------------> <dxwuin:FrameNavigationService x:Name="usermenu" /> <dxmvvm:NotificationService x:Name="ServiceWithCustomNotifications" CustomNotificationTemplate="{StaticResource CustomNotificationTemplate}"/> </dxmvvm:Interaction.Behaviors> <Grid> <Grid.RowDefinitions> <RowDefinition Height="Auto" /> <RowDefinition Height="90" /> <RowDefinition Height="*"/> </Grid.RowDefinitions> <dxlc:FlowLayoutControl Orientation="Vertical" Background="#FF2A8AD4" BreakFlowToFit="True" Grid.Row="0"> <TextBlock Text="用户管理" FontSize="18" oreground="#ffffff"/> </dxlc:FlowLayoutControl> <!--------------- 添加用户布局 --------------------> <dxlc:LayoutControl VerticalAlignment="Stretch" Orientation="Vertical" Grid.Row="1" x:Name="userFrom">-------绑定后台的用户数据模型 <dxlc:LayoutGroup Orientation="Horizontal" > <dxlc:LayoutGroup Orientation="Vertical"> <dxlc:LayoutGroup Orientation="Horizontal" VerticalAlignment="Top" x:Name="imageGroup" Margin="5"> <dxlc:LayoutItem Label="用户名称" AddColonToLabel="True"> <dxe:TextEdit Text="{Binding name}"/> </dxlc:LayoutItem> <dxlc:LayoutItem Label="登录名称" A ddColonToLabel="True"> <dxe:TextEdit Text="{Binding loginname}" /> </dxlc:LayoutItem> <dxlc:LayoutItem Label="密码" AddColonToLabel="True"> <dxe:TextEdit Text="{Binding password}" /> </dxlc:LayoutItem> <dxlc:LayoutItem Width="300"> </dxlc:LayoutItem> </dxlc:LayoutGroup> <dxlc:LayoutGroup Orientation="Horizontal" > <dx:SimpleButton Width="100" Height="22" Content="添加" Click="OnSave_Click" />---添加事件 </dxlc:LayoutGroup> </dxlc:LayoutGroup> </dxlc:LayoutGroup> </dxlc:LayoutControl> <!--------------- 列表部分 --------------------> <dxg:GridControl Grid.Row="2" x:Name="usergird"> <dxg:GridControl.View> <dxg:TableView AutoWidth="True" ShowGroupPanel="False"/> </dxg:GridControl.View> <dxg:GridColumn FieldName="name" IsSmart="True" Header="用户名称" /> <dxg:GridColumn FieldName="loginname" IsSmart="True" Header="登录名称"/> <dxg:GridColumn FieldName="password" IsSmart="True" Header="密码" /> <dxg:GridColumn Header="操作" > <dxg:GridColumn.CellTemplate > <DataTemplate > <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" > <Button Content="删除" Click="OnDel_Click">----删除功能 </Button> </StackPanel> </DataTemplate> </dxg:GridColumn.CellTemplate> </dxg:GridColumn> </dxg:GridControl> </Grid> </UserControl>
user.xaml业务代码
public partial class user : UserControl{ SysUserPojo userpojo = new SysUserPojo(); public Scgl_sb_wl01list(){ InitializeComponent(); //添加组件引入数据模块 userFrom.DataContext = userpojo; //列表组件引入数据模块 usergird.ItemsSource = FindList(); } //添加用户信息到SYS_USER表中 private void OnSave_Click(object sender, RoutedEventArgs e) { if (userpojo!=null) { //添加数据 HOracleDb.Save<SysUserPojo>(userpojo); ServiceWithCustomNotifications .CreateCustomNotification("成功").ShowAsync(); usergird.ItemsSource = FindList(); //刷新列表 usergird.RefreshData(); } } //删除用户信心 private void OnDel_Click(object sender, RoutedEventArgs e){ //获得表列中选中的信息内容 SysUserPojo up = usergird .SelectedItem as SysUserPojo; if (up == null) { return; } //删除提升框 MessageBoxResult result = WinUIMessageBox.Show(messageBoxText: "是否要删除数据信息", caption: "提示信息", button: MessageBoxButton.YesNo); if (result == MessageBoxResult.Yes){ //删除信息 HOracleDb.Delete<SysUserPojo>(up); ServiceWithCustomNotifications .CreateCustomNotification("删除成功").ShowAsync(); usergird.ItemsSource = FindList(); //刷新列表 usergird.RefreshData(); } } //查询用户表 public List<SysUserPojo> FindList() { return HOracleDb .FindListSqlObj<SysUserPojo>( "select * from sys_user order by user_id desc") .ToList(); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。