FormWorker.cs

using System;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Linq;
using System.Windows.Forms;

namespace ProductManager
{
    public partial class FormWorker : Form
    {
        #region 自定义属性
        private DataView dataView;
        private DataRow dataRow;
        #endregion

        public FormWorker()
        {
            #region
            InitializeComponent();
            pictureWorker.SizeMode = PictureBoxSizeMode.StretchImage; // 图像被拉伸或收缩,以适合 PictureBox 的大小。
            splitContainer.SetStyle();
            dgvWorker.SetStyle();
            this.LoadData();
            btnCancel_Click(null, EventArgs.Empty);
            #endregion
        }

        #region LoadData
        public void LoadData()
        {
            dataView = DBTable.Worker.AsDataView("select * from Worker");
            dgvWorker.DataSource = dataView;
        }
        #endregion

        #region AddRow
        private void btnAdd_Click(object sender, EventArgs e)
        {
            dataView.RowFilter = null; // 清除该筛选器。
            var query = from item in dataView.Cast<DataRowView>()
                        let Name = item.Row.Field<string>(1).ToLowerInvariant()
                        let Value = txtName.Text.Trim().ToLowerInvariant()
                        where Name == Value
                        select item;
            if (query.Any())
            {
                MessageBox.Show(string.Format("您输入的员工名称“{0}”已存在,请重新输入!", txtName.Text.Trim()), "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtName.Focus();
                txtName.SelectAll();
                return;
            }
            try
            {
                dataRow = dataView.Table.NewRow();
                if (this.ValidateItem())
                    return;
                dataView.Table.Rows.Add(dataRow);
                btnCancel.PerformClick();
                btnSave.Enabled = true;
            }
            catch
            {
                dataRow.ClearErrors();
                MessageBox.Show(string.Format("员工编号“{0}”添加失败!", maskedTextID.Text), "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }
        #endregion

        #region ValidateItem()
        private void dtpBirthday_ValueChanged(object sender, EventArgs e)
        {
            maskedTextAge.Text = (DateTime.Now.Year - dtpBirthday.Value.Year).ToString();
        }

        private void comboJiguan_TextChanged(object sender, EventArgs e)
        {
            txtAddress.Text = comboJiguan.Text;
        }

        private void pictureWorker_Click(object sender, EventArgs e)
        {
            openFile.Filter = "图像格式 (*.BMP;*.GIF;*.JPG;*.PNG)|*.bmp;*.gif;*.jpg;*.jpeg;*.png";
            if (openFile.ShowDialog(this) == DialogResult.OK)
                pictureWorker.ImageLocation = openFile.FileName;
        }

        private bool ValidateItem()
        {
            if (txtName.TextToLength() < 1)
            {
                MessageBox.Show("员工名称不能为空,请输入员工名称。", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtName.Clear();
                txtName.Focus();
            }
            else if (comboDepartment.SelectedIndex < 0)
            {
                MessageBox.Show("请选择员工所在部门名称。", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                comboDepartment.DroppedDown = true;
                comboDepartment.Focus();
            }
            else if (comboSex.SelectedIndex < 0)
            {
                MessageBox.Show("请选择员工性别。", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                comboSex.DroppedDown = true;
                comboSex.Focus();
            }
            else if (comboJiguan.SelectedIndex < 0)
            {
                MessageBox.Show("请选择员工籍贯。", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                comboJiguan.DroppedDown = true;
                comboJiguan.Focus();
            }
            else if (comboMinzu.SelectedIndex < 0)
            {
                MessageBox.Show("请选择员工民族。", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                comboMinzu.DroppedDown = true;
                comboMinzu.Focus();
            }
            else if (comboXueli.SelectedIndex < 0)
            {
                MessageBox.Show("请选择员工学历。", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                comboXueli.DroppedDown = true;
                comboXueli.Focus();
            }
            else if (comboSingle.SelectedIndex < 0)
            {
                MessageBox.Show("请选择员工婚姻状况。", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                comboSingle.DroppedDown = true;
                comboSingle.Focus();
            }
            else if (!maskedTextCardID.IsValidCardID())
            {
                MessageBox.Show("员工身份证号码格式不正确,请输入员工身份证号。", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                maskedTextCardID.Clear();
                maskedTextCardID.Focus();
            }
            else if (!maskedTextPhone.IsValidPhone())
            {
                MessageBox.Show("员工家庭电话号码格式不正确,请输入员工家庭电话号。", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                maskedTextPhone.Clear();
                maskedTextPhone.Focus();
            }
            else if (!maskedTextTEL.IsValidPhone())
            {
                MessageBox.Show("员工手机号码格式不正确,请输入员工手机号。", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                maskedTextTEL.Clear();
                maskedTextTEL.Focus();
            }
            else if (maskedTextAge.TextToLength() < 2)
            {
                MessageBox.Show("员工年龄格式不正确,请输入员工年龄。", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                maskedTextAge.Clear();
                maskedTextAge.Focus();
            }
            else if (txtAddress.TextToLength() < 1)
            {
                MessageBox.Show("员工住址不能为空,请输入员工住址。", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtAddress.Clear();
                txtAddress.Focus();
            }
            else if (dtpBirthday.Value.Date > DateTime.Today)
            {
                MessageBox.Show("出生日期不能超过当前日期!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                dtpBirthday.ResetText();
            }
            else if (pictureWorker.Image == null)
            {
                MessageBox.Show("请选择职员照片!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                pictureWorker_Click(null, EventArgs.Empty);
            }
            else
            {
                dataRow.BeginEdit();
                dataRow.SetField<string>("WorkerID", maskedTextID.Text);
                dataRow.SetField<string>("WorkerName", txtName.Text.Trim());
                dataRow.SetField<string>("DepartmentName", comboDepartment.Text);
                dataRow.SetField<string>("Sex", comboSex.Text);
                dataRow.SetField<DateTime>("Birthday", dtpBirthday.Value.Date);
                dataRow.SetField<byte>("Age", byte.Parse(maskedTextAge.Text));
                dataRow.SetField<string>("Jiguan", comboJiguan.Text);
                dataRow.SetField<string>("Minzu", comboMinzu.Text);
                dataRow.SetField<string>("Xueli", comboXueli.Text);
                dataRow.SetField<string>("Single", comboSingle.Text);
                dataRow.SetField<string>("CardID", maskedTextCardID.Text);
                dataRow.SetField<string>("Phone", maskedTextPhone.Text);
                dataRow.SetField<string>("TEL", maskedTextTEL.Text);
                dataRow.SetField<string>("Address", txtAddress.Text);
                if (!string.IsNullOrEmpty(pictureWorker.ImageLocation))
                    dataRow.SetField<byte[]>("DataImage", File.ReadAllBytes(pictureWorker.ImageLocation));
                dataRow.EndEdit();
                return false;
            }
            return true;
        }
        #endregion

        #region UpdateRow
        private void btnModify_Click(object sender, EventArgs e)
        {
            dataView.RowFilter = null; // 清除该筛选器。
            var query = from item in dataView.Cast<DataRowView>()
                        let Name = item.Row.Field<string>(1).ToLowerInvariant()
                        let Current = dataRow.Field<string>(1).ToLowerInvariant()
                        let Value = txtName.Text.Trim().ToLowerInvariant()
                        where Name == Value && Name != Current
                        select item;
            if (query.Any())
            {
                MessageBox.Show(string.Format("您输入的员工名称“{0}”已存在,请重新输入!", txtName.Text.Trim()), "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtName.Focus();
                txtName.SelectAll();
                return;
            }
            try
            {
                if (this.ValidateItem())
                    return;
                btnCancel.PerformClick();
                btnSave.Enabled = true;
            }
            catch
            {
                dataRow.ClearErrors();
                dataRow.CancelEdit();
                MessageBox.Show(string.Format("员工编号“{0}”修改失败!", maskedTextID.Text), "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }
        #endregion

        #region DeleteRow
        private void btnDelete_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("真的要删除此记录吗?", "确定删除", MessageBoxButtons.OKCancel, MessageBoxIcon.Question).Equals(DialogResult.OK))
            {
                try
                {
                    dataRow.Delete();
                    btnCancel.PerformClick();
                    btnSave.Enabled = true;
                }
                catch
                {
                    dataRow.ClearErrors();
                    dataRow.RejectChanges();
                    MessageBox.Show(string.Format("员工编号“{0}”删除失败!", maskedTextID.Text), "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
            }
        }
        #endregion

        #region SaveData
        private void btnSave_Click(object sender, EventArgs e)
        {
            try
            {
                DataTable table = dataView.Table.GetChanges();
                if (table == null)
                    return;
                using (SqlCommandBuilder builder = new SqlCommandBuilder())
                {
                    builder.DataAdapter = new SqlDataAdapter("select * from Worker", DBConnection.Connection);
                    builder.ConflictOption = ConflictOption.OverwriteChanges; // 所有 Update, Delete 语句仅在 WHERE 子句中包含 PrimaryKey 列。
                    builder.SetAllValues = false; // Update 语句仅包含更改的列。
                    SqlCommand cmd = builder.GetInsertCommand(true);
                    cmd.CommandText = "Insert_Worker";
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd = builder.GetUpdateCommand(true);
                    cmd.CommandText = "Update_Worker";
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd = builder.GetDeleteCommand(true);
                    cmd.CommandText = "Delete_Worker";
                    cmd.CommandType = CommandType.StoredProcedure;
                    builder.DataAdapter.Update(table);
                    dataView.Table.AcceptChanges();
                }
            }
            catch
            {
                MessageBox.Show("员工信息保存失败,将重新加载所有员工信息!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                this.LoadData();
            }
            finally
            {
                btnSave.Enabled = false;
                dgvWorker.Refresh();
                btnCancel_Click(null, EventArgs.Empty);
            }
        }
        #endregion

        #region CancelButton
        private void btnCancel_Click(object sender, EventArgs e)
        {
            gbText.ClearText();
            cmbQuery.SelectedIndex = 0;
            pictureWorker.Image = null;
            pictureWorker.ImageLocation = null;
            this.SetEnabled(true);
            GetCurrentPage();
            maskedTextID.Text = dataView.GetNewID("W");
            txtName.Focus();
        }
        #endregion

        #region FinfRows
        private void btnQuery_Click(object sender, EventArgs e)
        {
            if (cmbValue.Text.Contains("'"))
                return;
            switch (cmbQuery.SelectedIndex)
            {
                case 0:
                    dataView.RowFilter = string.Format("WorkerID='{0}'", cmbValue.Text.Trim());
                    break;
                case 1:
                    dataView.RowFilter = string.Format("WorkerName like '{0}%'", cmbValue.Text.Trim());
                    break;
                case 2:
                    dataView.RowFilter = string.Format("DepartmentName like '{0}%'", cmbValue.Text.Trim());
                    break;
                case 3:
                    dataView.RowFilter = string.Format("Sex='{0}'", cmbValue.Text.Trim());
                    break;
                case 4:
                    dataView.RowFilter = string.Format("Jiguan like '{0}%'", cmbValue.Text.Trim());
                    break;
                case 5:
                    dataView.RowFilter = string.Format("Minzu like '{0}%'", cmbValue.Text.Trim());
                    break;
                case 6:
                    dataView.RowFilter = string.Format("Xueli like '{0}%'", cmbValue.Text.Trim());
                    break;
                case 7:
                    dataView.RowFilter = string.Format("CardID like '{0}%'", cmbValue.Text.Trim());
                    break;
            }
            if (dataView.Count < 1)
            {
                MessageBox.Show("没有您要的信息,请重新输入!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                cmbValue.Focus();
                cmbValue.SelectAll();
            }
            this.SetEnabled(true);
            GetCurrentPage();
        }

        private void cmbQuery_SelectedIndexChanged(object sender, EventArgs e)
        {
            dataView.RowFilter = null; // 清除该筛选器。
            var query = from item in dataView.Cast<DataRowView>()
                        let Field = item.Row.Field<string>(cmbQuery.SelectedIndex)
                        select Field;
            cmbValue.ResetText();
            cmbValue.Items.Clear();
            cmbValue.Items.AddRange(query.Distinct().ToArray());
        }
        #endregion

        #region MaskInputRejected
        private void maskedTextPhone_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)
        {
            e.ShowMessage(maskedTextPhone, "请输入家庭电话号码!");
        }

        private void maskedTextTEL_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)
        {
            e.ShowMessage(maskedTextTEL, "请输入手机号码!");
        }

        private void maskedTextCardID_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)
        {
            e.ShowMessage(maskedTextCardID, "请输入身份证号码!");
        }

        private void maskedTextAge_MaskInputRejected(object sender, MaskInputRejectedEventArgs e)
        {
            e.ShowMessage(maskedTextAge, "请输入年龄!");
        }
        #endregion

        #region SetEnabled
        private void SetEnabled(bool flag)
        {
            btnAdd.Enabled = flag;
            btnModify.Enabled = !flag;
            btnDelete.Enabled = !flag;
        }
        #endregion

        #region GetCurrentPage
        private void GetCurrentPage()
        {
            int rowIndex = dgvWorker.FirstDisplayedScrollingRowIndex;
            int size = dgvWorker.DisplayedRowCount(false);
            if (size < 1)
                size = 1;
            firstButton.Enabled = previousButton.Enabled = (rowIndex > 0);
            lastButton.Enabled = nextButton.Enabled = (rowIndex + size < dgvWorker.RowCount);
            labelPosition.Text = string.Format("共 {0} 页", (dgvWorker.RowCount + size - 1) / size);
        }

        private void dgvWorker_Resize(object sender, EventArgs e)
        {
            this.GetCurrentPage();
        }

        private void PositionPage_Click(object sender, System.EventArgs e)
        {
            int size = dgvWorker.DisplayedRowCount(false);
            switch ((sender as Button).Name)
            {
                case "firstButton":
                    dgvWorker.FirstDisplayedScrollingRowIndex = 0;
                    break;
                case "previousButton":
                    if (dgvWorker.FirstDisplayedScrollingRowIndex > size)
                        dgvWorker.FirstDisplayedScrollingRowIndex -= size;
                    else
                        goto case "firstButton";
                    break;
                case "nextButton":
                    if (dgvWorker.FirstDisplayedScrollingRowIndex + size < dgvWorker.RowCount)
                        dgvWorker.FirstDisplayedScrollingRowIndex += size;
                    else
                        goto case "lastButton";
                    break;
                case "lastButton":
                    dgvWorker.FirstDisplayedScrollingRowIndex = dgvWorker.RowCount - size;
                    break;
            }
            GetCurrentPage();
        }
        #endregion

        #region GetDataBoundItem
        private void dgvWorker_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex < 0)
                return;
            dataRow = (dgvWorker.CurrentRow.DataBoundItem as DataRowView).Row;
            maskedTextID.Text = dataRow.Field<string>("WorkerID");
            txtName.Text = dataRow.Field<string>("WorkerName");
            comboDepartment.Text = dataRow.Field<string>("DepartmentName");
            comboSex.Text = dataRow.Field<string>("Sex");
            dtpBirthday.Value = dataRow.Field<DateTime>("Birthday");
            maskedTextAge.Text = dataRow.Field<byte>("Age") + "";
            comboJiguan.Text = dataRow.Field<string>("Jiguan");
            comboMinzu.Text = dataRow.Field<string>("Minzu");
            comboXueli.Text = dataRow.Field<string>("Xueli");
            comboSingle.Text = dataRow.Field<string>("Single");
            maskedTextCardID.Text = dataRow.Field<string>("CardID");
            maskedTextPhone.Text = dataRow.Field<string>("Phone");
            maskedTextTEL.Text = dataRow.Field<string>("TEL");
            txtAddress.Text = dataRow.Field<string>("Address");
            using (MemoryStream ms = new MemoryStream(dataRow.Field<byte[]>("DataImage")))
            {
                pictureWorker.Image = new System.Drawing.Bitmap(ms);
                ms.Flush();
            }
            this.SetEnabled(false);
            this.GetCurrentPage();
            dgvWorker.TopLeftHeaderCell.Value = string.Format("{0:#,##0}", e.RowIndex + 1);
        }
        #endregion

        #region FormClosing
        private void FormProvider_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (btnSave.Enabled)
            {
                switch (MessageBox.Show("是否保存对“员工信息”的更改?", "系统询问", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Exclamation))
                {
                    case DialogResult.Yes:
                        this.btnSave.PerformClick();
                        break;
                    case DialogResult.No:
                        break;
                    case DialogResult.Cancel:
                        e.Cancel = true;
                        break;
                }
            }
            this.Tag = e.Cancel;
        }
        #endregion
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值