绩效考核管理项目|记录1

news2024/9/19 10:55:05

项目用C#winform+SQL Server写的,现在记录一下学习到的新东西。

winform工具

splitContainer:分割出两个容器,能添加面板之类的工具

treeview:展示标签页的分层集合(用户管理、基数管理......),有编辑器添加分支

datagridview:能显示行和列的数据。编辑器能手动添加内容,如果不添加,会自动按照代码的方法名去自动添加名称。

把其他设计图放在主设计图上显示的方法:

 这里改true(能承载副窗体)

然后改副设计图成无边框

 修改窗体在容器中是最大化

最后写代码

FormUserManager formUserManager = new FormUserManager();
主
formUserManager.MdiParent = this;
副
formUserManager.Parent = splitContainer1.Panel2;
formUserManager.Show();

每个工具(按键,标签......)都能锁定布局,如图是右上

连接数据库的操作

1.确保数据库的服务器、用户名和密码都没错。

2.创建一个SQLhelper的类文件,目的是在数据库中操作,代码如下

namespace appraisal_system
{
    public class SqlHelper
    {
        //连接字符串(和数据库连接的基础)
        public static string ConStr { get; set; }
        //获取数据库的数据
        public static DataTable ExecuteTable(string cmdText)
        {
            using (SqlConnection con = new SqlConnection(ConStr))
            {
                con.Open();
                //仓库管家
                SqlCommand cmd = new SqlCommand(cmdText, con);
                //推车
                SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(cmd);
                //货车
                DataSet ds = new DataSet();
                //货车满载,返回第一个集装箱
                sqlDataAdapter.Fill(ds);
                return ds.Tables[0];
            }
        }
        //在数据库除了取的操作不行,其他增删改都可以
        public static int ExecuteNonQuery(string cmdText)
        {
            using (SqlConnection con = new SqlConnection(ConStr))
            {
                con.Open();
                SqlCommand cmd = new SqlCommand(cmdText, con);
                //返回受影响(增删改)的行数
                int rows = cmd.ExecuteNonQuery();
                if (rows <= 0)
                {
                    throw new Exception("数据库操作失败");
                }
                return rows;
            }
        }
    }
}

3.找到app.config这个文件,在里面写入代码。保存后运行就能连接到数据库了。

    <connectionStrings>
        <add name ="ConStr" connectionString="Data Source=YYY\YYY;database=绩效考核管理;uid=绩效;pwd=123"/>
    </connectionStrings>

(这段代码的含义:<add name="MyConnectionString"  
         connectionString="Data Source=服务器名称(这里是可以改成网段的);Initial Catalog=数据库名称;User ID=用户名;Password=密码"/>  

 写模型(模型应用在用户管理界面)

职位库(身份下拉框):

namespace appraisal_system.Models
{
    public class AppraisalBases
    {
        public int Id { get; set; }
        public string baseType { get; set; }
        public int AppraisalBase { get; set; }
        public bool IsDel { get; set; }

        public static List<AppraisalBases> ListAll()
        {
            List<AppraisalBases> appraisalBases = new List<AppraisalBases>();
            DataTable dt = SqlHelper.ExecuteTable("select * from 职位库");
            foreach (DataRow dr in dt.Rows)
            {
                appraisalBases.Add(ToModel(dr));
            }
            return appraisalBases;
        }

        private static AppraisalBases ToModel(DataRow dr)
        {
            AppraisalBases appraisalBases = new AppraisalBases();
            appraisalBases.Id = (int)dr["ID"];
            appraisalBases.baseType = (string)dr["职位"];
            appraisalBases.AppraisalBase = (int)dr["职位奖金"];
            appraisalBases.IsDel = (bool)dr["是否辞职"];
            return appraisalBases;
        }
    }
}

人员库(在datagridview中显示):

代码和上面职位库的代码相同,需要哪个列就自己添加哪个,这边因为有些列不需要,数据库的代码得专门改一下。

DataTable dt = SqlHelper.ExecuteTable("SELECT u.ID ,u.用户名,u.性别,u.职位代码,u.是否辞职,a.职位,a.职位奖金 FROM 人员库 u LEFT JOIN 职位库 a ON u.职位代码 = a.ID");

这段代码是SQL查询语句,其中LEFT JOIN是连接操作的一种。LEFT JOIN(左连接)是根据两个表之间的某个列进行匹配,返回左表中的所有记录以及右表中匹配的记录。如果没有在右表中找到匹配的记录,则返回NULL值。

在这个查询中,人员库(u)和职位库(a)进行了左连接,连接条件是u.职位代码 = a.ID。这意味着返回的结果将包含人员库中的所有记录,以及与职位库中ID匹配的职位和职位奖金信息。如果没有找到匹配的职位库记录,职位和职位奖金字段将为NULL。

通过使用LEFT JOIN,你可以获取人员库中的所有记录,即使在职位库中没有与之匹配的记录,也可以获得人员库中的信息。这对于需要获取人员完整信息但不必关注是否有匹配职位的情况很有用。

 目前的效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1212848.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

现货黄金职业交易员怎么使用技术分析?

职业的交易员每天要处理很多不同的信息&#xff0c;其中只一部分是涉及技术指标。在这一部分处理技术分析的时间里&#xff0c;只能再分出少之又少的时间给技术指标。那职业交易员会利用做技术指标做什么呢&#xff1f;下面我们就来讨论一下。 识别行情。技术指标的主要作用就是…

codemirror怎么高亮指定文本

先上图 ![在这里插入图片描述](https://img-blog.csdnimg.cn/c070cde11a314c45a859ccb0ca7f41c7.png 产品经理的需求是编辑框中用了占位符的话&#xff0c;占位符中的变量高亮&#xff0c;简单吧&#xff01;还有一个附加要求&#xff0c;必须是外部定义的变量&#xff0c;不…

单区域OSPF配置

配置命令步骤&#xff1a; 1.使用router ospf 进程ID编号 启用OSPF路由 2.使用network 直连网络地址 反掩码 area 0 将其归于区域0 注意&#xff1a;1.进程ID编号可任意&#xff08;1-65535&#xff09;2.反掩码用4个255相减得到 如下图&#xff0c;根据给出要求配置OSPF单区…

【前端】使用json-server报错

当我们使用json-server模仿后端接口时需要运行json-server --watch index.json这个命令生成增删改查接口但是可能会报这个错误&#xff0c;如图 这时我们运行 npm i json-server -g命令即可&#xff0c;然后再重新运行json-server --watch index.json就行了

如何快速将钉钉员工信息同步到飞书

当企业内部在使用钉钉跟飞书时&#xff0c;那么当钉钉员工信息发生更改时&#xff0c;我们应该如何将信息快速同步到飞书上呢&#xff0c;接下来我们借助RestCloud AppLink平台进行演示。 第一步&#xff1a;获得钉钉以及飞书认证授权 钉钉授权 钉钉接入采用自建应用的方式&…

数字化档案管理系统解决方案

数字化档案管理系统解决方案是指将传统的纸质档案转化为数字化档案&#xff0c;采用计算机和网络技术实现对档案的存储、检索、管理、共享等操作的过程。 专久智能数字化档案管理解决方案及措施可以包括以下几个方面&#xff1a; 1. 采用数字化技术对档案进行数字化处理&#x…

拜耳阵列(Bayer Pattern)以及常见彩色滤波矩阵(CFA)

一、拜耳阵列的来源 图像传感器将光线转化成电流&#xff0c;光线越亮&#xff0c;电流的数值就越大&#xff1b;光线越暗&#xff0c;电流的数值就越小。图像传感器只能感受光的强弱&#xff0c;无法感受光的波长。由于光的颜色由波长决定&#xff0c;所以图像传播器无法记录…

北大腾讯打造多模态15边形战士!语言作“纽带”,拳打脚踢各模态,超越Imagebind

AI4Happiness 投稿 量子位 | 公众号 QbitAI 北大联合腾讯打造了一个多模态15边形战士&#xff01; 以语言为中心&#xff0c;“拳打脚踢”视频、音频、深度、红外理解等各模态。 具体来说&#xff0c;研究人员提出了一个叫做LanguageBind的多模态预训练框架。 用语言作为与其…

如何在 Linux 上部署 RabbitMQ

如何在 Linux 上部署 RabbitMQ 文章目录 如何在 Linux 上部署 RabbitMQ安装 Erlang从预构建的二进制包安装从源代码编译 Erlang RabbitMQ 的安装使用 RabbitMQ Assistant 连接 RabbitMQ Assistant 是一款优秀的RabbitMQ 可视化管理工具&#xff0c;提供丰富的管理功能。下载地址…

亚里士多德的思想统治西方世界,实体论证明人不是猪

苏格拉底、柏拉图、亚里士多德&#xff0c;并称古希腊三贤。 公元前384年&#xff0c;亚里士多德出生在马其顿的奴隶主家庭&#xff0c;父亲是马其顿国王腓力二世的宫廷御医。 公元前367年&#xff0c;亚里士多德迁居到雅典&#xff0c;进入柏拉图学园&#xff0c;跟随柏拉图…

systemverilog:interface中的modport用法

使用modport可以将interface中的信号分组并指定方向&#xff0c;方向是从modport连接的模块看过来的。简单示例如下&#xff1a; interface cnt_if (input bit clk);logic rstn;logic load_en;logic [3:0] load;logic [7:0] count;modport TEST (input clk, count,output rst…

知识解读:香港轻量云/云服务器/VPS性能差距解读

​  提起香港轻量云/云服务器/VPS 这三类&#xff0c;往往汇聚了中小企业和开发者等群体的讨论声音。当然&#xff0c;这跟它们本身产品定位有关&#xff0c;加上在初级配置这块价格上相差不大&#xff0c;也因此经常被拿来对比。 首先来简单了解一下最基础的区别&#xff1a…

C嘎嘎模板

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;了解什么是模板&#xff0c;并且能熟练运用函数模…

力扣160:相交链表

力扣160&#xff1a;相交链表 题目描述&#xff1a; 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式…

【MySQL】随手笔记(积跬步至千里)

一、常用函数 &#xff08;1&#xff09;uuid() select uuid(); //生成随机数 select replace(uuid(),-,); //将随机数的-去掉 select upper(replace(uuid(),-,)); ///改成大写应用举例&#xff1a; &#xff08;1&#xff09;非自增主键 非自增主键&#xff0c;insert语…

【LabVIEW学习】1.对labview的初步使用,控制数据流动,快捷键,参考手册打不开怎么办

一。初步使用labview 1.程序图标 2.打开之后继续点击新建VI 原因&#xff1a;最后的程序后缀就是 .vi 3.新建之后&#xff0c;会有三个界面&#xff08;没有不要紧&#xff0c;找找肯定有&#xff09; 4.程序操作方法 1.拖动控件到前面板 2.此时程序框图会出现对应的控件 拖动…

分享篇:最近在研究的AIGC内容

最近在研究AIGC自助生成报告的内容&#xff0c;分享一些查到的资料 前言&#xff08;一些使用心得&#xff09; 1、大模型会颠覆一些生产力&#xff0c;让强的人更强 归根到底&#xff0c;大模型是工具&#xff0c;和早些年的excel、python、ps没差&#xff0c;能不能用好工…

今年副业比主业赚得多...

我是从20年开始接触副业的&#xff0c;主要是在程序员外包平台上接单。从一开始的月入0到几百&#xff0c;到现在每个月稳定有小一万的收入。这个月接了一个比较大的项目&#xff0c;结款之后发现今年的副业已经比主业赚得多了&#xff0c;简直美滋滋~ 今年主业收入8w&#xff…

优维产品最佳实践第14期:让重要告警能有序跟进,最终根治

监控系统的首要任务是利用特定指标来反映系统内部的健康状态&#xff0c;当指标异常时&#xff0c;会触发告警。对于简单告警的处理&#xff0c;基于告警轨迹可清晰记录和观察告警的状态变化过程。 然而&#xff0c;对于一个复杂告警的处理&#xff0c;可能需要多角色多部门协…

NSSCTF第12页(2)

[CSAWQual 2019]Unagi 是xxe注入&#xff0c;等找时间会专门去学一下 XML外部实体&#xff08;XXE&#xff09;注入 - 知乎 【精选】XML注入学习-CSDN博客 【精选】XML注入_xml注入例子-CSDN博客 题目描述说flag在/flag下 发现有上传点&#xff0c;上传一句话木马试试 文件…