You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

176 lines
6.9 KiB

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using WinFormControl;
namespace ButcherFactory.WeightCount_
{
public partial class DiscontWeightSetDialog : Form
{
BindingList<DiscontSetting> list;
public DiscontWeightSetDialog()
{
InitializeComponent();
this.Load += DiscontWeightSetDialog_Load;
}
void DiscontWeightSetDialog_Load(object sender, EventArgs e)
{
list = DiscontSetting.Load();
mGrid.DataSource = list;
mGrid.Refresh();
BindTotalLbl();
}
private void addBtn_Click(object sender, EventArgs e)
{
var name = nameBox.Text.Trim();
if (string.IsNullOrEmpty(name))
throw new Exception("请输入扣重项");
if (list.Any(x => x.Name == name))
throw new Exception("名称已存在");
decimal discont;
if (!decimal.TryParse(discontBox.Text.Trim(), out discont))
throw new Exception("标准重输入不正确");
if (discont == 0)
throw new Exception("标准值不能为0");
list.Insert(0, new DiscontSetting { Name = name, Standard = discont, Number = 0 });
mGrid.Refresh();
}
private void okBtn_Click(object sender, EventArgs e)
{
DiscontSetting.Save(list);
DialogResult = DialogResult.OK;
}
SolidBrush btnBrush = new SolidBrush(Color.LightBlue);
private void mGrid_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
{
if (e.ColumnIndex >= 0 && e.RowIndex >= 0)
{
if (this.mGrid.Columns[e.ColumnIndex].HeaderText == "数量")
{
StringFormat sf = StringFormat.GenericDefault.Clone() as StringFormat;//设置重绘入单元格的字体样式
sf.FormatFlags = StringFormatFlags.DisplayFormatControl;
sf.Alignment = StringAlignment.Center;
sf.LineAlignment = StringAlignment.Center;
sf.Trimming = StringTrimming.EllipsisCharacter;
e.PaintBackground(e.CellBounds, false);//重绘边框
var entity = this.mGrid.Rows[e.RowIndex].DataBoundItem as DiscontSetting;
//设置要写入字体的大小
System.Drawing.Font myFont = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
SizeF sizeDel = e.Graphics.MeasureString("-", myFont);
SizeF sizeMod = e.Graphics.MeasureString(entity.Number.ToString(), myFont);
SizeF sizeLook = e.Graphics.MeasureString("+", myFont);
float fDel = sizeDel.Width / (sizeDel.Width + sizeMod.Width + sizeLook.Width); //
float fMod = sizeMod.Width / (sizeDel.Width + sizeMod.Width + sizeLook.Width);
float fLook = sizeLook.Width / (sizeDel.Width + sizeMod.Width + sizeLook.Width);
//设置每个“按钮的边界”
RectangleF rectDel = new RectangleF(e.CellBounds.Left, e.CellBounds.Top, e.CellBounds.Width * fDel, e.CellBounds.Height);
RectangleF rectMod = new RectangleF(rectDel.Right, e.CellBounds.Top, e.CellBounds.Width * fMod, e.CellBounds.Height);
RectangleF rectLook = new RectangleF(rectMod.Right, e.CellBounds.Top, e.CellBounds.Width * fLook, e.CellBounds.Height);
e.Graphics.FillRectangles(btnBrush, new RectangleF[] { rectDel });
e.Graphics.DrawString("-", myFont, Brushes.Black, rectDel, sf); //绘制“按钮”
e.Graphics.DrawString(entity.Number.ToString(), myFont, Brushes.Black, rectMod, sf);
e.Graphics.FillRectangles(btnBrush, new RectangleF[] { rectLook });
e.Graphics.DrawString("+", myFont, Brushes.Black, rectLook, sf);
e.Handled = true;
}
}
}
private void mGrid_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
{
if (e.ColumnIndex >= 0 && e.RowIndex >= 0)
{
if (this.mGrid.Columns[e.ColumnIndex].HeaderText == "删除")
{
var itemName = mGrid.CurrentRow.Cells[1].Value.ToString();
var tag = list.First(x => x.Name == itemName);
list.Remove(tag);
mGrid.Refresh();
BindTotalLbl();
return;
}
Point curPosition = e.Location;//当前鼠标在当前单元格中的坐标
if (this.mGrid.Columns[e.ColumnIndex].HeaderText == "数量")
{
Graphics g = this.mGrid.CreateGraphics();
System.Drawing.Font myFont = new System.Drawing.Font("宋体", 15F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
var entity = this.mGrid.Rows[e.RowIndex].DataBoundItem as DiscontSetting;
SizeF sizeDel = g.MeasureString("-", myFont);
SizeF sizeMod = g.MeasureString(entity.Number.ToString(), myFont);
SizeF sizeLook = g.MeasureString("+", myFont);
float fDel = sizeDel.Width / (sizeDel.Width + sizeMod.Width + sizeLook.Width);
float fMod = sizeMod.Width / (sizeDel.Width + sizeMod.Width + sizeLook.Width);
float fLook = sizeLook.Width / (sizeDel.Width + sizeMod.Width + sizeLook.Width);
Rectangle rectTotal = new Rectangle(0, 0, this.mGrid.Columns[e.ColumnIndex].Width, this.mGrid.Rows[e.RowIndex].Height);
RectangleF rectDel = new RectangleF(rectTotal.Left, rectTotal.Top, rectTotal.Width * fDel, rectTotal.Height);
RectangleF rectMod = new RectangleF(rectDel.Right, rectTotal.Top, rectTotal.Width * fMod, rectTotal.Height);
RectangleF rectLook = new RectangleF(rectMod.Right, rectTotal.Top, rectTotal.Width * fLook, rectTotal.Height);
//判断当前鼠标在哪个“按钮”范围内
if (rectDel.Contains(curPosition))//-
SubStract(entity);
else if (rectMod.Contains(curPosition))
{
var keyBoard = new NumberPad();
if (keyBoard.ShowDialog() == true)
{
var v = 0;
if (int.TryParse(keyBoard.Result, out v) && v >= 0)
{
entity.Number = v;
mGrid.Refresh();
BindTotalLbl();
}
else
throw new Exception("输入数量有误!");
}
}
else if (rectLook.Contains(curPosition))//+
Add(entity);
}
}
}
private void SubStract(DiscontSetting entity)
{
if (entity.Number == 0)
return;
entity.Number -= 1;
mGrid.Refresh();
BindTotalLbl();
}
private void Add(DiscontSetting entity)
{
entity.Number += 1;
mGrid.Refresh();
BindTotalLbl();
}
void BindTotalLbl()
{
totalLbl.Text = string.Format("{0:#0.##}", list.Sum(x => x.Weight));
}
}
}