项目用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,你可以获取人员库中的所有记录,即使在职位库中没有与之匹配的记录,也可以获得人员库中的信息。这对于需要获取人员完整信息但不必关注是否有匹配职位的情况很有用。
目前的效果: