项目总结:HR员工系统

介绍两个模块:员工入职,和员工返职

1、员工入职:

这一部分模块主要涉及的是ComboBox和LookUpEdit(DevExpress)绑定数据源,GV列添加超链接列,超链接文本弹出窗体传值取值,单线程从Access数据库读取信息,Datagridview添加ComboBox列并赋值等。还涉及了递归部门的问题,这个在我其他文章里有单独讲,这里就不贴了。需要的可以移步https://blog.csdn.net/qq_38374540/article/details/106259895这里查看

  • ComboBox和LookUpEdit(DevExpress)绑定数据源

       其实我觉得这两个的主要区别就是两列和多列的问题,其他的功能暂时没涉及到,这里ComboBox只能绑定两列,显示只能显示一列,而LookupEdit可以绑定表。

            //ComboBox
            string sql;
            sql = "select company_FK,companyName from sys_tx_kqSystem_userLog where ISNULL(isuse,'N')='Y' and userID='" + FormM.lbluserLog.Text.Trim() + "'";
            DataTable dtRzgs;
            if (!DB.AF.execSql(sql, sqlconn, out dtRzgs))
            {
                return;
            }
            DataRow drRz = dtRzgs.NewRow();
            drRz["company_FK"] = "";
            drRz["companyName"] = "";
            dtRzgs.Rows.InsertAt(drRz, 0);
            ddlRzgs.DataSource = dtRzgs;
            ddlRzgs.ValueMember = "company_FK";
            ddlRzgs.DisplayMember = "companyName";

            //LookupEdit
            sql = "select replace(Code,' ','') as Code, replace(Name,' ','') as Name,replace( Remark,' ','') as Remark from sys_tx_zply a left join sys_tx_kqSystem b on a.kqSystem = b.kqSystem where b.company_FK = '" + ddlRzgs.SelectedValue.ToString().Trim() + "'";
            if (!DB.AF.execSql(sql, sqlconn, out dtzply))
            {
                return;
            }
            DataRow drzply = dtzply.NewRow();
            drzply["Code"] = "";
            drzply["Name"] = "";
            drzply["Remark"] = "";
            dtzply.Rows.InsertAt(drzply, 0);
            ddlzply.Properties.ShowHeader = false;
            ddlzply.Properties.ValueMember = "Code";
            ddlzply.Properties.DisplayMember = "Name";
            ddlzply.Properties.DataSource = dtzply;
            ddlzply.Properties.BestFitMode = BestFitMode.BestFitResizePopup;
            ddlzply.EditValue = "";
            ddlzply.Text = "";
  • GV列添加超链接列
            DataGridViewLinkColumn dlink = new DataGridViewLinkColumn();
            dlink.Text = "删除";
            dlink.Name = "linkDelete";
            dlink.HeaderText = "删除";
            dlink.UseColumnTextForLinkValue = true;
            GV.Columns.Insert(0, dlink);
  • 超链接文本弹出窗体传值取值
  //窗体实例化,弹出窗体,这里有个ShowDialog()和Show()的小知识点

        private void labgz_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            try
            {
                //因为我是表头表身都有这个超链接,所以我在传的时候判断了一下是点击表头的还是点击表身的,0是指行项,但是表头没有行项,所以传了0
                GongZhong gzForm = new GongZhong(this, "head", 0);
                gzForm.gz(ddlRzgs.SelectedValue.ToString().Trim());
                gzForm.ShowDialog();
                return;
            }
            catch (Exception ec)
            {
                MessageBox.Show("错误:" + ec.StackTrace, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
        }
//表身的就写在GV的点击事件里
 private void GV_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

            try
            {

                #region 删除
                string buttonText = this.GV.Rows[e.RowIndex].Cells[0].Value.ToString().Trim();
                if (buttonText == "删除" && e.RowIndex != -1 && e.ColumnIndex == 0)
                {

                    if (MessageBox.Show("确定删除吗?", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
                    {
                        string errMsg, sql;

                        this.GV.Rows.RemoveAt(e.RowIndex);
                        sesstab = (DataTable)GV.DataSource;
                        if (GV.Rows.Count > 0)
                        {
                            byte[] byteImage = (byte[])sesstab.Rows[0]["照片"];
                            MemoryStream ms = new MemoryStream(byteImage);
                            Bitmap bmpt = new Bitmap(ms);
                            pictureBox1.Image = bmpt;
                        }
                        else
                        {
                            if (ddlzc.SelectedValue.ToString() == "0")
                            {
                                //MessageBox.Show(ddlRzgs.SelectedValue.ToString().Trim());

                                MessageBox.Show("保存成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                sql = "select a.companyName 公司, b.deptName 部门, a.userID 工号, a.userName 姓名, a.Pycounts 入职次数, a.Sfz 身份证号码, a.G_sfzyxr 身份证生效日 " +
                                    " , a.G_sfzsxr 身份证失效日, a.G_fzjg 签发机关, a.BornDate 出生日期,case when sex = '0' then '男' else '女' end 性别, " +
                                    " PyDate 入职日期,case when IfDaKa = 1 then '是' else '否' end 打卡, Nation_Name 民族, HomeAddr 籍贯, " +
                                    " case when ISNULL(isZc,'')= 'E' then '转厂入职' when ISNULL(isZc,'')= 'D' then '转厂离职' else '否' end 转厂, " +
                                    " case when State = '0' then '在职' else '离职' end 状态, " +
                                    " a.G_cy 人员性质, a.G_ygxz 用工性质, c.Name 计薪方式, d.Name 工种, a.G_zply 招聘途径, a.G_ 所属厂区, a.G_dkcq 打卡厂区, SUBSTRING(a.Memo, 1, CHARINDEX(',', a.Memo) - 1) 介绍人,e.Name 招聘来源, a.Memo 备注, " +
                                    " LzDate 离职日期,'[' + whr + ']' + a.whrName 维护人,a.whrq 维护日期, a.photo 照片 " +
                                    " from sys_tx_employee a " +
                                    " left join sys_tx_kqSystem_dept b on a.Dept = b.deptID and a.company_FK = b.company_FK " +
                                    " left join sys_tx_Jxfs c on a.Jxfs = c.Code " +
                                    " left join sys_tx_GongZhong d on a.GongZhong = d.Code and(select kqSystem from sys_tx_kqSystem where company_FK = a.company_FK) = d.kqSystem " +
                                    " left join sys_tx_zply e on replace(e.Code, ' ', '') = replace(SUBSTRING(a.Memo, CHARINDEX(',', a.Memo) + 1, len(a.Memo) - charindex(',', a.Memo)), ' ', '') " +
                                    " where a.company_FK = '" + ddlRzgs.SelectedValue.ToString() + "' and convert(varchar(10), a.whrq, 120) = convert(varchar(10), getdate(), 120) order by a.whrq desc ";
                                DataTable dt;
                                if (!DB.AF.execSql(sql, sqlconn, out dt, out errMsg))
                                {
                                    if (errMsg != "")
                                    {
                                        MessageBox.Show(errMsg, "错误:", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                        return;
                                    }
                                }
                                GV.DataSource = dt;

                            }
                            else if (ddlzc.SelectedValue.ToString() == "1")
                            {

                                MessageBox.Show("转厂成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                sql = " select a.companyName 公司,b.deptName 部门 ,userID 工号,userName 姓名,Pycounts 入职次数,Sfz 身份证号码,BornDate 出生日期,case when sex = '0' then '男' else '女' end 性别, " +
                                    " PyDate 入职日期,case when IfDaKa = 1 then '是' else '否' end 打卡, Nation_Name 民族, HomeAddr 籍贯, " +
                                    " case when ISNULL(isZc,'')= 'E' then '转厂入职' when ISNULL(isZc,'')= 'D' then '转厂离职' else '否' end 转厂, " +
                                    " case when State = '0' then '在职' else '离职' end 状态, " +
                                    " a.G_cy 人员性质, a.G_ygxz 用工性质, c.Name 计薪方式, d.Name 工种, a.G_zply 招聘途径, a.G_ 所属厂区, a.G_dkcq 打卡厂区, SUBSTRING(a.Memo, 1, CHARINDEX(',', a.Memo) - 1) 介绍人,e.Name 招聘来源, a.Memo 备注, " +
                                    " LzDate 离职日期,'[' + whr + ']' + whrName 维护人,a.whrq 维护日期, photo 照片,G_sfzyxr 身份证生效日, G_sfzsxr 身份证失效日,G_fzjg 签发机关 " +
                                    " from sys_tx_employee a " +
                                    " left join sys_tx_kqSystem_dept b on a.Dept = b.deptID and a.company_FK = b.company_FK " +
                                    " left join sys_tx_Jxfs c on a.Jxfs = c.Code " +
                                    " left join sys_tx_GongZhong d on a.GongZhong = d.Code and(select kqSystem from sys_tx_kqSystem where company_FK = a.company_FK) = d.kqSystem " +
                                    " left join sys_tx_zply e on replace(e.Code, ' ', '') = replace(SUBSTRING(a.Memo, CHARINDEX(',', a.Memo) + 1, len(a.Memo) - charindex(',', a.Memo)), ' ', '') " +
                                    " where a.company_FK = '" + ddlRzgs.SelectedValue.ToString().Trim() + "' and convert(varchar(10), a.whrq, 120) = convert(varchar(10), getdate(), 120) and ISNULL(isZc,'') = 'E' order by a.whrq desc ";
                                DataTable dt;
                                if (!DB.AF.execSql(sql, sqlconn, out dt, out errMsg))
                                {
                                    if (errMsg != "")
                                    {
                                        MessageBox.Show(errMsg, "错误:", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                        return;
                                    }
                                }
                                GV.DataSource = dt;
                            }

                            GV.Columns[0].Visible = false;
                            GV.Columns[1].Visible = false;
                            GV.Columns["工种"].Visible = false;
                            GV.Columns["招聘来源"].Visible = false;
                            GV.Columns["计薪方式"].Visible = false;

                            tm.Stop();
                            btnReadCard.Text = "开始读卡";

                            txtRzrq.Text = DateTime.Now.ToShortDateString().ToString();
                            ddldept.Text = "";
                            btndept.Text = "";
                            deptId = "";
                            ddlDk.Text = "是";
                            ddlzc.Text = "否";
                            pictureBox1.Image = null;
                            ddljxfs.Text = "";
                            txtgzCode.Text = "";
                            txtgzName.Text = "";
                            ddlsscq.Text = "";
                            ddlDKArea.Text = "";
                            ddlPerXZ.Text = "";
                            ddlYGXZ.Text = "";
                            ddlZPTJ.Text = "";
                            txtjsr.Text = "";

                        }
                    }
                    else return;
                }
                #endregion

                #region 工种
                if (GV.Columns[e.ColumnIndex].Name == "btnd" && e.RowIndex != -1)
                {
                    GongZhong gzForm = new GongZhong(this, "gv", e.RowIndex);
                    gzForm.gz(ddlRzgs.SelectedValue.ToString().Trim());
                    gzForm.ShowDialog();
                    return;

                }
                #endregion



            }
            catch (Exception ec)
            {
                MessageBox.Show("错误:" + ec.StackTrace, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
        }

//这是我另一个窗体,值传过来之后先赋值给全局变量,因为别的地方要用到
  public GongZhong(Form_employee_add fmz , string name,int row)
        {
            InitializeComponent();
            fm = fmz;
            flag = name;
            rowNo = row;
        }
//点击选择后把值写回原来的窗体
  private void GV_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                if (GV.Columns[e.ColumnIndex].Name == "btnd" && e.RowIndex != -1 )
                {
                    string Code, Name;
                    Code = GV.Rows[e.RowIndex].Cells[1].Value.ToString().Trim();
                    Name = GV.Rows[e.RowIndex].Cells[2].Value.ToString().Trim();

                    if (flag == "head")
                    {
                        fm.txtgzCode.Text = Code;
                        fm.txtgzName.Text = Name;
                    }
                    else if (flag == "gv")
                    {
                        fm.GV.Rows[rowNo].Cells["工种"].Value = Code;
                    }
                    this.Close();
                    return;
                }
            }
            catch (Exception ec)
            {
                MessageBox.Show("错误:" + ec.StackTrace, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }
        }
  • 单线程从Access数据库读取信息
        public Thread threads;
        public void getBarCodeData()
        {

            try
            {

                bz = 0;
                string sqlAccess = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Program Files (x86)\神思二代证\ssid.mdb";
                OleDbConnection conn;
                conn = new OleDbConnection(sqlAccess);

                DataSet ds = new DataSet();
                conn.Open();
                string sql = "select * from citizen where isDK = 0 order by ID asc ";
                OleDbDataAdapter oda = new OleDbDataAdapter(sql, conn);
                OleDbCommandBuilder cb = new OleDbCommandBuilder(oda);
                oda.UpdateCommand = cb.GetUpdateCommand();
                oda.Fill(ds);
                DataTable dt;
                dt = ds.Tables[0];
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    string sqln = "select count(userID) as iszz  from sys_tx_employee where State = 0 and Sfz= '" + dt.Rows[i]["IDCardNum"].ToString() + "'";
                    DataTable dtn;
                    if (!DB.AF.execSql(sqln, sqlconn, out dtn))
                    {
                        MessageBox.Show("获取员工在职信息失败!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                        return;
                    }
                    if (dtn.Rows[0]["iszz"].ToString() == "0")
                    {

                        GV.Columns[0].Visible = true;
                        string sqlPyCounts = "select COUNT(userID)+1 as PyCounts  from sys_tx_employee where ISNULL(isZc,'N') in ('N','E') and Sfz= '" + dt.Rows[i]["IDCardNum"].ToString() + "'";
                        DataTable dtPyCounts;
                        if (!DB.AF.execSql(sqlPyCounts, sqlconn, out dtPyCounts))
                        {
                            MessageBox.Show("获取员工入职次数等信息失败!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            return;
                        }
                        DataRow dr = sesstab.NewRow();
                        dr["身份证号"] = dt.Rows[i]["IDCardNum"].ToString();
                        dr["姓名"] = dt.Rows[i]["Name"].ToString();
                        dr["性别"] = dt.Rows[i]["sex"].ToString();
                        dr["民族"] = dt.Rows[i]["Folk"].ToString();
                        dr["出生日期"] = dt.Rows[i]["BirthDay"].ToString();
                        dr["住址/籍贯"] = dt.Rows[i]["Address"].ToString();
                        dr["签发机关"] = dt.Rows[i]["IssueOrgan"].ToString();
                        dr["有效期始"] = dt.Rows[i]["AvailabilityBegin"].ToString();
                        dr["有效期止"] = dt.Rows[i]["AvailabilityEnd"].ToString();
                        dr["入职次数"] = dtPyCounts.Rows[0]["PyCounts"].ToString();
                        dr["照片"] = dt.Rows[i]["Photo"];

                        if (GV.DataSource != null)
                        {
                            DataGridViewRow row = GV.Rows.Cast<DataGridViewRow>()
                                .FirstOrDefault(rd => rd.Cells[6].EditedFormattedValue.Equals(dt.Rows[i]["IDCardNum"].ToString()));
                            if (row != null) GV.Rows.Remove(row);
                            sesstab.Rows.InsertAt(dr, 0);
                            GV.Rows[0].Cells["计薪方式"].Value = ddljxfs.SelectedValue;
                            GV.Rows[0].Cells["工种"].Value = txtgzCode.Text;
                            GV.Rows[0].Cells["招聘来源"].Value = ddlzply.EditValue;
                            GV.Rows[0].Cells["介绍人"].Value = txtjsr.Text;
                        }
                    }
                    else if (dtn.Rows[0]["iszz"].ToString() == "1")
                    {
                        MessageBox.Show("该员工【" + dt.Rows[i]["Name"].ToString() + "】在HR系统为在职状态!不允许再次入职!");
                    }
                    else
                    {
                        MessageBox.Show("该员工【" + dt.Rows[i]["Name"].ToString() + "】在HR系统存在多条在职信息");
                    }
                }
                if (dt.Rows.Count != 0)
                {
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        dt.Rows[i]["isDK"] = -1;
                    }
                    oda.Update(dt);
                    ds.AcceptChanges();
                }
                conn.Close();
                int r = dt.Rows.Count;
                if (sesstab.Rows.Count > 0)
                {
                    byte[] byteImage = (byte[])sesstab.Rows[0]["照片"];
                    MemoryStream ms = new MemoryStream(byteImage);
                    Bitmap bmpt = new Bitmap(ms);
                    pictureBox1.Image = bmpt;
                }
                Thread.Sleep(1000);
                bz = 1;
                return;
            }
            catch (Exception ec)
            {
                MessageBox.Show(ec.Message);
                bz = 1;
                return;
            }
        }
        private void tm_Tick(object sender, EventArgs e)
        {
            tm.Stop();
            if (bz == 1)
            {
                if (ddlzc.SelectedValue.ToString() == "0")
                    threads = new Thread(getBarCodeData);
                else if (ddlzc.SelectedValue.ToString() == "1")
                    threads = new Thread(getBarCodeDataZC);
                threads.IsBackground = true;
                threads.Start();
            }
            tm.Start();
            return;
        }
       private void btnbegin_Click(object sender, EventArgs e)
        {
            if (btnReadCard.Text == "开始读卡")
            {
                btnReadCard.Text = "结束读卡";
                GV.Columns[0].Visible = true;
                GV.Columns[1].Visible = true;
                GV.Columns["工种"].Visible = true;
                GV.Columns["招聘来源"].Visible = true;
                GV.Columns["计薪方式"].Visible = true;
                if (ddlzc.SelectedValue.ToString() == "0")
                {
                    #region GV
                    GV.DataSource = null;
                    sesstab = new DataTable();
                    sesstab.Columns.Add("介绍人", typeof(string));
                    sesstab.Columns.Add("身份证号", typeof(string));
                    sesstab.Columns.Add("姓名", typeof(string));
                    sesstab.Columns.Add("性别", typeof(string));
                    sesstab.Columns.Add("民族", typeof(string));
                    sesstab.Columns.Add("出生日期", typeof(string));
                    sesstab.Columns.Add("住址/籍贯", typeof(string));
                    sesstab.Columns.Add("入职次数", typeof(string));
                    sesstab.Columns.Add("照片", typeof(System.Byte[]));
                    sesstab.Columns.Add("签发机关", typeof(string));
                    sesstab.Columns.Add("有效期始", typeof(string));
                    sesstab.Columns.Add("有效期止", typeof(string));
                    sesstab.Columns.Add("错误信息", typeof(string));
                    this.GV.DataSource = sesstab;
                    this.GV.EditMode = DataGridViewEditMode.EditOnEnter;
                    GV.Columns["身份证号"].Width = 180;
                    GV.Columns["姓名"].Width = 75;
                    GV.Columns["性别"].Width = 60;
                    GV.Columns["民族"].Width = 75;
                    GV.Columns["出生日期"].Width = 100;
                    GV.Columns["住址/籍贯"].Width = 260;
                    GV.Columns["入职次数"].Width = 90;
                    GV.Columns["照片"].Width = 100;
                    GV.Columns["签发机关"].Width = 100;
                    GV.Columns["有效期始"].Width = 100;
                    GV.Columns["有效期止"].Width = 100;
                    GV.Columns["错误信息"].Width = 300;
                    GV.Columns["身份证号"].ReadOnly = true;
                    GV.Columns["姓名"].ReadOnly = true;
                    GV.Columns["性别"].ReadOnly = true;
                    GV.Columns["民族"].ReadOnly = true;
                    GV.Columns["出生日期"].ReadOnly = true;
                    GV.Columns["住址/籍贯"].ReadOnly = true;
                    GV.Columns["入职次数"].ReadOnly = true;
                    GV.Columns["照片"].ReadOnly = true;
                    GV.Columns["签发机关"].ReadOnly = true;
                    GV.Columns["有效期始"].ReadOnly = true;
                    GV.Columns["有效期止"].ReadOnly = true;
                    GV.Columns["错误信息"].ReadOnly = true;
                    #endregion
                    bz = 1;
                    tm.Start();
                }
               
            else if (btnReadCard.Text == "结束读卡")
            {
                btnReadCard.Text = "开始读卡";
                tm.Stop();
            }
        }
  • Datagridview添加ComboBox列并赋值

赋值的在上面了,这边就贴一下添加ComboBox列的方法:

DataGridViewComboBoxColumn jxfs = new DataGridViewComboBoxColumn();
 sql = "select Code,Name from sys_tx_Jxfs";
 DataTable dtjxfs;
 if (!DB.AF.execSql(sql, sqlconn, out dtjxfs))
 {
    return;
 }
    jxfs.Name = "计薪方式";
    jxfs.DataSource = dtjxfs;
    jxfs.ValueMember = "Code";
    jxfs.DisplayMember = "Name";

2、员工返职

这块主要就一个知识点,就是一般GV添加超链接列都是添加一整列,没办法根据行项的值设置该超链接列是否显示。这里就是解决这个问题。主要思路很简单就是在数据库里查出符合条件的行项,做成一列,然后把这列变成超链接,我这个好像在别的文章里写过,这里就不贴代码了。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章