7、日志调用、复合查询与显示

1、基础框架准备工作

1.1  UI层建立wpf应用程序OperatorLogWindows查询与显示;Model层建立OperatorLog类, DAL层建立OperatorLogDAL类。

1.2 创建数据库表

USE [HRMSYSDB]
GO

/****** Object:  Table [dbo].[T_OperationLog]    Script Date: 05/15/2013 11:48:45 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[T_OperationLog](
    [Id] [uniqueidentifier] NOT NULL,
    [OperatorId] [uniqueidentifier] NOT NULL,
    [MakeDate] [datetime] NOT NULL,
    [ActionDesc] [nvarchar](max) NOT NULL,
 CONSTRAINT [PK_T_OperationLog] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

 


2、Model层建立OperatorLog类

与数据库表的字段对应,包括名称、类型,如数据字段为空者需要在类型后加?,因需要跨项目需要加public。

namespace HRMSys.Model
{
    public class T_OperationLog
    {
        public System.Guid Id { get; set; }
        public System.Guid OperatorId { get; set; }
        public System.DateTime MakeDate { get; set; }
        public System.String ActionDesc { get; set; }
    }

}

 


3、DAL层建立OperatorLogDAL类

 

namespace HRMSys.DAL
{
    public class T_OperationLogDAL
    {
        private T_OperationLog ToModel(DataRow row)
        {
            T_OperationLog model = new T_OperationLog();
            model.Id = (System.Guid)row["Id"];
            model.OperatorId = (System.Guid)row["OperatorId"];
            model.MakeDate = (System.DateTime)row["MakeDate"];
            model.ActionDesc = (System.String)row["ActionDesc"];
            return model;
        }
        public T_OperationLog[] Search(string sql,params SqlParameter[] parameters)
        {
            DataTable dt = SqlHelper.ExecuteDataTable(sql,parameters);
            T_OperationLog[] opers = new T_OperationLog[dt.Rows.Count];
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                opers[i] = ToModel(dt.Rows[i]);
            }
            return opers;
        }
        public IEnumerable<T_OperationLog> ListAll()
        {
            List<T_OperationLog> list = new List<T_OperationLog>();
            DataTable dt = SqlHelper.ExecuteDataTable("select * from T_OperationLog");
            foreach (DataRow row in dt.Rows)
            {
                T_OperationLog model = ToModel(row);
                list.Add(model);
            }
            return list;
        }
        public void Insert(Guid OperatorId, string ActionDesc)
        {
            SqlHelper.ExecuteNonQuery(@"Insert Into T_OperationLog(Id,OperatorId,MakeDate,ActionDesc)
                                    values(newid(),@OperatorId,getdate(),@ActionDesc)"
                , new SqlParameter("@OperatorId", OperatorId)
                , new SqlParameter("@ActionDesc", ActionDesc));
        }
        public void Update(T_OperationLog model)
        {
            SqlHelper.ExecuteNonQuery("update T_OperationLog set Id=@Id,OperatorId=@OperatorId,MakeDate=@MakeDate,ActionDesc=@ActionDesc where Id=@Id", new SqlParameter("@Id", model.Id), new SqlParameter("@OperatorId", model.OperatorId), new SqlParameter("@MakeDate", model.MakeDate), new SqlParameter("@ActionDesc", model.ActionDesc));
        }
        public T_OperationLog GetById(Guid id)
        {
            DataTable dt = SqlHelper.ExecuteDataTable("select Id,OperatorId,MakeDate,ActionDesc from T_OperationLog where Id=@Id", new SqlParameter("@Id", id));
            if (dt.Rows.Count <= 0)
            {
                return null;
            }
            else
            {
                return ToModel(dt.Rows[0]);
            }
        }
        public void DeleteById(Guid id)
        {
            SqlHelper.ExecuteNonQuery("delete T_OperationLog where Id = @id", new SqlParameter("@id", id));
        }
    }
}

 


4、日志的使用

4.1在登陆界面中调用

new T_OperationLogDAL().Insert(op.Id, "登陆成功");

new T_OperationLogDAL().Insert(op.Id, "登陆失败");

4.2 在软件操作设置中调用

new T_OperationLogDAL().Insert(OperatorId, "新增操作员" + op.UserName);

new T_OperationLogDAL().Insert(OperatorId, "更新操作员(不更新密码)" + txtUserName.Text);

new T_OperationLogDAL().Insert(OperatorId, "更新操作员(更新密码)" + txtUserName.Text);

new T_OperationLogDAL().Insert(CmdHelper.GetOperatorId(), "删除操作员" + op.UserName);


5、日志管理查询与显示OperatorLogWindows

5.1 UI

<Window x:Class="HRMSys.UI.SystemMgr.OperatorLogWindows"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="日志查询" Height="700" Width="600" Loaded="Window_Loaded_1">
    <Grid>
        <DockPanel>
            <GroupBox Height="100" Header="搜索条件" DockPanel.Dock="Top">
                <Grid>
                    <CheckBox Name="cbSearchByOpertor" Content="操作员" HorizontalAlignment="Left" Margin="32,13,0,0" VerticalAlignment="Top"/>
                    <CheckBox Name="cbSearchByMakeDate" Content="操作日期" HorizontalAlignment="Left" Margin="221,13,0,0" VerticalAlignment="Top"/>
                    <CheckBox Name="cbSearchByAction" Content="操作描述" HorizontalAlignment="Left" Margin="32,52,0,0" VerticalAlignment="Top"/>
                    <ComboBox Name="cmbOperator" DisplayMemberPath="UserName" SelectedValuePath="Id" HorizontalAlignment="Left" Margin="96,10,0,0" VerticalAlignment="Top" Width="120"/>
                    <DatePicker Name="dpBeginDate" HorizontalAlignment="Left" Margin="291,8,0,0" VerticalAlignment="Top"/>
                    <DatePicker Name="dpEndDate" HorizontalAlignment="Left" Margin="395,8,0,46"/>
                    <TextBlock HorizontalAlignment="Left" Margin="378,12,0,0" TextWrapping="Wrap" Text="至" VerticalAlignment="Top"/>
                    <TextBox Name="txtAction" HorizontalAlignment="Left" Height="23" Margin="102,49,0,0" TextWrapping="Wrap" Text="" VerticalAlignment="Top" Width="184"/>
                    <Button Name="btnSearch" Content="搜索" HorizontalAlignment="Left" Margin="315,49,0,0" VerticalAlignment="Top" Width="75" Click="btnSearch_Click"/>

                </Grid>
            </GroupBox>
            <DataGrid Name="datagrid" AutoGenerateColumns="False" IsEnabled="False">
                <DataGrid.Columns>
                    <DataGridComboBoxColumn Header="操作员" SelectedValueBinding="{Binding OperatorId}"
                                            SelectedValuePath="Id"
                                            DisplayMemberPath="UserName" x:Name="colOperator"></DataGridComboBoxColumn>
                    <DataGridTextColumn Header="操作日期" Binding="{Binding MakeDate}" Width="100" ></DataGridTextColumn>
                    <DataGridTextColumn Header="操作描述" Binding="{Binding ActionDesc}" Width="300" ></DataGridTextColumn>
                </DataGrid.Columns>
            </DataGrid>
        </DockPanel>
    </Grid>
</Window>

5.2 交互

namespace HRMSys.UI.SystemMgr
{
    /// <summary>
    /// OperatorLogWindows.xaml 的交互逻辑
    /// </summary>
    public partial class OperatorLogWindows : Window
    {
        public OperatorLogWindows()
        {
            InitializeComponent();
        }

        private void btnSearch_Click(object sender, RoutedEventArgs e)
        {
            List<string> whereList = new List<string>();
            List<SqlParameter> parameter = new List<SqlParameter>();
            if (cbSearchByOpertor.IsChecked == true)
            {
                if (cmbOperator.SelectedIndex <0)
                {
                    MessageBox.Show("请选择操作员");
                    return;
                }

                whereList.Add("@OperatorId = OperatorId");
                parameter.Add(new SqlParameter("@OperatorId", cmbOperator.SelectedValue));
            }
            if (cbSearchByMakeDate.IsChecked == true)
            {
                whereList.Add("MakeDate Between @dpBeginDate and @dpEndDate");
                parameter.Add(new SqlParameter("@dpBeginDate", dpBeginDate.SelectedDate));
                parameter.Add(new SqlParameter("@dpEndDate", dpEndDate.SelectedDate));
            }
            if (cbSearchByAction.IsChecked == true)
            {
                whereList.Add("ActionDesc like @ActionDesc");
                parameter.Add(new SqlParameter("@ActionDesc", "%"+txtAction.Text+"%"));
            }
            //如果没有选择
            if (whereList.Count <= 0)
            {
                MessageBox.Show("至少选择一个条件");
                return;
            }
            string sql = "select Id,OperatorId,MakeDate,ActionDesc from T_OperationLog where "+string.Join(" and ",whereList);
            T_OperationLog[] logs =  new T_OperationLogDAL().Search(sql, parameter.ToArray());
            datagrid.ItemsSource = logs;
            
        }

        private void Window_Loaded_1(object sender, RoutedEventArgs e)
        {
            Operator[] op = new OperatorDAL().ListAll();
            cmbOperator.ItemsSource = op;
            colOperator.ItemsSource = op;

            dpBeginDate.SelectedDate = DateTime.Today;
            dpEndDate.SelectedDate = DateTime.Today;
        }
    }
}

 

 

转载于:https://www.cnblogs.com/xjgby/archive/2013/05/15/3079555.html

  • 0
    点赞
  • 0
    收藏
  • 0
    评论
为了生活中,工作中记住要记录的东西,以便查询(包括:工作相关信息,生活常识,笑话等),而做的一个小软件以下称notes。 因为我是做Winform程序的,所以notes的初期是用winForm做的;后来学习了wpf,又把软件界面移植到wpf上。 采了XML数据存取,使用了Linq进行查询; 功能主要分为五大块:第一 记录;第二 查询(根据标题查询,根据类型查询,综合查询 );第三 对记录内容的相关操作(如:存储文件的合并、发送邮件、根据类型分割删除保存、删除、修改、提取存储文件中所有类型、背景色的设置、字体的设置等);第四 附加功能(1、映射功能列表;2、文件的查询;3、在指定目录中进行删除操作) 第五 反馈意见 对第四中附加功能介绍: 1、映射功能列表:把平时用到的所有文件映射到一个界面中;可以做备注说明;(背景:平时会用到很多软件,其中包括网上载的。但是时间过的久了,则忘记是否下载过,或下载后保存的位置,又或者忘记下载后软的功能等等) 2、文件夹中快速查找文件或文件夹,支持模糊查询;查到的文件或文件夹可以即时打开; 3、删除文件或文件夹,此功能快速的删除指定的文件或文件夹,只支持完全匹配。 对第五的说明:之所以把意见反馈单独拿出是因为:如果那位兄弟姐妹能在使用过程中提出5条有用的建议(包括软件Bug,使用的习惯等,我将会根据您的要求送任意一个模块的源码,如果能提出建设性意见的可以随意指软件中的一块功能,我送上源码,并且可以做讲解说明) 1、【Linq to XML模块】 2、【加密解密模块】 3、【工具模块(发送邮件,MD5解密,自动生成验证码等)】 4、【WPF数据验证模块】 5、【WPF进度条模块】 下载即可使用。 本人希望大家都可以把生活中,工作中值的记录的东西全部记录下来。 界面移值到wpf时,所用到功能有: 1、数据验证 2、数据绑定 3、背景设置 4、资源的调用 5、触发器的使用 6、命令的使用 8、打开文件或文件夹,保存文件 9、界面托盘 10、Grid,TextBox,ListBox,ListView,Lable等基本控件的使用 11、窗口(隐藏,最小化,最大化,重写关闭,置顶) 12、进度条的使用 13、异步的使用 14、多线程的使用 15、右键菜单的使用 16、字体的设置 17、界面的刷新 18、跨线程调用方法 19、简单的动画 20、界面的布局

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值