/*===================================================================
|
* 程序说明: OverdueMaterial的数据管理窗体
|
* 作者资料: 孙中吕
|
* 创建日期: 2024/05/23 03:50:28
|
* 最后修改: 2024/05/23 03:50:28
|
*
|
* 注: 本文件由代码生成器(Code Generator)自动生成。
|
* 版权所有 Copyright 2006~2024, C/S框架网(www.cscode.net)
|
*===================================================================*/
|
|
using System;
|
using System.Collections.Generic;
|
using System.ComponentModel;
|
using System.Data;
|
using System.IO;
|
using System.Linq;
|
using System.Windows.Forms;
|
using CSFramework.DB;
|
using CSFrameworkV5.Business;
|
using CSFrameworkV5.Common;
|
using CSFrameworkV5.Core;
|
using CSFrameworkV5.Interfaces;
|
using CSFrameworkV5.Library;
|
using CSFrameworkV5.Library.CommonClass;
|
using CSFrameworkV5.Models;
|
using CSFrameworkV5.QL.ql;
|
using DevExpress.XtraEditors;
|
using DevExpress.XtraGrid;
|
using DevExpress.XtraGrid.Views.Base;
|
using DevExpress.XtraGrid.Views.Grid;
|
using NPOI.HSSF.UserModel;
|
using NPOI.SS.UserModel;
|
using NPOI.XSSF.UserModel;
|
|
namespace CSFrameworkV5.QL
|
{
|
///<summary>
|
/// OverdueMaterial的资料管理窗体,由代码生成器(Code Generator)自动生成
|
/// </summary>
|
public partial class frmOverdueMaterial : frmBaseBusinessForm
|
{
|
private bllOverdueMaterial _BLLInstance; //业务逻辑层对象引用
|
|
public frmOverdueMaterial()
|
{
|
InitializeComponent();
|
}
|
|
private void frmOverdueMaterial_Load(object sender, EventArgs e)
|
{
|
InitializeForm(); //自定义初始化操作
|
|
Init();
|
|
//筛选框
|
gvSummary.OptionsView.ShowGroupPanel = false;
|
gvSummary.OptionsView.ShowAutoFilterRow = true;
|
|
if (splitContainerEditorAndDetailGrid != null &&
|
layoutGroup.OptionsTableLayoutGroup.RowDefinitions.Count !=
|
0)
|
splitContainerEditorAndDetailGrid.SplitterPosition =
|
Convert.ToInt32(Math.Round(
|
layoutGroup.OptionsTableLayoutGroup.RowDefinitions
|
.Count *
|
layoutGroup.OptionsTableLayoutGroup
|
.RowDefinitions[0].Height, 0)) + 30;
|
|
if (splitContainerSearchAndSummary != null && layoutGroupSearch
|
.OptionsTableLayoutGroup.RowDefinitions
|
.Count != 0)
|
splitContainerSearchAndSummary.SplitterPosition =
|
Convert.ToInt32(Math.Round(
|
(layoutGroupSearch.OptionsTableLayoutGroup
|
.RowDefinitions.Count - 1) *
|
layoutGroupSearch.OptionsTableLayoutGroup
|
.RowDefinitions[0].Height, 0)) + 60;
|
}
|
|
private void Init()
|
{
|
var sql =
|
"select * from OverdueMaterial order by ID desc offset 0 rows fetch next 100 rows only";
|
|
var dt = _BLLInstance.GETDAT(sql);
|
DoBindingSummaryGrid(dt); //绑定主表的Grid
|
ShowSummaryPage(true); //显示Summary页面.
|
}
|
|
protected override void InitializeForm()
|
{
|
_BLL = new bllOverdueMaterial(); //实例化基类的业务逻辑层
|
_BLLInstance = _BLL as bllOverdueMaterial; //当前窗体的业务层逻辑层对象引用
|
|
_SummaryView =
|
new DevGridView(
|
gvSummary); //实例化数据视图,此接口可支持不同的视图,比如表格GridControl,树视图TreeList.
|
//_ActiveEditor = txtID;//进入修改状态,显示第一个焦点的输入框,可以不设置
|
//_KeyEditor = txtID;//主键字段输入框,可以不设置
|
_DetailGroupControl = pcDetailEditor; //【资料编辑】页面所有文本输入框的容器
|
|
base.InitializeForm();
|
//picNote.Image = Globals.LoadImage("32_Notes.png");
|
|
frmGridCustomize.RegisterGrid(gvSummary); //注册表格组件,自动添加样式管理、弹出菜单
|
DevStyle.SetGridControlLayout(gcSummary, false); //主表表格样式设置
|
DevStyle.SetSummaryGridViewLayout(gvSummary); //主表表格样式设置
|
BindingSummaryNavigator(controlNavigatorSummary,
|
gcSummary); //绑定表格导航按钮的数据源.
|
gvSummary.DoubleClick +=
|
new EventHandler(OnGridViewDoubleClick); //绑定主表的DoubleClick事件
|
|
// DevStyle.SetGridControlLayout(this.gcDetail0, true); //明细表表格样式设置
|
// DevStyle.SetDetailGridViewLayout(this.gvDetail0); //明细表表格样式设置
|
//this.gcDetail0.EmbeddedNavigator.ButtonClick +=
|
// new NavigatorButtonClickEventHandler(this
|
// .OnEmbeddedNavigatorButtonClick); //绑定明细表格的按钮事件
|
//this.gvDetail0.CellValueChanged +=
|
// new DevExpress.XtraGrid.Views.Base.CellValueChangedEventHandler(
|
// OnCellValueChanged); //绑定明细表格单元格数据修改时触发的事件
|
|
#region 以下代码全自动生成,请调整排版和顺序
|
|
#endregion
|
|
ShowSummaryPage(true); //初始化完成后显示表格页
|
}
|
|
#region 自动生成的事件或方法的主体部份
|
|
#endregion
|
|
//修改单元格数据时触发的事件
|
private void OnCellValueChanged(object sender,
|
CellValueChangedEventArgs e)
|
{
|
//开发实例:修改单元格关联更新其它列的值
|
//参考(frmPO/frmSO).OnCellValueChanged方法}
|
}
|
|
/// <summary>
|
/// 明细表格按钮事件
|
/// </summary>
|
/// <param name="sender"></param>
|
/// <param name="e"></param>
|
private void OnEmbeddedNavigatorButtonClick(object sender,
|
NavigatorButtonClickEventArgs e)
|
{
|
try
|
{
|
var gc =
|
(GridControl)((GridControlNavigator)sender).Parent;
|
var
|
gridView =
|
(GridView)gc.Views[0]; //每个GridControl默认有一个GridView.
|
if (e.Button.ImageIndex == DetailButtons.Add ||
|
e.Button.ImageIndex == DetailButtons.Insert)
|
CreateOneDetail(gridView, e.Button.ImageIndex);
|
else if (e.Button ==
|
gc.EmbeddedNavigator.Buttons.CustomButtons[
|
DetailButtons.Delete])
|
if (Msg.AskQuestion("确定要删除这条记录?"))
|
gridView.DeleteRow(gridView.FocusedRowHandle);
|
|
e.Handled = true;
|
}
|
catch (Exception ex)
|
{
|
LogUserOperate.Write(ex);
|
Msg.ShowException(ex);
|
}
|
}
|
|
/// <summary>
|
/// 重要!!当按钮状态改变时触发的事件,
|
/// </summary>
|
/// <param name="currentState"></param>
|
protected override void ButtonStateChanged(UpdateType currentState)
|
{
|
var isEditMode = currentState == UpdateType.Add ||
|
currentState == UpdateType.Modify;
|
|
//设置编辑页面的文本框控件只读和可编辑状态
|
SetDetailEditorsAccessable(pcDetailEditor, isEditMode);
|
//设置明细表格的按钮禁用和可用状态
|
// base.SetGridCustomButtonAccessable(this.gcDetail0, isEditMode);
|
////设置明细表格的可修改状态
|
// this.gvDetail0.OptionsBehavior.Editable = isEditMode;
|
// lbStateName.Text = this.UpdateTypeName;
|
}
|
|
//有明细表:绑定单据明细表的数据源.
|
protected override void DoBindingDetailGrid(DataSet dataSource)
|
{
|
//this.gcDetail0.DataSource = null;
|
//this.gcDetail0.DataSource =
|
// dataSource.Tables[XjImagePath.__TableName];
|
}
|
|
/// <summary>
|
/// 绑定【编辑页面】所有文本输入框的数据源
|
/// </summary>
|
/// <param name="summary">数据源</param>
|
protected override void DoBindingSummaryEditor(DataTable summary)
|
{
|
DoBindingEditorPanel(pcDetailEditor, summary);
|
|
//在此绑定其它自定义组件的数据源,参考frmCustomer的DoBindingSummaryEditor方法
|
}
|
|
public override void DoAdd(IButtonInfo sender)
|
{
|
base.DoAdd(sender);
|
if (_UpdateType == UpdateType.Add)
|
{
|
// 在此添加所需的代码
|
}
|
}
|
|
//创建一条明细记录
|
private void CreateOneDetail(GridView gridView, int buttonIndex)
|
{
|
var gridControl = gridView.GridControl;
|
var detailTableName = (string)gridView.Tag;
|
//若要取排序序号,要将光标移到最后一行
|
if (buttonIndex == DetailButtons.Add) gridView.MoveLast();
|
|
//若表格无记录,转换为新增状态
|
if (gridView.RowCount == 0) buttonIndex = DetailButtons.Add;
|
|
var row = _BLL.CurrentBusiness.Tables[detailTableName].NewRow();
|
row["ID"] = Guid.NewGuid();
|
row["PID"] = _BLL.DataBindRow["ID"];
|
//增加一条明细记录
|
if (buttonIndex == DetailButtons.Add)
|
{
|
_BLL.CurrentBusiness.Tables[detailTableName].Rows.Add(row);
|
gridControl.RefreshDataSource(); //立即刷新数据源
|
gridView.FocusedRowHandle = gridView.RowCount - 1; //光标移到到最后一条记录
|
}
|
else if (buttonIndex == DetailButtons.Insert) //插入一条明细记录
|
{
|
_BLL.CurrentBusiness.Tables[detailTableName].Rows
|
.InsertAt(row, gridView.FocusedRowHandle);
|
gridView.FocusedRowHandle = gridView.FocusedRowHandle - 1;
|
}
|
|
gridView.FocusedColumn = gridView.VisibleColumns[0];
|
}
|
|
public override void DoSave(IButtonInfo sender) // 保存数据
|
{
|
UpdateLastControl(); //更新最后一个文本输入框的数据
|
|
try
|
{
|
frmWaitingEx.ShowMe(this);
|
|
var dsTemplate =
|
_BLL.CreateSaveData(_BLL.CurrentBusiness); //创建用于保存的临时数据
|
var
|
result = _BLL.Update(dsTemplate); //调用业务逻辑层Update()方法保存数据
|
|
if (result.Success) //保存成功, 不需要重新加载数据,更新缓存数据即可.
|
{
|
if (_UpdateType == UpdateType.Add)
|
_BLL.DataBindRow[OverdueMaterial.__KeyName] =
|
result.DocNo; //更新单据号码
|
if (_UpdateType == UpdateType.Modify)
|
_BLL.NotifyUser(); //发送短信或Email通知制单人
|
UpdateSummaryCurrentRow(_BLL
|
.DataBindRow); //刷新表格当前记录的缓存数据.
|
DoBindingSummaryEditor(_BLL
|
.DataBinder); //重新绑定文本框的数据源,刷新数据
|
if (_UpdateType == UpdateType.Add)
|
gvSummary.MoveLast(); //若是新增操作,要移动到取后一条记录.
|
|
base.DoSave(sender); //调用基类的方法. 此行代码应放较后位置.
|
|
frmWaitingEx.HideMe(this);
|
Msg.ShowInformation("保存成功!");
|
}
|
else
|
{
|
Msg.Warning("保存失败!");
|
}
|
}
|
finally
|
{
|
frmWaitingEx.HideMe(this);
|
}
|
}
|
|
/// <summary>
|
/// 保存数据后,更新表格中当前记录的数据(更新缓存资料)
|
/// </summary>
|
/// <param name="currentRow">当前修改的记录</param>
|
/// <param name="docNo">当前单据号码</param>
|
protected void UpdateSummaryCurrentRow(DataRow currentRow)
|
{
|
//若表格没有数据源,要下载当前单据的数据
|
if (gcSummary.DataSource == null || gvSummary.RowCount == 0)
|
{
|
//实例化查询参数
|
var P = new QueryOverdueMaterial
|
{
|
OrderNumber = "",
|
ProductName = "",
|
ShortageName = "",
|
ResponsiblePerson = ""
|
};
|
|
var dt = _BLLInstance.Query(P); //获取数据
|
DoBindingSummaryGrid(dt); //绑定主表表格的数据源
|
}
|
else
|
{
|
//调用基类方法更新表格中当前记录的缓存数据
|
base.UpdateSummaryRow(currentRow);
|
}
|
}
|
|
private void btnEmpty_Click(object sender, EventArgs e)
|
{
|
ClearContainerEditorText(pnlSearch);
|
}
|
|
private void btnQuery_Click(object sender, EventArgs e)
|
{
|
//查询数据
|
try
|
{
|
frmWaitingEx.ShowMe(this);
|
|
//实例化查询参数
|
var dt = _BLLInstance.Query(new QueryOverdueMaterial());
|
DoBindingSummaryGrid(dt); //绑定主表的Grid
|
ShowSummaryPage(true); //显示Summary页面.
|
if (gvSummary.RowCount == 0) Msg.Warning("没有找到数据!");
|
}
|
finally
|
{
|
frmWaitingEx.HideMe(this);
|
}
|
}
|
|
|
//给明细表绑定KeyDown事件,控制按回车事件
|
private void gvDetail_KeyDown(object sender, KeyEventArgs e)
|
{
|
var gridView = (GridView)sender;
|
//表格按回车键自动跳转到下一个可编辑列, 若是最后一列,自动新增一条记录
|
GridMovetor.OnGridViewKeyDown(gridView, e);
|
}
|
|
private void txtOnlineDate_EditValueChanged(object sender, EventArgs e)
|
{
|
if (!string.IsNullOrEmpty(txtOnlineDate.EditValue.ToString()))
|
{
|
var formattedDate = DateTime
|
.Parse(txtOnlineDate.EditValue.ToString())
|
.ToString("yyyy-MM-dd");
|
SetEditorBindingValue(txtOnlineDate, formattedDate.ToString(),
|
true);
|
}
|
}
|
|
private void txtRequiredArrivalDate_EditValueChanged(object sender,
|
EventArgs e)
|
{
|
if (!string.IsNullOrEmpty(
|
txtRequiredArrivalDate.EditValue.ToString()))
|
{
|
var formattedDate = DateTime
|
.Parse(txtRequiredArrivalDate.EditValue.ToString())
|
.ToString("yyyy-MM-dd");
|
SetEditorBindingValue(txtRequiredArrivalDate,
|
formattedDate.ToString(),
|
true);
|
}
|
}
|
|
private void txtDeliveryDate_EditValueChanged(object sender,
|
EventArgs e)
|
{
|
if (!string.IsNullOrEmpty(txtDeliveryDate.EditValue.ToString()))
|
{
|
var formattedDate = DateTime
|
.Parse(txtDeliveryDate.EditValue.ToString())
|
.ToString("yyyy-MM-dd");
|
SetEditorBindingValue(txtDeliveryDate, formattedDate.ToString(),
|
true);
|
}
|
}
|
|
private void txtOverdueDate_EditValueChanged(object sender, EventArgs e)
|
{
|
if (!string.IsNullOrEmpty(txtOverdueDate.EditValue.ToString()))
|
{
|
var formattedDate = DateTime
|
.Parse(txtOverdueDate.EditValue.ToString())
|
.ToString("yyyy-MM-dd");
|
SetEditorBindingValue(txtOverdueDate, formattedDate.ToString(),
|
true);
|
}
|
}
|
|
private void simpleButton1_Click(object sender, EventArgs e)
|
{
|
try
|
{
|
if (buttonEdit1.Text == "")
|
{
|
Msg.Warning("请先选择文件!!!");
|
return;
|
}
|
|
var result = MessageBox.Show("你确定要执行导入吗?这样会清空原有的数据", "确认",
|
MessageBoxButtons.YesNo, MessageBoxIcon.Question);
|
|
if (result == DialogResult.Yes)
|
{
|
var DllNameT = "";
|
var DllName = "";
|
|
var list = new List<SqlOverdueMaterial>();
|
|
try
|
{
|
DllNameT = buttonEdit1.Text;
|
DllName = DllNameT
|
.Substring(DllNameT.LastIndexOf("\\") + 1)
|
.ToString();
|
//Console.OutputEncoding = System.Text.Encoding.UTF8;
|
IWorkbook workbook = null;
|
using (var file = new FileStream(DllNameT,
|
FileMode.Open, FileAccess.Read))
|
{
|
if (DllName.IndexOf(".xlsx") > 0) // 2007及以后版本
|
workbook = new XSSFWorkbook(file);
|
else if (DllName.IndexOf(".xls") > 0) // 2003版本
|
workbook = new HSSFWorkbook(file);
|
}
|
|
var db1 = SqlSugarHelper.GetInstance();
|
var date = DateTime.Now.ToString("yyyyMMdd");
|
|
//NumberOfSheets sheet的总数,要注意是否有隐藏的sheet
|
for (var sheetNum = 0;
|
sheetNum < workbook.NumberOfSheets;
|
sheetNum++)
|
{
|
var sheet = workbook.GetSheetAt(sheetNum);
|
var rows =
|
sheet.GetRowEnumerator();
|
|
var headerRow = sheet.GetRow(sheet.FirstRowNum);
|
int cellCount = headerRow.LastCellNum;
|
|
//读取body
|
for (var i = sheet.FirstRowNum + 1;
|
i <= sheet.LastRowNum;
|
i++)
|
{
|
var order = new SqlOverdueMaterial();
|
|
order.ID = GetUniqueIDTO22();
|
|
var row = sheet.GetRow(i);
|
//DataRow dataRow = dt.NewRow();
|
//for (int j = row.FirstCellNum; j < cellCount; j++)
|
for (var j = 0; j < cellCount; j++)
|
switch (j)
|
{
|
case 0:
|
order.CustomerAbbreviation =
|
row.GetCell(j).ToString();
|
break;
|
case 1:
|
order.OrderNumber =
|
row.GetCell(j).ToString();
|
break;
|
case 2:
|
order.ProductName =
|
row.GetCell(j).ToString();
|
break;
|
case 3:
|
order.ProductModel =
|
row.GetCell(j).ToString();
|
break;
|
case 4:
|
order.OrderQuantity =
|
Convert.ToInt32(row.GetCell(j)
|
.ToString());
|
break;
|
case 5:
|
order.DeliveryDate =
|
row.GetCell(j).ToString();
|
break;
|
case 6:
|
order.OnlineDate =
|
row.GetCell(j).ToString();
|
break;
|
case 7:
|
order.ShortageName =
|
row.GetCell(j).ToString();
|
break;
|
case 8:
|
order.ShortageNumber =
|
row.GetCell(j).ToString();
|
break;
|
case 9:
|
order.ShortageQuantity =
|
Convert.ToInt32(row.GetCell(j)
|
.ToString());
|
break;
|
case 10:
|
order.Unit =
|
row.GetCell(j).ToString();
|
break;
|
case 11:
|
order.RequiredArrivalDate =
|
row.GetCell(j).ToString();
|
break;
|
case 12:
|
order.OverdueDate =
|
row.GetCell(j).ToString();
|
break;
|
case 13:
|
order.ResponsiblePerson =
|
row.GetCell(j).ToString();
|
break;
|
}
|
|
list.Add(order);
|
}
|
|
|
SqlSugarHelper.UseTransactionWithOracle(db =>
|
{
|
var count = db.Queryable<SqlOverdueMaterial>()
|
.Count();
|
|
var executeCommand =
|
db.Deleteable<SqlOverdueMaterial>()
|
.ExecuteCommand();
|
|
if (executeCommand == count)
|
return db
|
.Insertable<SqlOverdueMaterial>(list)
|
.ExecuteCommand();
|
return 0;
|
});
|
}
|
}
|
catch (Exception EE)
|
{
|
Msg.Warning(EE.Message.ToString());
|
return;
|
}
|
|
// TestUpload();
|
Msg.Warning("上传成功!!!");
|
buttonEdit1.Text = "";
|
|
var dt = _BLLInstance.Query(new QueryOverdueMaterial());
|
DoBindingSummaryGrid(dt); //绑定主表的Grid
|
ShowSummaryPage(true); //显示Summary页面.
|
if (gvSummary.RowCount == 0) Msg.Warning("没有找到数据!");
|
}
|
}
|
catch (Exception ex)
|
{
|
Msg.Warning(ex.ToString());
|
throw;
|
}
|
}
|
|
private void buttonEdit1_Click(object sender, EventArgs e)
|
{
|
var dlg = new OpenFileDialog();
|
dlg.Filter = "所有EXCEL文件|*.xlsx;*.xls";
|
dlg.FileName = "EXCEL文件";
|
if (DialogResult.OK == dlg.ShowDialog())
|
buttonEdit1.Text = dlg.FileName;
|
}
|
|
private string GetUniqueIDTO22()
|
{
|
//System.Threading.Thread.Sleep(1);
|
//保证yyyyMMddHHmmssffff唯一
|
var rd =
|
new Random(
|
BitConverter.ToInt32(Guid.NewGuid().ToByteArray(), 0));
|
var strUniqueID = DateTime.Now.ToString("yyyyMMddHHmmssffff") +
|
rd.Next(1000, 9999);
|
return strUniqueID;
|
}
|
}
|
}
|