using DevExpress.Utils; using DevExpress.XtraEditors; using DevExpress.XtraEditors.Controls; using DevExpress.XtraEditors.Events; using DevExpress.XtraEditors.Repository; using DevExpress.XtraGrid.Columns; using DevExpress.XtraGrid.Views.Base; using DevExpress.XtraGrid.Views.Grid; using Lskj.Business.Impl; using Lskj.Control; using Lskj.Core; using Lskj.Model; using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Windows.Forms; namespace Lskj.PubPdfSign { public partial class FrmUpload : BaseForm { public FrmUpload() { InitializeComponent(); this.Load += OnFrmMainLoad; this.FormClosed += OnFrmMainClosed; } /// /// model /// public DynamicPdfSignModel PdfSignModel; /// /// AdapterObj /// public SqlDataAdapter AdapterObj { get; set; } /// /// 关闭窗口 /// /// /// private void OnFrmMainClosed(object sender, FormClosedEventArgs e) { this.pdfEditorEx.CloseDocument(); } /// /// 初始化控件 /// /// /// private void OnFrmMainLoad(object sender, EventArgs e) { this.btn_UpLoad.Click += OnBtnUpLoadClick; this.btn_UpDelete.Click += OnBtnUpDeleteClick; this.btn_UpSave.Click += OnBtnUpSaveClick; this.btn_AddTemp.Click += OnBtnAddTempClick; this.gridView.RowClick += OnGridViewRowClick; this.gridView.FocusedRowObjectChanged += OnGridViewFocusedRowObjectChanged; this.gridView.CustomDrawCell += OnGridViewCustomDrawCell; this.gridView.CustomDrawRowIndicator += OnGridViewCustomDrawRowIndicator; this.gridView.CellValueChanged += OnGridViewCellValueChanged; InitGridColumns(); pdfEditorEx.StepTable = MainImpl.GetDataTableResult($"SELECT stepCode, stepName FROM P_systemdlltabflow WHERE typecode = '{PdfSignModel.TypeCode}' UNION ALL SELECT '9999' AS stepCode, '时间' AS stepName;"); SetGridViewDataSource(GetAdapterResult($"select * from p_SignAccraditationTable")); } /// /// 添加模板 /// /// /// private void OnBtnAddTempClick(object sender, EventArgs e) { using (FrmDesign frmMain = new FrmDesign()) { frmMain.ShowDialog(); DataTable dataTable = SqlHelper.ExecuteDataTable("select * from P_SignTempTable"); versionGridLookUpEdit.DataSource = dataTable; } } /// /// 保存按钮点击 /// /// /// private void OnBtnUpSaveClick(object sender, EventArgs e) { try { DataTable dataTable = this.gcMain.DataSource as DataTable; if (dataTable.Rows.Cast().Where(n => string.IsNullOrWhiteSpace(n["versionCode"] + "")).Count() > 0) { MessageUtil.Show("版本名称不能为空"); return; } int result = this.AdapterObj.Update(dataTable); } catch (Exception ex) { MessageUtil.Show($"保存失败,原因:{ex.Message}"); return; } MessageUtil.Show("保存成功"); } /// /// 删除按钮点击 /// /// /// private void OnBtnUpDeleteClick(object sender, EventArgs e) { try { int[] rowids = this.gridView.GetSelectedRows(); if (rowids == null || rowids.Length == 0) { MessageUtil.Show("请选择需要删除的数据"); } else { DialogResult result = MessageUtil.Show($"确定要删除选中{rowids.Length}条数据?", MessageBoxButtons.YesNo); if (result == DialogResult.Yes) { ArrayList localDeletes = new ArrayList(); Dictionary mList = new Dictionary(); List delToPosts = new List(); foreach (int rowid in rowids) { DataRow rowData = this.gridView.GetDataRow(rowid); if (rowData.RowState != DataRowState.Added) { string fieldValue = rowData["id"] + ""; string sqlValue = string.Format("delete from p_SignAccraditationTable where id = '{0}'", fieldValue); mList.Add(fieldValue, sqlValue); } else { localDeletes.Add(rowid); } } if (mList.Count > 0) { string hintMsg = "删除结果如下:\n"; foreach (string primaryKey in mList.Keys) { try { string deleteSql = mList[primaryKey]; SqlHelper.ExecuteNonQuery(deleteSql); hintMsg += "记录[" + primaryKey + "]删除成功.\n"; } catch (Exception ex) { hintMsg += "记录[" + primaryKey + "]删除失败,原因:" + ex.Message + "\n"; } } } else { if (localDeletes.Count > 0) { // 删除选中且未保存的数据 for (int i = localDeletes.Count - 1; i >= 0; i--) { this.gridView.DeleteRow((int)localDeletes[i]); } MessageUtil.Show("删除成功"); } else { MessageUtil.Show("无法删除"); } } SetGridViewDataSource(GetAdapterResult($"select * from p_SignAccraditationTable"), true); } } } catch (Exception ex) { MessageUtil.Show(ex.Message); } } /// /// 上传按钮点击 /// /// /// private void OnBtnUpLoadClick(object sender, EventArgs e) { using (OpenFileDialog dialog = new OpenFileDialog()) { dialog.Multiselect = true;//该值确定是否可以选择多个文件 dialog.Title = "请选择文件"; dialog.Filter = "PDF文件(*.pdf)|*.pdf"; if (dialog.ShowDialog() == DialogResult.OK) { foreach (string fileFullName in dialog.FileNames) { AddGridViewRecord(fileFullName); } } } } /// /// 版本改变时改变签名位置 /// /// /// private void OnGridViewCellValueChanged(object sender, CellValueChangedEventArgs e) { if (e.Column.FieldName.Equals("versionCode")) { string versionCode = this.gridView.GetFocusedRowCellValue(e.Column) + ""; if (!string.IsNullOrWhiteSpace(versionCode)) { this.pdfEditorEx.ClearSignBox(); this.pdfEditorEx.LoadSign(versionCode, false); } } } /// /// 点击指定行 /// /// /// private void OnGridViewRowClick(object sender, RowClickEventArgs e) { DataRow dataRow = this.gridView.GetDataRow(e.RowHandle); if (dataRow != null) { string versionCode = dataRow.Table.Columns.Contains("versionCode") ? dataRow["versionCode"] + "" : ""; this.pdfEditorEx.VersionCode = versionCode; } } /// /// 选中行改变时 /// /// /// private void OnGridViewFocusedRowObjectChanged(object sender, FocusedRowObjectChangedEventArgs e) { DataRow dataRow = this.gridView.GetFocusedDataRow(); if (dataRow != null) { string versionCode = dataRow.Table.Columns.Contains("versionCode") ? dataRow["versionCode"] + "" : ""; this.pdfEditorEx.VersionCode = versionCode; this.pdfEditorEx.OpenLocalFile(dataRow, false); } } /// /// 选中行颜色 /// /// /// private void OnGridViewCustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e) { if (e.RowHandle == gridView.FocusedRowHandle) { e.Appearance.BackColor = ColorTranslator.FromHtml("#9feb6a"); } } /// /// 显示表格序号 /// /// /// private void OnGridViewCustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e) { try { e.Appearance.TextOptions.HAlignment = HorzAlignment.Center; if (e.Info.IsRowIndicator) { if (e.RowHandle >= 0) { e.Info.DisplayText = (e.RowHandle + 1).ToString(); } } } catch (Exception) { } } /// /// 弹出框弹出时 /// /// /// private void OnSearchEditQueryPopUp(object sender, CancelEventArgs e) { int popWidth = 0; GridLookUpEdit edit = (sender as GridLookUpEdit); foreach (GridColumn col in edit.Properties.View.Columns) { int colWidth = col.GetBestWidth(); col.Width = colWidth; popWidth += colWidth; } edit.Properties.PopupFormSize = new Size(popWidth, edit.Properties.PopupFormSize.Height); } /// /// 设置数据源 /// private int SetGridViewDataSource(SqlDataAdapter adapter, bool selectRowHandler = true) { if (adapter == null) return 0; try { this.AdapterObj = adapter; DataSet dataSet = new DataSet(); adapter.Fill(dataSet, "SetGridViewDataSource"); SqlCommandBuilder cb = new SqlCommandBuilder(this.AdapterObj); DataTable dt = dataSet.Tables[0]; this.gcMain.DataSource = dt; this.gridView.BestFitColumns(); if (selectRowHandler) this.gridView.SelectRow(this.gridView.FocusedRowHandle); return dataSet.Tables[0] != null ? dataSet.Tables[0].Rows.Count : 0; } catch (Exception ex) { MessageUtil.Show(ex.Message); } return 0; } /// /// 直接表格添加数据 /// /// private void AddGridViewRecord(string fullName) { try { DataTable dt = this.gcMain.DataSource as DataTable; DataRow dataRow = dt.NewRow(); dataRow["localPath"] = fullName; dataRow["pdfUrl"] = fullName; string fileName = Path.GetFileNameWithoutExtension(fullName); dataRow["fileName"] = fileName; dataRow["stepCode"] = "100"; dataRow["operator"] = ERPInfo.Instance.UserId; dt.Rows.Add(dataRow); this.gridView.UpdateCurrentRow(); } catch (Exception ex) { MessageUtil.Show(ex.Message); } } /// /// 获取数据 /// /// /// private SqlDataAdapter GetAdapterResult(string sqlValue) { try { if (string.IsNullOrWhiteSpace(sqlValue)) return new SqlDataAdapter(); return SqlHelper.ExecuteAdapter(CommandType.Text, sqlValue); } catch (Exception) { } return new SqlDataAdapter(); } /// /// 初始化表格列 /// private void InitGridColumns() { versionGridLookUpEdit.View.OptionsView.ShowIndicator = false; versionGridLookUpEdit.View.OptionsView.ColumnAutoWidth = false; versionGridLookUpEdit.PopupSizeable = true; versionGridLookUpEdit.PopupResizeMode = ResizeMode.Default; versionGridLookUpEdit.AllowFocused = true; versionGridLookUpEdit.ImmediatePopup = true; versionGridLookUpEdit.ShowFooter = false; versionGridLookUpEdit.NullText = ""; versionGridLookUpEdit.TextEditStyle = TextEditStyles.Standard; versionGridLookUpEdit.PopupBorderStyle = PopupBorderStyles.Flat; versionGridLookUpEdit.AllowNullInput = DefaultBoolean.False; versionGridLookUpEdit.ShowPopupShadow = true; versionGridLookUpEdit.DisplayMember = "versionName"; versionGridLookUpEdit.ValueMember = "id"; versionGridLookUpEdit.View.Appearance.HeaderPanel.TextOptions.HAlignment = HorzAlignment.Center; GridColumn valueColumn = new GridColumn(); valueColumn.Name = valueColumn.FieldName = "id"; valueColumn.Caption = "编码"; valueColumn.Visible = true; GridColumn textColumn = new GridColumn(); textColumn.Name = textColumn.FieldName = "versionName"; textColumn.Caption = "版本名称"; textColumn.Visible = true; versionGridLookUpEdit.View.Columns.AddRange(new GridColumn[] { valueColumn, textColumn }); versionGridLookUpEdit.QueryPopUp += new CancelEventHandler(OnSearchEditQueryPopUp); gcMain.RepositoryItems.Add(versionGridLookUpEdit); DataTable dataTable = SqlHelper.ExecuteDataTable("select * from P_SignTempTable"); versionGridLookUpEdit.DataSource = dataTable; } } }