Files
lserp_cs_5.0/插件库/Lskj.PubUtils/CommonUtils.cs
T
2026-07-10 15:25:05 +08:00

319 lines
14 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Security.Cryptography;
using DevExpress.XtraGrid.Columns;
using DevExpress.Utils;
using DevExpress.XtraTreeList.Columns;
using DevExpress.XtraGrid;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraEditors.Repository;
using System.Data;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace Lskj.PubUtils
{
public static class CommonUtils
{
#region 计算字宽度
private static string[] words = { "A", "B", "C", "D", "E", "F", "G", " H", " I", " J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" };
/// <summary>
/// 计算字宽度
/// </summary>
/// <param name="source"></param>
/// <returns></returns>
public static int GetFontWidth(string source)
{
return CutStr_BytesLen(source) * 6 + GetWords(source);
}
private static int GetWords(string source)
{
int len = 0;
Regex reg = new Regex("[A-Z]");
MatchCollection mcs = reg.Matches(source);
foreach (Match item in mcs)
{
if (words.Contains(item.Value)) len += 2;
}
return len;
}
/// <summary>
/// 截断字符串 1个汉字长度为2 (超过则截断 拼上…)
/// </summary>
/// <param name="strInput"></param>
/// <param name="intlen"></param>
/// <returns></returns>
private static int CutStr_BytesLen(string strInput)//截取字符串
{
strInput = strInput.Trim();
ASCIIEncoding ascii = new ASCIIEncoding();
int intLength = 0;
byte[] s = ascii.GetBytes(strInput);
for (int i = 0; i < s.Length; i++)
{
//中文字符转化ASCII吗后不能识别全部都变成63,才回出现这样结果,但是如何碰上日文就麻烦了,全半角假名全部都是63无法识别!所以该方法谨慎使用!
if ((int)s[i] == 63)
{
intLength += 2;
}
else
{
intLength += 1;
}
}
return intLength;
}
#endregion
#region 格式化列
/// <summary>
/// Grid格式化
/// </summary>
/// <param name="gridColumn"></param>
/// <param name="formatString"></param>
/// <param name="fieldType"></param>
public static void DataFormat(GridColumn gridColumn, string formatString, int fieldType)
{
if (string.IsNullOrEmpty(formatString)) return;
switch (fieldType)
{
case ControlType.LabTextInt: // 数字格式化
case ControlType.LabCalcText: // 计算器格式化
gridColumn.DisplayFormat.FormatType = FormatType.Numeric;
gridColumn.DisplayFormat.FormatString = formatString;
break;
default:
break;
}
}
/// <summary>
/// TreeList格式化
/// </summary>
/// <param name="treeColumn"></param>
/// <param name="formatString"></param>
/// <param name="fieldType"></param>
public static void DataFormat(TreeListColumn treeColumn, string formatString, int fieldType)
{
if (string.IsNullOrEmpty(formatString)) return;
// 数字格式化
if (fieldType == 7)
{
treeColumn.Format.FormatType = FormatType.Numeric;
treeColumn.Format.FormatString = formatString;
}
}
#endregion
#region 获取参数
public static List<string> GetParamValue(string param)
{
string SqlParamRegex = "{([^{])+}";
List<string> list = new List<string>();
Regex regex = new Regex(SqlParamRegex);
MatchCollection mcs = regex.Matches(param);
foreach (Match item in mcs)
{
list.Add(item.Value);
}
return list;
}
#endregion
#region 特殊情况导出Excel
/// <summary>
/// 替换GridControl总bit类型,替换为是,否
/// </summary>
/// <param name="SourceGrid"></param>
/// <returns></returns>
public static GridControl ReplaceBitType(GridControl SourceGrid)
{
GridView gridView = SourceGrid.FocusedView as GridView;
bool hasBoolean = false;
GridColumn sortColumn = null;
List<string> boolList = new List<string>();
List<string> visibleList = new List<string>();
foreach (GridColumn col in gridView.Columns)
{
if ((col.ColumnEdit != null && col.ColumnEdit.GetType() == typeof(RepositoryItemCheckEdit)) ||
(col.ColumnType != null && col.ColumnType.Name.ToLower() == "boolean"))
{
boolList.Add(col.FieldName);
hasBoolean = true;
}
if (sortColumn == null && col.SortOrder != DevExpress.Data.ColumnSortOrder.None)
{
sortColumn = col;
}
}
if (hasBoolean)
{
ExportExsForm exsForm = new ExportExsForm();
GridControl newGridControl = exsForm.gridControl1;
GridView newGridView = exsForm.gridView1;
// 复制列
foreach (GridColumn col in gridView.Columns)
{
if (col.Visible)
{
GridColumn newCol = new GridColumn();
newCol.Caption = col.Caption;
newCol.FieldName = col.FieldName;
newCol.Name = col.Name;
newCol.VisibleIndex = col.VisibleIndex;
newCol.Width = col.Width;
newCol.OptionsColumn.AllowEdit = col.OptionsColumn.AllowEdit;
newCol.ColumnEdit = boolList.Contains(col.FieldName) ? null : col.ColumnEdit;
newGridView.Columns.Add(newCol);
visibleList.Add(col.FieldName);
}
}
DataTable sourceTable = (gridView.DataSource as DataView).Table;
DataTable dtTable = new DataTable();
// 复制DataTable列
foreach (DataColumn col in sourceTable.Columns)
{
if (visibleList.Contains(col.ColumnName))
{
DataColumn newCol = new DataColumn();
newCol.ColumnName = col.ColumnName;
newCol.Caption = col.Caption;
newCol.DataType = boolList.Contains(col.ColumnName) ? typeof(String) : col.DataType;
dtTable.Columns.Add(newCol);
}
}
// 复制DataTable行
foreach (DataRow row in sourceTable.Rows)
{
DataRow newRow = dtTable.NewRow();
foreach (DataColumn col in sourceTable.Columns)
{
if (visibleList.Contains(col.ColumnName))
{
if (boolList.Contains(col.ColumnName))
{
newRow[col.ColumnName] = row[col.ColumnName] + "" == "0" ||
(row[col.ColumnName] + "").ToLower() == "false" ? "否" : "是";
}
else
{
if (string.IsNullOrEmpty(row[col.ColumnName] + ""))
{
if (col.DataType == typeof(Int16) ||
col.DataType == typeof(Int32) ||
col.DataType == typeof(Int64) ||
col.DataType == typeof(Decimal) ||
col.DataType == typeof(Double))
{
newRow[col.ColumnName] = 0;
}
}
else
{
newRow[col.ColumnName] = row[col.ColumnName] + "";
}
}
//处理统计
DataColumn dcIsSum = sourceTable.Columns["isSum"];
if (dcIsSum != null && !String.IsNullOrEmpty(row["isSum"] + ""))
{
int isSum = Convert.ToInt32(row["isSum"]);
int fieldsqlTag = Convert.ToInt32(row["fieldsqlTag"]);
string dataFormat = row["DataFormat"] + "";
GridColumn gridColumn = newGridView.Columns[col.ColumnName];
CommonUtils.DataFormat(gridColumn, dataFormat, fieldsqlTag);
if (isSum == 1)
{
newGridView.OptionsView.ShowFooter = true;
if ((row["calcExpr"] + "").IndexOf("/{") == -1)
{
gridColumn.Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Sum, row["fieldname"].ToString(), "{0:" + dataFormat + "}") });
newGridView.GroupSummary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Sum, row["fieldname"].ToString(), null, "{0:" + dataFormat + "}") });
}
else
{
gridColumn.Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Custom, row["fieldname"].ToString(), "{0:" + dataFormat + "}") });
newGridView.GroupSummary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Custom, row["fieldname"].ToString(), null, "{0:" + dataFormat + "}") });
}
}
}
}
}
dtTable.Rows.Add(newRow);
}
if (gridView.Columns.Count > 0)
{
GridColumn firstColumn = newGridView.Columns[0];
if (firstColumn != null)
{
newGridView.OptionsView.ShowFooter = true;
firstColumn.Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Count, firstColumn.FieldName.ToString(), "合计: {0:#,###}行") });
newGridView.GroupSummary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Count, firstColumn.FieldName.ToString(), null, "合计: {0:#,###}行") });
}
}
if (sortColumn != null)
{
DataView dataView = dtTable.DefaultView;
dataView.Sort = string.Format(" {0} {1} ", sortColumn.FieldName, sortColumn.SortOrder == DevExpress.Data.ColumnSortOrder.Descending ? "desc" : "asc");
dtTable = dataView.ToTable();
}
newGridControl.DataSource = dtTable;
return newGridControl;
}
else
{
return SourceGrid;
}
}
#endregion
#region 设置系统时间
[DllImport("kernel32.dll", EntryPoint = "GetSystemDefaultLCID")]
public static extern int GetSystemDefaultLCID();
[DllImport("kernel32.dll", EntryPoint = "SetLocaleInfoA")]
public static extern int SetLocaleInfo(int Locale, int LCType, string lpLCData);
public const int LOCALE_SLONGDATE = 0x20;
public const int LOCALE_SSHORTDATE = 0x1F;
public const int LOCALE_STIME = 0x1003;
/// <summary>
/// 设置时间日期格式yyyy-MM-dd HH:mm:ss
/// </summary>
public static void SetDateTimeFormat()
{
try
{
int x = GetSystemDefaultLCID();
SetLocaleInfo(x, LOCALE_STIME, "HH:mm:ss"); //时间格式
SetLocaleInfo(x, LOCALE_SSHORTDATE, "yyyy-MM-dd"); //短日期格式
//SetLocaleInfo(x, LOCALE_SLONGDATE, "yyyy-MM-dd"); //长日期格式
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
}
#endregion
}
}