using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.Linq; using System.Linq; using System.Drawing; using System.Text; using System.Windows.Forms; using DevExpress.XtraEditors; using DevExpress.XtraGrid.Views.BandedGrid; using DevExpress.XtraGrid.Columns; using DevExpress.XtraGrid; using System.IO; using System.Threading; using ICSSoft.Base.Language.Tool; using ICSSoft.Base.Config.AppConfig; using ICSSoft.Base.UserControl.MessageControl; using ICSSoft.Base.Config.DBHelper; using ICSSoft.Base.Report.Filter; using ICSSoft.Base.UserControl.FormControl; using ICSSoft.Base.Report.GridReport; using ICSSoft.Base.ReferForm.AppReferForm; using ICSSoft.Frame.Data.BLL; namespace ICSSoft.Frame.APP { public partial class FormMatterShow : DevExpress.XtraEditors.XtraForm { public DataTable dt = null; public DataTable dTL = null; public DataTable DTable = null; public int i = 1, x = 0; string where = ""; string sql = ""; string sqlText = ""; #region 构造函数 public FormMatterShow(DataTable ds) { InitializeComponent(); this.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height); this.WindowState = FormWindowState.Maximized; this.dt = null; this.dTL = null; this.DTable = null; x = ds.Rows.Count; where = @" where y.Num between {0} and {1} order by y.MTIME"; this.loadData(); } public FormMatterShow() { InitializeComponent(); this.MaximumSize = new Size(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height); this.WindowState = FormWindowState.Maximized; this.dt = null; this.dTL = null; this.DTable = null; this.tRoll.Enabled = true; where = @" where y.Num between {0} and {1} order by y.MTIME"; this.loadData(); } #endregion #region 操作权限 public DataTable RightOfExute() { DataTable rData = new DataTable(); rData.Columns.Add("BtnName"); rData.Columns.Add("ActionName"); //查看权限(必须有) DataRow seeRow = rData.NewRow(); seeRow["BtnName"] = "see"; seeRow["ActionName"] = "查看"; rData.Rows.Add(seeRow); List ControlList = new List(); foreach (Control ctr in ControlList) { if (ctr.GetType() == typeof(SimpleButton)) { DataRow dr = rData.NewRow(); dr["BtnName"] = ctr.Name; dr["ActionName"] = ctr.Text; rData.Rows.Add(dr); } } rData.AcceptChanges(); return rData; } public DataTable RightOfData()// 数据权限 { DataTable rData = new DataTable(); rData.Columns.Add("BodyName"); rData.Columns.Add("ControlName"); rData.Columns.Add("ControlCaption"); rData.AcceptChanges(); return rData; } #endregion #region 退出 private void btnClose_Click(object sender, EventArgs e) { AppConfig.CloseFormShow(this.Text); this.Close(); } #endregion private void FormMatterShow_FormClosing(object sender, FormClosingEventArgs e) { } private void FormMatterShow_Load(object sender, EventArgs e) { this.tRoll.Interval = 30 * 1000; this.tRefresh.Interval = 24 * 60 * 60 * 1000; this.tRoll.Enabled = true; this.tRefresh.Enabled = false; } public void loadData() { try { this.DTable = null; sql = @" select * from (select Num=row_number() over(order by MTIME),* from (select distinct c.LotNO, d.WHCode, e.StorageName, d.BinCode, f.StackName, a.INVCODE, b.INVNAME, b.INVDESC, b.INVUOM, d.LotQty, a.EATTRIBUTE1, case when isnull(d.MTIME,0)=0 then '' when isnull(a.EATTRIBUTE1,0) = 0 then d.MTIME ELSE DATEADD(day,cast(a.EATTRIBUTE1 as int),d.MTIME) end as daytime, d.MTIME FROM dbo.ICSWareHouseLotInfo d inner join ICSITEMLot c on c.LotNO = d.LotNO inner join dbo.ICSINVInfo a on a.INVCODE = d.INVCODE inner join ICSINVENTORY b on a.INVCODE = b.INVCODE LEFT JOIN dbo.ICSStorage e ON d.WHCode = e.StorageCode left JOIN dbo.ICSStack f ON d.BinCode = f.StackCode where 1=1 and a.INVCODE<> '' and c.LotNO <> '' and d.WHCode = '0300' and d.LotQty > '0.00') X) Y"; sql = string.Format(sql); dt = DBHelper.ExecuteDataset(AppConfig.AppConnectString.ToString(), CommandType.Text, sql).Tables[0]; if (dt.Rows.Count > 18) { x = dt.Rows.Count; sqlText = sql + where; sqlText = string.Format(sqlText, i, i + 17); DTable = DBHelper.ExecuteDataset(AppConfig.AppConnectString.ToString(), CommandType.Text, sqlText).Tables[0]; grdDetail.DataSource = DTable; grvDetail.BestFitColumns(); i = i + 18; x = x - 18; } else { sqlText = sql + where; sqlText = string.Format(sqlText, i, dt.Rows.Count); DTable = DBHelper.ExecuteDataset(AppConfig.AppConnectString.ToString(), CommandType.Text, sqlText).Tables[0]; grdDetail.DataSource = DTable; grvDetail.BestFitColumns(); } } catch { } } private void tRefresh_Tick(object sender, EventArgs e) { this.DTable = null; try { sql = @" select * from (select Num=row_number() over(order by MTIME),* from (select distinct c.LotNO, d.WHCode, e.StorageName, d.BinCode, f.StackName, a.INVCODE, b.INVNAME, b.INVDESC, b.INVUOM, d.LotQty, a.EATTRIBUTE1, case when isnull(d.MTIME,0)=0 then '' when isnull(a.EATTRIBUTE1,0) = 0 then d.MTIME ELSE DATEADD(day,cast(a.EATTRIBUTE1 as int),d.MTIME) end as daytime, d.MTIME FROM dbo.ICSWareHouseLotInfo d inner join ICSITEMLot c on c.LotNO = d.LotNO inner join dbo.ICSINVInfo a on a.INVCODE = d.INVCODE inner join ICSINVENTORY b on a.INVCODE = b.INVCODE LEFT JOIN dbo.ICSStorage e ON d.WHCode = e.StorageCode left JOIN dbo.ICSStack f ON d.BinCode = f.StackCode where 1=1 and a.INVCODE<> '' and c.LotNO <> '' and d.WHCode = '0300' and d.LotQty > '0.00') X) Y"; sql = string.Format(sql); dTL = DBHelper.ExecuteDataset(AppConfig.AppConnectString.ToString(), CommandType.Text, sql).Tables[0]; if (dt != dTL) { dt = dTL; if (dt.Rows.Count > 18) { sqlText = sql + where; sqlText = string.Format(sqlText, i, i + 17); DTable = DBHelper.ExecuteDataset(AppConfig.AppConnectString.ToString(), CommandType.Text, sqlText).Tables[0]; grdDetail.DataSource = DTable; grvDetail.BestFitColumns(); i = i + 18; x = x - 18; } else { sqlText = sql + where; sqlText = string.Format(sqlText, i, dt.Rows.Count); DTable = DBHelper.ExecuteDataset(AppConfig.AppConnectString.ToString(), CommandType.Text, sqlText).Tables[0]; grdDetail.DataSource = DTable; grvDetail.BestFitColumns(); i = 1; } } } catch { } } private void tRoll_Tick(object sender, EventArgs e) { try { string str1 = DateTime.Now.ToString("yyyyMMdd") + "000000"; string str2 = DateTime.Now.ToString("yyyyMMdd") + "000100"; IFormatProvider format = new System.Globalization.CultureInfo("zh-CN"); string TarStr = "yyyyMMddHHmmss"; //注意这里用到HH DateTime MyDate1 = DateTime.ParseExact(str1, TarStr, format); DateTime MyDate2 = DateTime.ParseExact(str2, TarStr, format); if (MyDate1 < DateTime.Now && DateTime.Now < MyDate2) { this.tRoll.Enabled = false; this.Close(); } else { sql = @" select * from (select Num=row_number() over(order by MTIME),* from (select distinct c.LotNO, d.WHCode, e.StorageName, d.BinCode, f.StackName, a.INVCODE, b.INVNAME, b.INVDESC, b.INVUOM, d.LotQty, a.EATTRIBUTE1, case when isnull(d.MTIME,0)=0 then '' when isnull(a.EATTRIBUTE1,0) = 0 then d.MTIME ELSE DATEADD(day,cast(a.EATTRIBUTE1 as int),d.MTIME) end as daytime, d.MTIME FROM dbo.ICSWareHouseLotInfo d inner join ICSITEMLot c on c.LotNO = d.LotNO inner join dbo.ICSINVInfo a on a.INVCODE = d.INVCODE inner join ICSINVENTORY b on a.INVCODE = b.INVCODE LEFT JOIN dbo.ICSStorage e ON d.WHCode = e.StorageCode left JOIN dbo.ICSStack f ON d.BinCode = f.StackCode where 1=1 and a.INVCODE<> '' and c.LotNO <> '' and d.WHCode = '0300' and d.LotQty > '0.00') X) Y"; sql = string.Format(sql); dTL = DBHelper.ExecuteDataset(AppConfig.AppConnectString.ToString(), CommandType.Text, sql).Tables[0]; if (DataTableTheSame(dt, dTL)) { if (x > 18) { sqlText = sql + where; sqlText = string.Format(sqlText, i, i + 17); DTable = DBHelper.ExecuteDataset(AppConfig.AppConnectString.ToString(), CommandType.Text, sqlText).Tables[0]; //grdDetail.DataSource = DTable; this.grdDetailData(DTable); grvDetail.BestFitColumns(); x = x - 18; i = i + 18; } else { sqlText = sql + where; sqlText = string.Format(sqlText, i, i + x - 1); DTable = DBHelper.ExecuteDataset(AppConfig.AppConnectString.ToString(), CommandType.Text, sqlText).Tables[0]; //grdDetail.DataSource = DTable; this.grdDetailData(DTable); grvDetail.BestFitColumns(); i = 1; x = dt.Rows.Count; } } else { i = 1; x = dTL.Rows.Count; if (x > 18) { sqlText = sql + where; sqlText = string.Format(sqlText, i, i + 17); DTable = DBHelper.ExecuteDataset(AppConfig.AppConnectString.ToString(), CommandType.Text, sqlText).Tables[0]; //grdDetail.DataSource = DTable; this.grdDetailData(DTable); grvDetail.BestFitColumns(); x = x - 18; i = i + 18; } else { sqlText = sql + where; sqlText = string.Format(sqlText, i, i + x - 1); DTable = DBHelper.ExecuteDataset(AppConfig.AppConnectString.ToString(), CommandType.Text, sqlText).Tables[0]; //grdDetail.DataSource = DTable; this.grdDetailData(DTable); grvDetail.BestFitColumns(); i = 1; x = dt.Rows.Count; } } } } catch { } } private void grvDetail_RowStyle(object sender, DevExpress.XtraGrid.Views.Grid.RowStyleEventArgs e) { int hand = e.RowHandle; if (hand < 0) return; DataRow dr = this.grvDetail.GetDataRow(hand); if (dr == null) return; if (((DateTime)dr["daytime"] - DateTime.Now).Days <= 3) { e.Appearance.BackColor = Color.Red;// 改变行背景颜色 //根据需求 } else if (((DateTime)dr["daytime"] - DateTime.Now).Days <= 7) { e.Appearance.BackColor = Color.Yellow;// 改变行背景颜色 //根据需求 } } private delegate void grdDetail_Data(DataTable dt); private void grdDetailData(DataTable dt) { grdDetail_Data grdData = new grdDetail_Data(grdDetailData); if (grdDetail.InvokeRequired) { grdDetail.Invoke(grdData, new object[] { dt }); } else { grdDetail.DataSource = dt; } } #region 判断两个DataTable是否相同 /// /// 比较两个DataTable内容是否相等,先是比数量,数量相等就比内容 /// /// /// private bool CompareDataTable(DataTable dtA, DataTable dtB) { if (dtA.Rows.Count == dtB.Rows.Count) { if (CompareColumn(dtA.Columns, dtB.Columns)) { //比内容 for (int i = 0; i < dtA.Rows.Count; i++) { for (int j = 0; j < dtA.Columns.Count; j++) { if (!dtA.Rows[i][j].Equals(dtB.Rows[i][j])) { return false; } } } return true; } else { return false; } } else { return false; } } /// /// 比较两个字段集合是否名称,数据类型一致 /// /// /// /// private bool CompareColumn(System.Data.DataColumnCollection dcA, System.Data.DataColumnCollection dcB) { if (dcA.Count == dcB.Count) { foreach (DataColumn dc in dcA) { //找相同字段名称 if (dcB.IndexOf(dc.ColumnName) > -1) { //测试数据类型 if (dc.DataType != dcB[dcB.IndexOf(dc.ColumnName)].DataType) { return false; } } else { return false; } } return true; } else { return false; } } public bool DataTableTheSame(DataTable Table1, DataTable Table2) { if (Table1 == null || Table2 == null) { return false; } if (Table1.Rows.Count != Table2.Rows.Count) { return false; } if (Table1.Columns.Count != Table2.Columns.Count) { return false; } for (int i = 0; i < Table1.Rows.Count; i++) { for (int j = 0; j < Table1.Columns.Count; j++) { if (Table1.Rows[i][j].ToString() != Table2.Rows[i][j].ToString()) { return false; } } } return true; } #endregion } }