提交单据管理和修改密码功能

This commit is contained in:
cyf
2026-07-28 10:16:51 +08:00
parent e4b40a32d7
commit b893e8d8e4
75 changed files with 16227 additions and 309 deletions
+78 -2
View File
@@ -25,6 +25,7 @@ using System;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Windows.Forms;
@@ -36,6 +37,11 @@ namespace Lskj.Control
/// </summary>
public partial class FrmExport : Form
{
/// <summary>
/// 临时导出表无法执行原表的自定义汇总逻辑,保存原表已经计算完成的总计值。
/// </summary>
private readonly Dictionary<string, object> _exportCustomSummaryValues = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase);
public FrmExport()
{
InitializeComponent();
@@ -45,8 +51,57 @@ namespace Lskj.Control
gridView1.Appearance.Row.Font = new Font("宋体", 9);
gridView1.OptionsView.RowAutoHeight = true;
gridView1.RowCellStyle += new RowCellStyleEventHandler(OnGridViewRowCellStyle);
gridView1.CustomSummaryCalculate += OnExportCustomSummaryCalculate;
Lskj.Control.Model.AutoSizeChange.ControllInitializeSize(this);
}
/// <summary>
/// 将原表已经计算完成的自定义总计回填到临时导出表。
/// </summary>
private void OnExportCustomSummaryCalculate(object sender, DevExpress.Data.CustomSummaryEventArgs e)
{
if (!e.IsTotalSummary || e.SummaryProcess != DevExpress.Data.CustomSummaryProcess.Finalize)
{
return;
}
GridSummaryItem summaryItem = e.Item as GridSummaryItem;
object summaryValue;
if (summaryItem != null && !string.IsNullOrEmpty(summaryItem.FieldName) &&
_exportCustomSummaryValues.TryGetValue(summaryItem.FieldName, out summaryValue))
{
e.TotalValue = summaryValue;
e.TotalValueReady = true;
}
}
/// <summary>
/// 百分率自定义汇总在原表中可能已经格式化为字符串,导出前还原为数值。
/// </summary>
private static object GetExportSummaryValue(GridColumn column, GridSummaryItem summaryItem)
{
object summaryValue = summaryItem.SummaryValue;
string valueText = summaryValue as string;
string summaryFormat = summaryItem.DisplayFormat ?? string.Empty;
string columnFormat = column == null ? string.Empty : column.DisplayFormat.FormatString;
if (string.IsNullOrWhiteSpace(valueText) ||
(!summaryFormat.Contains("%") && !columnFormat.Contains("%")))
{
return summaryValue;
}
string percentSymbol = CultureInfo.CurrentCulture.NumberFormat.PercentSymbol;
string numericText = valueText.Replace(percentSymbol, string.Empty).Replace("%", string.Empty).Trim();
decimal percentageValue;
if (decimal.TryParse(numericText, NumberStyles.Any, CultureInfo.CurrentCulture, out percentageValue) ||
decimal.TryParse(numericText, NumberStyles.Any, CultureInfo.InvariantCulture, out percentageValue))
{
return percentageValue / 100m;
}
return summaryValue;
}
/// <summary>
/// DataTable转换成Excel文档流(导出数据量超出65535条,分sheet)
/// </summary>
@@ -105,10 +160,12 @@ namespace Lskj.Control
/// <returns>GridControl.</returns>
public BandedGridControlEx ReplaceBitColumn(BandedGridControlEx bandGridControlEx, bool IsCustomColumn = false)
{
_exportCustomSummaryValues.Clear();
bool hasBoolean = false;
BandedGridView gridView = bandGridControlEx.GridView as BandedGridView;
BandedGridControlEx NewBandedGridControlEx = new BandedGridControlEx();
BandedGridView gridView2 = NewBandedGridControlEx.GridView as BandedGridView;
gridView2.CustomSummaryCalculate += OnExportCustomSummaryCalculate;
gridView2.Columns.Clear();//默认有2个列
List<string> boolList = new List<string>();
List<string> datetimeList = new List<string>();
@@ -164,6 +221,8 @@ namespace Lskj.Control
newCol.Width = col.Width;
newCol.OptionsColumn.AllowEdit = col.OptionsColumn.AllowEdit;
newCol.ColumnEdit = boolList.Contains(col.FieldName) || datetimeList.Contains(col.FieldName) ? null : col.ColumnEdit;
newCol.DisplayFormat.FormatType = col.DisplayFormat.FormatType;
newCol.DisplayFormat.FormatString = col.DisplayFormat.FormatString;
//多表头默认都有1级标题(默认有空白表头)
if (col.OwnerBand != null)
@@ -377,6 +436,7 @@ namespace Lskj.Control
//底部汇总是否导出
if (SystemInfo.Instance.ExportSummary)
{
gridView.UpdateTotalSummary();
for (int i = 1; i < gridView2.Columns.Count; i++)
{
string columnName = gridView2.Columns[i].FieldName;
@@ -384,6 +444,11 @@ namespace Lskj.Control
GridSummaryItem gsi = gridView.Columns[columnName].SummaryItem;
if (gsi.SummaryType != DevExpress.Data.SummaryItemType.None) //gsi.SummaryValue!=null&& !string.IsNullOrEmpty(gsi.SummaryValue.ToString())
{
if (gsi.SummaryType == DevExpress.Data.SummaryItemType.Custom)
{
_exportCustomSummaryValues[columnName] = GetExportSummaryValue(gridView.Columns[columnName], gsi);
}
gridView2.Columns[i].Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridColumnSummaryItem(gsi.SummaryType, gridView2.Columns[i].FieldName.ToString(), gsi.DisplayFormat) });
if (SystemInfo.Instance.GroupSpecialMode)
@@ -422,6 +487,7 @@ namespace Lskj.Control
public GridControl ReplaceBitColumn(GridControl control, bool IsCustomColumn = false)
{
GridView gridView = control.FocusedView as GridView;
_exportCustomSummaryValues.Clear();
bool hasBoolean = false;
List<string> boolList = new List<string>();
List<string> datetimeList = new List<string>();
@@ -481,6 +547,8 @@ namespace Lskj.Control
newCol.Width = 100;
newCol.OptionsColumn.AllowEdit = col.OptionsColumn.AllowEdit;
newCol.ColumnEdit = boolList.Contains(col.FieldName) || datetimeList.Contains(col.FieldName) ? null : col.ColumnEdit;
newCol.DisplayFormat.FormatType = col.DisplayFormat.FormatType;
newCol.DisplayFormat.FormatString = col.DisplayFormat.FormatString;
this.gridView1.Columns.Add(newCol);
visibleList.Add(col.FieldName);
if (gridModel != null && !dictionary.ContainsKey(col.FieldName))
@@ -733,7 +801,9 @@ namespace Lskj.Control
if (firstColumn != null)
{
this.gridView1.OptionsView.ShowFooter = true;
firstColumn.Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Count, firstColumn.FieldName.ToString(), "合计: {0:#,###}行") });
string firstFieldName = firstColumn.FieldName.ToString();
_exportCustomSummaryValues[firstFieldName] = string.Format("合计: {0}行", dtTable.Rows.Count);
firstColumn.Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Custom, firstFieldName, "{0}") });
if (SystemInfo.Instance.GroupSpecialMode)
{
@@ -748,6 +818,7 @@ namespace Lskj.Control
//底部汇总是否导出
if (SystemInfo.Instance.ExportSummary)
{
gridView.UpdateTotalSummary();
for (int i = 1; i < this.gridView1.Columns.Count; i++)
{
string columnName = this.gridView1.Columns[i].FieldName;
@@ -755,6 +826,11 @@ namespace Lskj.Control
if (gsi.SummaryType != DevExpress.Data.SummaryItemType.None) //gsi.SummaryValue!=null&& !string.IsNullOrEmpty(gsi.SummaryValue.ToString())
{
if (gsi.SummaryType == DevExpress.Data.SummaryItemType.Custom)
{
_exportCustomSummaryValues[columnName] = GetExportSummaryValue(gridView.Columns[columnName], gsi);
}
string originalFormat = gsi.DisplayFormat;
// 匹配 {0:#.##}、{0:0.##} 等格式 避免出现没有小数但是还有小数点的情况,如 0.
try
@@ -763,7 +839,7 @@ namespace Lskj.Control
if (match.Success)
{
string innerFormat = match.Groups[1].Value;
if (innerFormat.Contains("."))
if (innerFormat.Contains(".") && innerFormat.Split(';').Length == 1)
{
// 生成条件格式:正数;负数;零(整数无小数点)
string newInnerFormat = $"{innerFormat};{innerFormat};{innerFormat.Split('.')[0]}";