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
}
}