項目總結: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添加超鏈接列都是添加一整列,沒辦法根據行項的值設置該超鏈接列是否顯示。這裏就是解決這個問題。主要思路很簡單就是在數據庫裏查出符合條件的行項,做成一列,然後把這列變成超鏈接,我這個好像在別的文章裏寫過,這裏就不貼代碼了。

 

 

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