using DevExpress.Utils;
using DevExpress.XtraEditors;
using DevExpress.XtraEditors.Controls;
using DevExpress.XtraEditors.Drawing;
using DevExpress.XtraGrid;
using DevExpress.XtraGrid.Columns;
using DevExpress.XtraGrid.Menu;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraGrid.Views.Grid.ViewInfo;
using DevExpress.XtraTab;
using DevExpress.XtraTreeList;
using Gs.DevApp.Entity;
using Gs.DevApp.UserControl;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Cache;
using System.Reflection;
using System.Resources;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using System.Windows.Forms.VisualStyles;
using UserControls.Data;
using static System.Windows.Forms.Control;
namespace Gs.DevApp.ToolBox
{
///
/// 通用类
///
public class UtilityHelper
{
private static readonly string WebApiUrl =
ConfigurationManager.AppSettings["WebApiUrl"];
///
/// 读取加载信息
///
///
public static (Size, string, Color, Padding) getLoading()
{
Size _size = new Size(360, 90);
return (_size, "拼命加载中,请稍后...", System.Drawing.Color.LightSkyBlue, new Padding(15));
}
///
/// http请求
///
///
///
///
///
///
public static string HttpPost(string url, string meth, string param, bool isLoading = true)
{
Size _size; string _caption; Color _color; Padding _pad;
(_size, _caption, _color, _pad) = getLoading();
DevExpress.Utils.WaitDialogForm wdf = new DevExpress.Utils.WaitDialogForm("加载进度:" + meth, _caption, _size);
wdf.BackColor = _color;
wdf.Padding = _pad;
wdf.SetCaption("加载进度:" + meth);
wdf.Visible = isLoading;
HttpWebRequest request = null;
StreamWriter requestStream = null;
WebResponse response = null;
string responseStr = null;
try
{
if (string.IsNullOrEmpty(url))
url = WebApiUrl;
url += meth;
request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/json";
request.Headers.Add("token", GetBasicAuthTicket());
request.Accept = "*/*";
request.Timeout = 150000;
request.AllowAutoRedirect = false;
request.ServicePoint.Expect100Continue = false;
HttpRequestCachePolicy noCachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);
request.CachePolicy = noCachePolicy;
requestStream = new StreamWriter(request.GetRequestStream());
requestStream.Write(param);
requestStream.Close();
response = request.GetResponse();
if (response != null)
{
var reader = new StreamReader(response.GetResponseStream(),
Encoding.UTF8);
responseStr = reader.ReadToEnd();
//File.WriteAllText(Server.MapPath("~/") + @"\test.txt", responseStr);
reader.Close();
}
}
catch (Exception ex)
{
wdf.Close();
LogHelper.Debug(url, param + ":" + ex.Message);
throw ex;
}
finally
{
request = null;
requestStream = null;
response = null;
}
wdf.Close();
return responseStr;
}
///
/// 根据图片名读取资源文件,不带后缀名
///
///
/// 1为大图
///
public static Image GetImgFromResource(string imageName, int lay)
{
var assembly = Assembly.GetExecutingAssembly();
var resourceManager =
new ResourceManager("Gs.DevApp.Properties.Resources", assembly);
try
{
var image = resourceManager.GetObject(imageName) as Image;
if (image != null) return image;
}
catch (Exception ex)
{
}
var image2 = resourceManager.GetObject(lay == 1
? "chartsshowlegend_32x32"
: "linktoprevious_16x16") as Image;
return image2;
}
///
/// 初始化一个表
///
///
///
public static void SetDefaultTable(GridControl gc, GridView gv)
{
var dt = new DataTable();
foreach (GridColumn col in gv.Columns)
{
if (col.UnboundDataType == typeof(System.Boolean))
dt.Columns.Add(col.FieldName, typeof(System.Boolean));
else
{
dt.Columns.Add(col.FieldName, typeof(string));
}
}
gc.BindingContext = new BindingContext();
gc.DataSource = dt;
gc.ForceInitialize();
gv.BestFitColumns();
}
///
/// 生成访问服务的token
///
///
public static string GetBasicAuthTicket()
{
var userGuid =
string.IsNullOrEmpty(LoginInfoModel.CurrentUser.LoginUserGuid)
? Guid.NewGuid().ToString()
: LoginInfoModel.CurrentUser.LoginUserGuid;
var token = userGuid;
return token;
}
///
/// 服务返回的json转为ReturnModel-->包含TablePage分页,
///
///
///
public static ReturnModel ReturnToTablePage(
string strReturn)
{
var rto = new ReturnModel();
var json = JObject.Parse(strReturn);
rto.rtnCode = int.Parse(json["rtnCode"].ToString());
rto.rtnMsg = json["rtnMsg"].ToString();
rto.rtnData = new PageListModel();
rto.rtnData.pages = int.Parse(json["rtnData"]["pages"].ToString());
rto.rtnData.total = int.Parse(json["rtnData"]["total"].ToString());
rto.rtnData.everyPageSize =
int.Parse(json["rtnData"]["everyPageSize"].ToString());
var array = new JArray();
var d = json["rtnData"]["list"];
foreach (var a in d) array.Add(a);
var dt = JsonConvert.DeserializeObject(array.ToString());
rto.rtnData.list = dt;
return rto;
}
///
/// 服务返回的json返回ReturnModel,
///
///
///
public static ReturnModel ReturnToDynamic(string strReturn)
{
var rto = new ReturnModel();
var json = JObject.Parse(strReturn);
rto.rtnCode = int.Parse(json["rtnCode"].ToString());
rto.rtnMsg = json["rtnMsg"].ToString();
rto.rtnData = json["rtnData"];
return rto;
}
///
/// 服务返回的json串返回ReturnModel-->仅仅有list,不分页,
///
///
///
public static ReturnModel ReturnToList(string strReturn)
{
var rto = new ReturnModel();
var json = JObject.Parse(strReturn);
rto.rtnCode = int.Parse(json["rtnCode"].ToString());
rto.rtnMsg = json["rtnMsg"].ToString();
rto.rtnData = new DataTable();
var array = new JArray();
var d = json["rtnData"];
foreach (var a in d) array.Add(a);
//if (array.Count <=0)
// return null;
var dt = JsonConvert.DeserializeObject(array.ToString());
rto.rtnData = dt;
return rto;
}
#region 批量处理对像,文本值,包含清空,禁用,启用三种
///
/// 根据对象批量设置文本框的值
///
/// controls:为groupBox1.Controls/panel1.Controls
/// 对像
/// 是否可编辑
/// 关联的grid
public static void SetValueByObj(ControlCollection controls,
dynamic dynamicObject, bool isEdt, List gridViews = null)
{
isEdt = !isEdt;
if (gridViews != null)
{
foreach (var gv in gridViews)
{
gv.ClearSorting();
gv.OptionsCustomization.AllowSort = isEdt;
foreach (GridColumn colmn in gv.Columns)
{
colmn.OptionsColumn.AllowEdit = true;
if (colmn.Name.ToString().Contains("gvBtnAlawys"))
{
colmn.Visible = true;
colmn.OptionsColumn.ReadOnly = false;
}
;
if (colmn.Name.ToString().Contains("gvMxDel") || colmn.Name.ToString().Contains("gvMxTui"))
{
colmn.Visible = !isEdt;
if (colmn.Visible == true)
colmn.VisibleIndex = 1;
}
else
{
if (isEdt == false)
{
if (colmn.Tag != null && colmn.Tag.ToString().EndsWith("edit"))
colmn.OptionsColumn.ReadOnly = isEdt;
else
colmn.OptionsColumn.ReadOnly = !isEdt;
}
else
colmn.OptionsColumn.ReadOnly = isEdt;
}
}
}
}
var _btnAry = controls.Find("btnSelect", false);
if (_btnAry.Length > 0)
{
var _btnType = _btnAry[0];
_btnType.Enabled = !isEdt;
}
var _btnAry2 = controls.Find("btnTui", false);
if (_btnAry2.Length > 0)
{
var _btnType = _btnAry2[0];
_btnType.Enabled = !isEdt;
}
foreach (JProperty property in dynamicObject.Properties())
{
var strName = property.Name;
var strVal = property.Value.ToString();
try
{
var _dddddd = "txt_" + strName;
var cols = controls.Find(_dddddd, true);
if (cols.Length > 0)
{
var colType = cols[0];
if (colType is LookUpEdit)
{
var txt = colType as LookUpEdit;
if (txt != null) txt.EditValue = strVal;
txt.ReadOnly = isEdt;
continue;
}
if (colType is ImageComboBoxEdit)
{
var txt = colType as ImageComboBoxEdit;
for (var i = 0; i < txt.Properties.Items.Count; i++)
{
if (txt.Properties.Items[i].Description ==
strVal)
{
txt.ReadOnly = isEdt;
txt.SelectedIndex = i;
}
}
continue;
}
if (colType is ComboBoxEdit)
{
var txt = colType as ComboBoxEdit;
if (txt.Properties.TextEditStyle ==
TextEditStyles.DisableTextEditor)
try
{
txt.SelectedIndex = int.Parse(strVal);
}
catch (Exception)
{
txt.Text = strVal;
}
else
txt.Text = strVal;
txt.ReadOnly = isEdt;
continue;
}
if (colType is ButtonEdit)
{
var txt = colType as ButtonEdit;
if (txt != null)
txt.Text = strVal;
txt.Enabled = !isEdt;
continue;
}
//文本
if (colType is TextEdit)
{
var txt = colType as TextEdit;
if (txt != null)
txt.Text = strVal;
if (_isRead(txt.Tag))
{
txt.ReadOnly = true;
}
else
txt.ReadOnly = isEdt;
continue;
}
//文本域
if (colType is MemoEdit)
{
var txt = colType as MemoEdit;
if (txt != null)
txt.Text = strVal;
if (_isRead(txt.Tag))
{
txt.ReadOnly = true;
}
else
txt.ReadOnly = isEdt;
continue;
}
//数字卡
if (colType is NumericUpDown)
{
var txt = colType as NumericUpDown;
if (txt != null)
txt.Text = strVal;
txt.ReadOnly = isEdt;
continue;
}
//单选
if (colType is CheckEdit)
{
var txt = colType as CheckEdit;
if (_isRead(txt.Tag))
{
txt.ReadOnly = true;
}
else
txt.ReadOnly = isEdt;
if (txt != null)
{
switch (strVal)
{
case "True":
txt.Checked = true;
break;
case "1":
txt.Checked = true;
break;
case "False":
txt.Checked = false;
break;
default:
txt.Checked = false;
break;
}
}
continue;
}
//单选
if (colType is CheckBox)
{
var txt = colType as CheckBox;
if (txt != null)
switch (strVal)
{
case "True":
txt.Checked = true;
break;
case "1":
txt.Checked = true;
break;
case "False":
txt.Checked = false;
break;
default:
txt.Checked = false;
break;
}
txt.Enabled = !isEdt;
continue;
}
//时间
if (colType is DateTimePicker)
{
var txt = colType as DateTimePicker;
txt.Text = strVal;
txt.Enabled = !isEdt;
continue;
}
//Label
if (colType is Label)
{
var txt = colType as Label;
if (_dddddd == "txt_checkStatus")
{
if (strVal == "True" || strVal == "1")
txt.Text = "已审核";
if (strVal == "False" || strVal == "0" || strVal == "")
txt.Text = "未审核";
}
else
{
txt.Text = strVal;
}
}
//自定义仓库
if (colType is UcLookCk)
{
var txt = colType as UcLookCk;
txt.SetIdOrCode(strVal);
txt.IsReadly = isEdt;
continue;
}
//自定义供应商
if (colType is UcLookSupplier)
{
var txt = colType as UcLookSupplier;
txt.SetIdOrCode(strVal);
txt.IsReadly = isEdt;
continue;
}
//自定义物料
if (colType is UcLookItems)
{
var txt = colType as UcLookItems;
txt.SetIdOrCode(strVal);
txt.IsReadly = isEdt;
continue;
}
//自定车间
if (colType is UcLookWorkshop)
{
var txt = colType as UcLookWorkshop;
txt.SetIdOrCode(strVal);
txt.IsReadly = isEdt;
continue;
}
//自定产线
if (colType is UcLookWorkline)
{
var txt = colType as UcLookWorkline;
txt.SetIdOrCode(strVal);
txt.IsReadly = isEdt;
continue;
}
//自定单位
if (colType is UcLookUnit)
{
var txt = colType as UcLookUnit;
txt.SetIdOrCode(strVal);
txt.IsReadly = isEdt;
continue;
}
//自定客户
if (colType is UcLookCustomer)
{
var txt = colType as UcLookCustomer;
txt.SetIdOrCode(strVal);
txt.IsReadly = isEdt;
continue;
}
//自定员工
if (colType is UcLookStaff)
{
var txt = colType as UcLookStaff;
txt.SetIdOrCode(strVal);
txt.IsReadly = isEdt;
continue;
}
//自定组织
if (colType is UcLookOrg)
{
var txt = colType as UcLookOrg;
txt.SetIdOrCode(strVal);
txt.IsReadly = isEdt;
continue;
}
if (colType is UcLookKw)
{
var txt = colType as UcLookKw;
txt.SetIdOrCode(strVal);
txt.IsReadly = isEdt;
continue;
}
//自定用户
if (colType is UcLookUser)
{
var txt = colType as UcLookUser;
txt.SetIdOrCode(strVal);
txt.IsReadly = isEdt;
continue;
}
//自定打印机
if (colType is UcLookPrint)
{
var txt = colType as UcLookPrint;
txt.SetIdOrCode(strVal);
txt.IsReadly = isEdt;
continue;
}
//自定部门
if (colType is UcLookDepartment)
{
var txt = colType as UcLookDepartment;
txt.SetIdOrCode(strVal);
txt.IsReadly = isEdt;
continue;
}
//自定daa
if (colType is UcLookDaa)
{
var txt = colType as UcLookDaa;
txt.SetIdOrCode(strVal);
txt.IsReadly = isEdt;
continue;
}
//自定委外
if (colType is UcLookWwgd)
{
var txt = colType as UcLookWwgd;
txt.SetIdOrCode(strVal);
txt.IsReadly = isEdt;
continue;
}
//自定销售
if (colType is UcLookSales)
{
var txt = colType as UcLookSales;
txt.SetIdOrCode(strVal);
txt.IsReadly = isEdt;
continue;
}
if (colType is SimpleButton)
{
var txt = colType as SimpleButton;
if (txt.Tag != null && txt.Tag.ToString() == "gvBtnAlawys")
txt.Enabled = true;
else
txt.Enabled = !isEdt;
continue;
}
//自定工序
if (colType is UcLookGx)
{
var txt = colType as UcLookGx;
txt.SetIdOrCode(strVal);
txt.IsReadly = isEdt;
continue;
}
//自定不良
if (colType is UcDictionary)
{
var txt = colType as UcDictionary;
txt.TextTxt = (strVal);
txt.IsReadly = isEdt;
continue;
}
//自定单据类型下拉
if (colType is UcDictionaryComBox)
{
var txt = colType as UcDictionaryComBox;
txt.TextTxt = (strVal);
txt.IsReadly = isEdt;
continue;
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
foreach (Control ctrl in controls)
{
if (ctrl is TextEdit)
{
var txt = ctrl as TextEdit;
bool _bl = _isRead(txt.Tag, isEdt);
txt.ReadOnly = _bl;
// txt.ReadOnly = isEdt;
continue;
}
}
}
///
/// 清空容器里面的控件
///
/// controls:为groupBox1.Controls/panel1.Controls
/// 是否可编辑
/// 关联的grid
public static void CleanValueByControl(ControlCollection controls,
bool isEdt, List gridViews = null)
{
isEdt = !isEdt;
if (gridViews != null)
{
foreach (var gv in gridViews)
{
gv.ClearSorting();
gv.OptionsCustomization.AllowSort = isEdt;
foreach (GridColumn colmn in gv.Columns)
{
colmn.OptionsColumn.AllowEdit = true;
if (colmn.Name.ToString().Contains("gvMxDel") || colmn.Name.ToString().Contains("gvMxTui"))
{
colmn.Visible = !isEdt;
}
else
{
if (isEdt == false)
{
if (colmn.Tag != null && colmn.Tag.ToString().EndsWith("edit"))
colmn.OptionsColumn.ReadOnly = isEdt;
else
colmn.OptionsColumn.ReadOnly = !isEdt;
}
else
colmn.OptionsColumn.ReadOnly = isEdt;
}
}
}
}
foreach (Control ctrl in controls)
{
//多行文本
if (ctrl is MemoEdit)
{
var txt = ctrl as MemoEdit;
if (txt.Tag != null && txt.Tag.ToString().Length > 0 && txt.Tag.ToString().StartsWith("moren"))
{
txt.Text = txt.Tag.ToString().Replace("moren.", "");
}
else
txt.Text = "";
if (_isRead(txt.Tag))
{
txt.ReadOnly = true;
}
else
txt.ReadOnly = isEdt;
continue;
}
//下拉
if (ctrl is ComboBoxEdit)
{
var txt = ctrl as ComboBoxEdit;
if (txt.Properties.TextEditStyle ==
TextEditStyles.DisableTextEditor)
txt.SelectedIndex = 0;
else
txt.Text = "";
txt.ReadOnly = isEdt;
continue;
}
if (ctrl is ButtonEdit)
{
var txt = ctrl as ButtonEdit;
txt.Text = "";
txt.Enabled = !isEdt;
txt.ReadOnly = isEdt;
continue;
}
//文本
if (ctrl is TextEdit)
{
var txt = ctrl as TextEdit;
if (txt.Tag != null && txt.Tag.ToString().Length > 0 && txt.Tag.ToString().StartsWith("moren"))
{
txt.Text = txt.Tag.ToString().Replace("moren.", "");
}
else
txt.Text = "";
if (_isRead(txt.Tag))
{
txt.ReadOnly = true;
}
else
txt.ReadOnly = isEdt;
continue;
}
//时间
if (ctrl is DateTimePicker)
{
var txt = ctrl as DateTimePicker;
txt.Enabled = !isEdt;
continue;
}
//单选
if (ctrl is CheckBox)
{
var txt = ctrl as CheckBox;
txt.Enabled = !isEdt;
txt.Checked = false;
}
if (ctrl is CheckEdit)
{
var txt = ctrl as CheckEdit;
if (_isRead(txt.Tag))
{
txt.ReadOnly = true;
}
else
txt.ReadOnly = isEdt;
continue;
}
//自定义仓库
if (ctrl is UcLookCk)
{
var txt = ctrl as UcLookCk;
txt.SetIdOrCode("-1");
txt.IsReadly = isEdt;
continue;
}
//自定义供应商
if (ctrl is UcLookSupplier)
{
var txt = ctrl as UcLookSupplier;
txt.SetIdOrCode("-1");
txt.IsReadly = isEdt;
continue;
}
//自定义物料
if (ctrl is UcLookItems)
{
var txt = ctrl as UcLookItems;
txt.SetIdOrCode("-1");
txt.IsReadly = isEdt;
continue;
}
//自定车间
if (ctrl is UcLookWorkshop)
{
var txt = ctrl as UcLookWorkshop;
txt.SetIdOrCode("-1");
txt.IsReadly = isEdt;
continue;
}
//自定产线
if (ctrl is UcLookWorkline)
{
var txt = ctrl as UcLookWorkline;
txt.SetIdOrCode("-1");
txt.IsReadly = isEdt;
continue;
}
//自定单位
if (ctrl is UcLookUnit)
{
var txt = ctrl as UcLookUnit;
txt.SetIdOrCode("-1");
txt.IsReadly = isEdt;
continue;
}
//自定客户
if (ctrl is UcLookCustomer)
{
var txt = ctrl as UcLookCustomer;
txt.SetIdOrCode("-1");
txt.IsReadly = isEdt;
continue;
}
//自定员工
if (ctrl is UcLookStaff)
{
var txt = ctrl as UcLookStaff;
txt.SetIdOrCode("-1");
txt.IsReadly = isEdt;
continue;
}
//自定组织
if (ctrl is UcLookOrg)
{
var txt = ctrl as UcLookOrg;
txt.SetIdOrCode("-1");
txt.IsReadly = isEdt;
continue;
}
//自定用户
if (ctrl is UcLookUser)
{
var txt = ctrl as UcLookUser;
txt.SetIdOrCode("-1");
txt.IsReadly = isEdt;
continue;
}
//自定打印机
if (ctrl is UcLookPrint)
{
var txt = ctrl as UcLookPrint;
txt.SetIdOrCode("-1");
txt.IsReadly = isEdt;
continue;
}
//自定部门
if (ctrl is UcLookDepartment)
{
var txt = ctrl as UcLookDepartment;
txt.SetIdOrCode("-1");
txt.IsReadly = isEdt;
continue;
}
//自定daa
if (ctrl is UcLookDaa)
{
var txt = ctrl as UcLookDaa;
txt.SetIdOrCode("-1");
txt.IsReadly = isEdt;
continue;
}
//自定委外
if (ctrl is UcLookWwgd)
{
var txt = ctrl as UcLookWwgd;
txt.SetIdOrCode("-1");
txt.IsReadly = isEdt;
continue;
}
//自定销售
if (ctrl is UcLookSales)
{
var txt = ctrl as UcLookSales;
txt.SetIdOrCode("-1");
txt.IsReadly = isEdt;
continue;
}
//自定工序
if (ctrl is UcLookGx)
{
var txt = ctrl as UcLookGx;
txt.SetIdOrCode("-1");
txt.IsReadly = isEdt;
continue;
}
//自定不良
if (ctrl is UcDictionary)
{
var txt = ctrl as UcDictionary;
txt.TextTxt = "";
txt.IsReadly = isEdt;
continue;
}
//
if (ctrl is UcLookKw)
{
var txt = ctrl as UcLookKw;
txt.SetIdOrCode("-1");
txt.IsReadly = isEdt;
continue;
}
//自定义单据类型下拉
if (ctrl is UcDictionaryComBox)
{
var txt = ctrl as UcDictionaryComBox;
//txt.SetIdOrCode("-1");
txt.IsReadly = isEdt;
continue;
}
if (ctrl is SimpleButton)
{
var txt = ctrl as SimpleButton;
if (txt.Tag != null && txt.Tag.ToString() == "gvBtnAlawys")
txt.Enabled = true;
else
txt.Enabled = !isEdt;
continue;
}
}
}
///
/// 禁用或启用容器里面的控件
///
/// controls:为groupBox1.Controls/panel1.Controls
///
///
public static void ChangeEnableByControl(ControlCollection controls,
bool isEdt, List gridViews = null)
{
isEdt = !isEdt;
if (gridViews != null)
{
foreach (var gv in gridViews)
{
gv.ClearSorting();
gv.OptionsCustomization.AllowSort = isEdt;
foreach (GridColumn colmn in gv.Columns)
{
colmn.OptionsColumn.AllowEdit = true;
if (colmn.Name.ToString().Contains("gvMxDel") || colmn.Name.ToString().Contains("gvMxTui"))
{
colmn.Visible = !isEdt;
}
else
{
if (colmn.Tag != null && colmn.Tag.ToString().EndsWith("edit"))
colmn.OptionsColumn.ReadOnly = isEdt;
else
colmn.OptionsColumn.ReadOnly = isEdt;
}
}
}
}
foreach (Control ctrl in controls)
{
//下拉
if (ctrl is ComboBoxEdit)
{
var txt = ctrl as ComboBoxEdit;
txt.ReadOnly = isEdt;
continue;
}
if (ctrl is ButtonEdit)
{
var txt = ctrl as ButtonEdit;
txt.Enabled = !isEdt;
continue;
}
//文本
if (ctrl is TextEdit)
{
var txt = ctrl as TextEdit;
if (_isRead(txt.Tag))
{
txt.ReadOnly = true;
}
else
txt.ReadOnly = isEdt;
continue;
}
if (ctrl is MemoEdit)
{
var txt = ctrl as MemoEdit;
if (_isRead(txt.Tag))
{
txt.ReadOnly = true;
}
else
txt.ReadOnly = isEdt;
continue;
}
//数字卡
if (ctrl is NumericUpDown)
{
var txt = ctrl as NumericUpDown;
txt.ReadOnly = isEdt;
continue;
}
//日期
if (ctrl is DateTimePicker)
{
ctrl.Enabled = !isEdt;
continue;
}
//单选
if (ctrl is CheckBox)
{
ctrl.Enabled = !isEdt;
continue;
}
if (ctrl is CheckEdit)
{
var txt = ctrl as CheckEdit;
txt.ReadOnly = isEdt;
continue;
}
//自定义仓库
if (ctrl is UcLookCk)
{
var txt = ctrl as UcLookCk;
txt.IsReadly = isEdt;
continue;
}
//自定义仓库
if (ctrl is UcLookKw)
{
var txt = ctrl as UcLookKw;
txt.IsReadly = isEdt;
continue;
}
//自定义供应商
if (ctrl is UcLookSupplier)
{
var txt = ctrl as UcLookSupplier;
txt.IsReadly = isEdt;
continue;
}
//自定义物料
if (ctrl is UcLookItems)
{
var txt = ctrl as UcLookItems;
txt.IsReadly = isEdt;
continue;
}
//自定义车间
if (ctrl is UcLookWorkshop)
{
var txt = ctrl as UcLookWorkshop;
txt.IsReadly = isEdt;
continue;
}
//自定义产线
if (ctrl is UcLookWorkline)
{
var txt = ctrl as UcLookWorkline;
txt.IsReadly = isEdt;
continue;
}
//自定义单位
if (ctrl is UcLookUnit)
{
var txt = ctrl as UcLookUnit;
txt.IsReadly = isEdt;
continue;
}
//自定义客户
if (ctrl is UcLookCustomer)
{
var txt = ctrl as UcLookCustomer;
txt.IsReadly = isEdt;
continue;
}
//自定义员工
if (ctrl is UcLookStaff)
{
var txt = ctrl as UcLookStaff;
txt.IsReadly = isEdt;
continue;
}
//自定组织
if (ctrl is UcLookOrg)
{
var txt = ctrl as UcLookOrg;
txt.IsReadly = isEdt;
continue;
}
//自定用户
if (ctrl is UcLookUser)
{
var txt = ctrl as UcLookUser;
txt.IsReadly = isEdt;
continue;
}
//自定打印
if (ctrl is UcLookPrint)
{
var txt = ctrl as UcLookPrint;
txt.IsReadly = isEdt;
continue;
}
//自定部门
if (ctrl is UcLookDepartment)
{
var txt = ctrl as UcLookDepartment;
txt.IsReadly = isEdt;
continue;
}
//自定daa
if (ctrl is UcLookDaa)
{
var txt = ctrl as UcLookDaa;
txt.IsReadly = isEdt;
continue;
}
//自定委外
if (ctrl is UcLookWwgd)
{
var txt = ctrl as UcLookWwgd;
txt.IsReadly = isEdt;
continue;
}
//自定销售
if (ctrl is UcLookSales)
{
var txt = ctrl as UcLookSales;
txt.IsReadly = isEdt;
continue;
}
//自定工序
if (ctrl is UcLookGx)
{
var txt = ctrl as UcLookGx;
txt.IsReadly = isEdt;
continue;
}
//自定不良
if (ctrl is UcDictionary)
{
var txt = ctrl as UcDictionary;
txt.IsReadly = isEdt;
continue;
}
//自定单据类型下拉
if (ctrl is UcDictionaryComBox)
{
var txt = ctrl as UcDictionaryComBox;
txt.IsReadly = isEdt;
continue;
}
if (ctrl is SimpleButton)
{
var txt = ctrl as SimpleButton;
if (txt.Tag != null && txt.Tag.ToString() == "gvBtnAlawys")
txt.Enabled = true;
else
txt.Enabled = !isEdt;
continue;
}
}
}
#endregion
///
/// 判断控件只读状态
///
///
///
///
private static bool _isRead(object obj, bool isEdt = false)
{
///永远是只读的
if (obj != null && obj.ToString().ToUpper() == ("readOnly".ToUpper()))
{
return true;
}
///永远是可写的
if (obj != null && obj.ToString().ToUpper() == ("readOnly-1".ToUpper()))
{
return false;
}
return isEdt;
}
///
/// tab跳转:0查看,1退出,2删除,3修改,4新增加,6保存后
///
///
/// 0查看,1退出,2删除,3修改,4新增加,6保存后
public static void JumpTab(XtraTabControl tabControl, int action)
{
if (action == 0)
{
tabControl.TabPages[0].PageEnabled = true;
tabControl.TabPages[1].PageEnabled = true;
tabControl.SelectedTabPageIndex = 1;
return;
}
if (action == 1)
{
tabControl.TabPages[0].PageEnabled = true;
tabControl.TabPages[1].PageEnabled = true;
tabControl.SelectedTabPageIndex = 0;
return;
}
if (action == 2)
{
tabControl.TabPages[0].PageEnabled = true;
tabControl.TabPages[1].PageEnabled = true;
tabControl.SelectedTabPageIndex = 0;
return;
}
if (action == 3)
{
tabControl.TabPages[0].PageEnabled = false;
tabControl.TabPages[1].PageEnabled = true;
tabControl.SelectedTabPageIndex = 1;
return;
}
if (action == 4)
{
tabControl.TabPages[0].PageEnabled = false;
tabControl.TabPages[1].PageEnabled = true;
tabControl.SelectedTabPageIndex = 1;
return;
}
if (action == 5)
{
tabControl.TabPages[0].PageEnabled = true;
tabControl.TabPages[1].PageEnabled = true;
tabControl.SelectedTabPageIndex = 1;
return;
}
if (action == 6)
{
tabControl.TabPages[0].PageEnabled = true;
tabControl.TabPages[1].PageEnabled = true;
return;
}
}
///
/// TreeView联动选择
///
///
public static void TreeViewCheck(TreeViewEventArgs e)
{
try
{
if (e.Node.Nodes.Count > 0)
foreach (TreeNode tn in e.Node.Nodes)
{
tn.Checked = e.Node.Checked;
foreach (TreeNode x in tn.Nodes)
{
x.Checked = e.Node.Checked;
foreach (TreeNode y in x.Nodes)
y.Checked = e.Node.Checked;
}
}
if (e.Node.Checked && e.Node.Parent != null &&
e.Node.Parent.Nodes.Count > 0)
{
var currentNode = e.Node;
while (currentNode != null)
{
currentNode.Checked = e.Node.Checked;
currentNode = currentNode.Parent;
}
}
}
catch (Exception ex)
{
MsgHelper.ShowError(ex.Message);
}
}
///
/// 转Guid
///
///
///
public static Guid ToGuid(string str)
{
if (string.IsNullOrEmpty(str)) return Guid.Empty;
return Guid.Parse(str);
}
public static decimal ToDecimal(string str)
{
try
{
return decimal.Parse(str);
}
catch (Exception)
{
return 0;
}
}
public static decimal? GetDecimal(string s)
{
if (string.IsNullOrEmpty(s)) return null;
return decimal.Parse(s);
}
public static int ToBit(string str)
{
if (str.ToUpper() == "true".ToUpper())
return 1;
return 0;
}
public static bool ToCheck(string str)
{
if (str.ToUpper() == "true".ToUpper())
return true;
if (str.ToUpper() == "1".ToUpper())
return true;
return false;
}
///
/// 读取grid的当前行
///
///
/// 编辑框中的主键名
/// 编辑框中的文本框名
///
///
///
public static (string, string) GetCurrentRow(
XtraTabControl xtraTabControl1
, Label lbGuid
, TextEdit txtName
, GridView gridView1
, string fileName = ""
, int SelectedTabPageIndex = 1)
{
var _strGuid = "";
var _strName = "";
if (xtraTabControl1.SelectedTabPageIndex == SelectedTabPageIndex &&
lbGuid.Text.Length > 10)
{
_strGuid = lbGuid.Text.Trim();
_strName = txtName.Text.Trim();
}
else
{
var dr = gridView1.GetFocusedDataRow();
if (dr == null || string.IsNullOrEmpty(dr["guid"].ToString()))
{
}
else
{
_strGuid = dr["guid"].ToString();
if (string.IsNullOrEmpty(fileName))
_strName = dr[1].ToString();
else
_strName = dr[fileName].ToString();
}
}
return (_strGuid, _strName);
}
///
/// 读取TreeView的当前行
///
///
///
///
///
///
///
public static (string, string) GetCurrentRow(
XtraTabControl xtraTabControl1
, Label lbGuid
, TextEdit txtName
, TreeView tlMenu
, int SelectedTabPageIndex = 1)
{
var _strGuid = "";
var _strName = "";
if (xtraTabControl1.SelectedTabPageIndex == SelectedTabPageIndex &&
lbGuid.Text.Length > 10)
{
_strGuid = lbGuid.Text.Trim();
_strName = txtName.Text.Trim();
}
else
{
var clickedNode = tlMenu.SelectedNode;
if (clickedNode != null)
{
_strGuid = clickedNode.Name;
_strName = clickedNode.Text.Trim();
}
}
return (_strGuid, _strName);
}
///
/// 读取TreeList的当前行
///
///
///
///
///
///
///
public static (string, string) GetCurrentRow(
XtraTabControl xtraTabControl1
, Label lbGuid
, TextEdit txtName
, TreeList tlMenu
, int SelectedTabPageIndex = 1)
{
var _strGuid = "";
var _strName = "";
if (xtraTabControl1.SelectedTabPageIndex == SelectedTabPageIndex &&
lbGuid.Text.Length > 10)
{
_strGuid = lbGuid.Text.Trim();
_strName = txtName.Text.Trim();
}
else
{
_strGuid = tlMenu.FocusedNode.GetValue("guid").ToString();
_strName = tlMenu.FocusedNode.GetValue(0).ToString();
}
return (_strGuid, _strName);
}
///
/// 读取GridView双击的主键
///
///
///
///
///
public static string GetCurrentDoubleRow(GridView gridView1
, MouseEventArgs e
, string colName)
{
var info = gridView1.CalcHitInfo(e.Location);
if (info.InRow)
{
var view = info.View;
if (view != null)
{
var row = view.GetDataRow(info.RowHandle);
if (row != null)
{
var rowGuid = row[colName].ToString();
return rowGuid;
}
}
}
return "";
}
///
/// 读取GridView双击的主键
///
///
///
///
///
public static string GetCurrentDoubleRow(TreeList tlMenu
, MouseEventArgs e
, string colName)
{
var info = tlMenu.CalcHitInfo(e.Location);
if (info.Node != null)
{
var clickedNode = tlMenu.FocusedNode;
if (clickedNode.FirstNode == null)
{
var rowGuid = clickedNode.GetValue(colName).ToString();
return rowGuid;
}
}
return "";
}
///
///
///
///
///
///
/// 对应的审核字段名称
///
public static void SetCheckIco(object s, PictureBox btnChkIco, Form fm, string fileName = "checkStatus", string icoName = "")
{
GridView dgv = s as GridView;
if (dgv != null)
{
if (dgv.GetSelectedRows() != null && dgv.GetSelectedRows().Count() > 0)
{
var selectedRow = dgv.GetSelectedRows()[0]; // 获取第一个选中行的索引
if (selectedRow >= 0)
{
var checkStatus = dgv.GetRowCellValue(selectedRow, fileName).ToString(); // 获取指定列的值
btnChkIco.Text = checkStatus;
btnChkIco.Visible = true;
if (checkStatus == "1" || checkStatus.ToUpper() == true.ToString().ToUpper() || checkStatus == "已审核")
{
btnChkIco.Image = global::Gs.DevApp.Properties.Resources.ico_check;
btnChkIco.Tag = "已审核";
}
else
{
btnChkIco.Image = global::Gs.DevApp.Properties.Resources.ico_noCheck;
btnChkIco.Tag = "未审核";
}
btnChkIco.Anchor = AnchorStyles.Top | AnchorStyles.Right; // 靠右
btnChkIco.Location = new Point(fm.ClientSize.Width - btnChkIco.Width - 20, 25); // 距离顶部10像素
}
}
}
}
///
///
///
///
/// chk字段
/// chk user
/// chk date
///
/// 当前窗体
/// 1为审核,0为反审核
///
public static void SetCheckIco(GridView gridView1, string zdChk, string zdChkUser, string zdCkDate, PictureBox btnChkIco, Form fm, string fileName, string icoName = "")
{
btnChkIco.Anchor = AnchorStyles.Top | AnchorStyles.Right; // 靠右
btnChkIco.Location = new Point(fm.ClientSize.Width - btnChkIco.Width - 20, 80); // 距离顶部10像素
if (gridView1 == null)
{
btnChkIco.Visible = true;
if (fileName == "1")
{
btnChkIco.Image = global::Gs.DevApp.Properties.Resources.ico_check;
btnChkIco.Tag = "已审核";
}
else
{
btnChkIco.Image = global::Gs.DevApp.Properties.Resources.ico_noCheck;
btnChkIco.Tag = "未审核";
}
return;
}
if (fileName == "1" || fileName.ToUpper() == true.ToString().ToUpper())
{
btnChkIco.Image = global::Gs.DevApp.Properties.Resources.ico_check;
btnChkIco.Tag = "已审核";
if (!string.IsNullOrEmpty(zdChkUser))
gridView1.SetFocusedRowCellValue(zdChkUser, "已审核");
if (!string.IsNullOrEmpty(zdCkDate))
gridView1.SetFocusedRowCellValue(zdCkDate, DateTime.Now.ToString());
if (!string.IsNullOrEmpty(zdChk))
gridView1.SetFocusedRowCellValue(zdChk, true);
}
else
{
btnChkIco.Image = global::Gs.DevApp.Properties.Resources.ico_noCheck;
btnChkIco.Tag = "未审核";
if (!string.IsNullOrEmpty(zdChkUser))
gridView1.SetFocusedRowCellValue(zdChkUser, "");
if (!string.IsNullOrEmpty(zdCkDate))
gridView1.SetFocusedRowCellValue(zdCkDate, "");
if (!string.IsNullOrEmpty(zdChk))
gridView1.SetFocusedRowCellValue(zdChk, false);
}
}
#region 设置搜索
public static FilterEntity getFilterEntityWord(string id, string idDec, string val, string type)
{
switch (type)
{
case "Bit类型":
string _val = (val.ToUpper() == "true".ToUpper() ? "1" : "0");
return new FilterEntity(id, idDec + ")", "=", "等于)", "" + _val + "", type);
break;
default:
return new FilterEntity(id, idDec + ")", "like", "包含)", "%" + val + "%", type);
break;
}
}
public static List GetDilter(GridColumnCollection Columns, GridView gridView1 = null)
{
List fiList = new List();
if (gridView1 != null)
{
bool b = gridView1.ActiveFilterEnabled;
if (b == false)
return fiList;
}
foreach (DevExpress.XtraGrid.Columns.GridColumn col in Columns)
{
ColumnFilterInfo filter = col.FilterInfo;
if (string.IsNullOrEmpty(filter.FilterString))
continue;
string _filterString = filter.FilterString.Replace("Contains", "").Replace("(", "").Replace(")", "").Replace("'", "").Replace("'", "");
string[] ddd = _filterString.Split(',');
string _val = "";
if (ddd.Length > 1)
{
_val = ddd[1].Trim();
}
else
{
ddd = _filterString.Split('=');
_val = ddd[1].Trim();
}
fiList.Add(getFilterEntityWord(col.Tag.ToString(), col.Caption.Trim(), _val, col.UnboundExpression));
}
return fiList;
}
///
/// 根据过滤器,读取查询条件,org表为组织
///
///
///
public static string GetSearchWhere(List _filterList)
{
var _sbSqlWhere = new StringBuilder();
foreach (var itm in _filterList)
{
if (itm.fileId.ToUpper().Contains("org".ToUpper()))
{
if (IsNumeric(itm.fileValue.Replace("%", "")))
_sbSqlWhere.Append(" and org.FNumber " + itm.fileOper + "'" + itm.fileValue + "'");
else
{
_sbSqlWhere.Append(" and org.NAME " + itm.fileOper + "'" + itm.fileValue.Trim() + "'");
}
}
else
{
switch (itm.fileType)
{
case "时间类型":
_sbSqlWhere.Append(" and CONVERT(nvarchar(30)," + itm.fileId + ",23)" + itm.fileOper + "'" + itm.fileValue + "'");
break;
case "Bit类型":
_sbSqlWhere.Append(" and isnull(" + itm.fileId + ",0) =" + itm.fileValue + "");
break;
default:
_sbSqlWhere.Append(" and " + itm.fileId + " " + itm.fileOper + " '" + itm.fileValue + "'");
break;
}
}
}
return _sbSqlWhere.ToString();
}
public delegate void DelegateGetModel(string guid);
public delegate void DelegateGetList(int currentPage);
///
///
///
/// gridview
/// 图标按钮
/// 窗体
/// 字段
/// 图标路径
/// 委托1
/// 鸟嘴提示
///
/// 委托2(列表显示明细)
public static void SetGridViewParameter(GridView gridView1, PictureBox picCheckBox = null, Form fm = null, string fileName = "checkStatus", string icoName = "", DelegateGetModel action = null, DevExpress.Utils.ToolTipController tips = null, bool isPostSearch = true, DelegateGetModel action2 = null)
{ //2025-09-04 kyy 引入中文插件注
/*gridView1.PopupMenuShowing += (s, e) =>
{
if (e.MenuType == DevExpress.XtraGrid.Views.Grid.GridMenuType.Column)
{
GridViewColumnMenu menu = e.Menu as GridViewColumnMenu;
if (menu != null)
{
string[] ary = { "Column Chooser", "Hide This Column", "Clear All Sorting", "Clear Sorting", "Sort Descending", "Sort Ascending", "Best Fit (all columns)" };
for (int i = menu.Items.Count - 1; i >= 0; i--)
{
string _caption = menu.Items[i].Caption;
if (!ary.Contains(_caption))
{
menu.Items.Remove(menu.Items[i]);
}
}
}
}
};*/
gridView1.OptionsView.ColumnAutoWidth = false;//自动调整列宽
if (isPostSearch == true)
{
gridView1.OptionsView.ShowGroupPanel = false;
gridView1.OptionsCustomization.AllowGroup = false;
gridView1.OptionsFilter.AllowAutoFilterConditionChange = DevExpress.Utils.DefaultBoolean.False;
gridView1.OptionsView.ShowAutoFilterRow = true;
gridView1.OptionsFilter.AllowFilterEditor = false;
gridView1.OptionsFilter.ShowCustomFunctions = DevExpress.Utils.DefaultBoolean.False;
gridView1.OptionsFilter.AllowColumnMRUFilterList = false;
gridView1.OptionsFilter.AllowMRUFilterList = false;
gridView1.OptionsCustomization.AllowFilter = false;
gridView1.OptionsFind.ShowSearchNavButtons = false;
gridView1.OptionsView.ShowGroupPanel = false;
//是否显示底部的过滤条
// gridView1.OptionsView.ShowFilterPanelMode = DevExpress.XtraGrid.Views.Base.ShowFilterPanelMode.Never;
}
// gridView1.Appearance.HeaderPanel.ForeColor = DevExpress.LookAndFeel.DXSkinColors.ForeColors.ControlText;
foreach (GridColumn column in gridView1.Columns)
{
column.MinWidth = 10;
column.MaxWidth = 0;
column.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Near;
column.OptionsColumn.AllowEdit = true;
// column.OptionsFilter.AutoFilterCondition = AutoFilterCondition.Contains;
column.OptionsFilter.AutoFilterCondition = DevExpress.XtraGrid.Columns.AutoFilterCondition.Contains;
column.OptionsFilter.ImmediateUpdateAutoFilter = false;
if (column.Tag == null || column.Tag.ToString().EndsWith("edit"))
column.OptionsColumn.ReadOnly = false;
else
column.OptionsColumn.ReadOnly = true;
//if(isPostSearch==false)
// column.OptionsColumn.ReadOnly = true;
if (isPostSearch == true)
{
if (column.Tag == null || column.Tag.ToString().Length <= 0)
column.OptionsFilter.AllowAutoFilter = false;
}
}
gridView1.IndicatorWidth = 60;
gridView1.CustomDrawRowIndicator += (s, e) =>
{
if (e.Info.IsRowIndicator && e.RowHandle >= 0)
e.Info.DisplayText = (e.RowHandle + 1).ToString();
};
gridView1.CustomDrawEmptyForeground += (s, e) =>
{
var str = "暂未查找到匹配的数据!";
var f = new Font("微软雅黑", 16);
var r = new Rectangle(gridView1.GridControl.Width / 2 - 100,
e.Bounds.Top + 45, e.Bounds.Right - 5, e.Bounds.Height - 5);
e.Graphics.DrawString(str, f, Brushes.Gray, r);
};
if (picCheckBox != null)
{
gridView1.FocusedRowChanged += (s, e) =>
{
UtilityHelper.SetCheckIco(s, picCheckBox, fm, fileName, icoName);
};
}
if (action != null)
{
gridView1.ShownEditor += (sender, e) =>
{
DevExpress.XtraGrid.Views.Grid.GridView view = sender as DevExpress.XtraGrid.Views.Grid.GridView;
view.ActiveEditor.DoubleClick += (ssssss, eeeeeee) =>
{
int _handle = gridView1.FocusedRowHandle;
if (_handle == -1)
return;
DataRow row = gridView1.GetDataRow(_handle);
if (row == null)
return;
string _guid = row["guid"].ToString();
if (string.IsNullOrEmpty(_guid))
return;
action(_guid);
};
if (view.ActiveEditor is TextEdit)
view.ActiveEditor.MouseUp += ActiveEditor_MouseUp;
};
}
if (action2 != null)
{
gridView1.FocusedRowChanged += (s, e) =>
{
int _handle = gridView1.FocusedRowHandle;
if (_handle == -1)
return;
DataRow row = gridView1.GetDataRow(_handle);
if (row == null)
return;
string _guid = row["guid"].ToString();
if (string.IsNullOrEmpty(_guid))
return;
action2(_guid);
};
}
gridView1.RowStyle += (s, e) =>
{
//默认选中行不变色
gridView1.OptionsSelection.EnableAppearanceFocusedRow = false;
//默认选中单元格不变色
gridView1.OptionsSelection.EnableAppearanceFocusedCell = false;
if (e.RowHandle >= 0)
{
DataRow row = gridView1.GetDataRow(e.RowHandle);
if (row == null)
return;
//这是danger色
bool columnExists = row.Table.Columns.Contains("isRed");
if (columnExists == true)
{
string _isRed = row["isRed"].ToString();
if (_isRed == "1")
{
e.Appearance.ForeColor = Color.Tomato;
}
}
//这是success色
columnExists = row.Table.Columns.Contains("isSuccess");
if (columnExists == true)
{
string _isRed = row["isSuccess"].ToString();
if (_isRed == "1")
{
e.Appearance.ForeColor = Color.FromArgb(128, 255, 128);
}
}
// 设置焦点行的背景色
if (gridView1.GetRow(e.RowHandle) == gridView1.GetFocusedRow())
{
e.Appearance.BackColor = Color.Azure;
e.Appearance.BackColor2 = Color.LightSkyBlue;
}
//else if (gridView1.IsRowHotTracked(e.RowHandle))
//{
// // 设置鼠标悬停行的背景色
// e.Appearance.BackColor = Color.LightBlue;
// e.Appearance.BackColor2 = Color.LightBlue;
//}
}
};
if (tips != null)
{
tips.Appearance.BackColor = Color.LightBlue; // 设置背景颜色
tips.Appearance.ForeColor = Color.Black; // 设置前景色(文字颜色)
gridView1.MouseMove += (s, e) =>
{
try
{
GridHitInfo hi = gridView1.CalcHitInfo(new Point(e.X, e.Y));
if (hi.InRowCell)
{
int cuRowHandle = hi.RowHandle;
if (cuRowHandle < 0)
return;
DataRow curRow = gridView1.GetDataRow(cuRowHandle);
var column = hi.Column;
string showTxt = curRow[column.FieldName].ToString();
ToolTipControllerShowEventArgs aa = new ToolTipControllerShowEventArgs();
aa.AllowHtmlText = DefaultBoolean.True;
aa.Title = column.Caption; //HTML, 粗体
aa.ToolTip = showTxt; //断行
aa.ShowBeak = true;
aa.Rounded = true; ////圆角
aa.RoundRadius = 7; //圆角率
// aa.ToolTipType = ToolTipType.SuperTip; //超级样式,可多行或显示图标
aa.ToolTipType = ToolTipType.Standard;//标准样式,可显示鸟嘴。
aa.IconType = ToolTipIconType.Information; //消息图标
aa.IconSize = ToolTipIconSize.Small; //大图标
tips.ShowHint(aa);
}
else
tips.HideHint();
}
catch (Exception exception)
{
}
};
}
}
private static void ActiveEditor_MouseUp(object sender, MouseEventArgs e)
{
BaseEdit edit = sender as BaseEdit;
edit.MouseUp -= ActiveEditor_MouseUp;
edit.SelectAll();
}
public static void SetGridLayout(GridView gridView1)
{
foreach (GridColumn column in gridView1.Columns)
{
if (column.Width > 500)
column.Width = 500;
}
}
///
/// 设置选项卡
///
///
///
///
///
///
public static void SetTabParameter(GridView gridView1, DevExpress.XtraTab.XtraTabControl xtraTabControl1, UcPageBar pageBar1, DelegateGetModel action = null, DelegateGetList page = null, Label lbGuid = null)
{
xtraTabControl1.SelectedPageChanged += (s, e) =>
{
if (xtraTabControl1.SelectedTabPageIndex == 1)
{
int _handle = gridView1.FocusedRowHandle;
bool _bl = xtraTabControl1.TabPages[0].PageEnabled;
if (_bl == false) { return; }
;
if (_handle < 0)
{
xtraTabControl1.SelectedTabPageIndex = -1;
Gs.DevApp.ToolBox.MsgHelper.ShowInformation("请选择你要显示的行!" + _handle.ToString() + "tag" + xtraTabControl1.SelectedTabPageIndex.ToString());
return;
}
DataRow row = gridView1.GetDataRow(_handle);
if (row == null)
{
xtraTabControl1.SelectedTabPageIndex = -1;
Gs.DevApp.ToolBox.MsgHelper.ShowInformation("请选择你要显示的行!" + _handle.ToString());
return;
}
string _guid = row["guid"].ToString();
if (string.IsNullOrEmpty(_guid))
{
xtraTabControl1.SelectedTabPageIndex = -1;
Gs.DevApp.ToolBox.MsgHelper.ShowInformation("请选择你要显示的行!" + _handle.ToString());
return;
}
action(_guid);
}
if (pageBar1 != null && xtraTabControl1.SelectedTabPageIndex == 0)
{
page(pageBar1.CurrentPage);
int rowHandle = 0;
rowHandle = gridView1.LocateByValue(1, gridView1.Columns["guid"], lbGuid.Text);
if (rowHandle < 0)
rowHandle = 0;
gridView1.FocusedRowHandle = rowHandle;
}
};
}
///
/// 设置明细grid样式
///
///
///
///
///
///
public static void SetGridViewParameterMx(GridView gridView1, DevExpress.Utils.ToolTipController tips = null)
{
//2025-09-04 kyy 注
/* gridView1.PopupMenuShowing += (s, e) =>
{
if (e.MenuType == DevExpress.XtraGrid.Views.Grid.GridMenuType.Column)
{
GridViewColumnMenu menu = e.Menu as GridViewColumnMenu;
if (menu != null)
{
string[] ary = { "Column Chooser", "Hide This Column", "Clear All Sorting", "Clear Sorting", "Sort Descending", "Sort Ascending", "Best Fit (all columns)" };
for (int i = menu.Items.Count - 1; i >= 0; i--)
{
string _caption = menu.Items[i].Caption;
if (!ary.Contains(_caption))
{
menu.Items.Remove(menu.Items[i]);
}
}
}
}
};
gridView1.OptionsView.ShowGroupPanel = false;
gridView1.OptionsCustomization.AllowGroup = false;*/
// gridView1.OptionsView.Alignment = DataGridViewContentAlignment.MiddleLeft;
foreach (GridColumn column in gridView1.Columns)
{
// column.DefaultCellStyle.Alignment = true;
column.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Near;
column.MinWidth = 10;
column.MaxWidth = 0;
}
gridView1.OptionsView.ColumnAutoWidth = false;//自动调整列宽
gridView1.OptionsFilter.AllowFilterEditor = false;
gridView1.OptionsFilter.ShowCustomFunctions = DevExpress.Utils.DefaultBoolean.False;
gridView1.OptionsCustomization.AllowFilter = false;
gridView1.OptionsFind.ShowSearchNavButtons = false;
gridView1.OptionsView.ShowAutoFilterRow = false;
gridView1.OptionsView.ShowGroupPanel = false;
gridView1.IndicatorWidth = 60;
gridView1.CustomDrawRowIndicator += (s, e) =>
{
if (e.Info.IsRowIndicator && e.RowHandle >= 0)
e.Info.DisplayText = (e.RowHandle + 1).ToString();
};
gridView1.CustomDrawEmptyForeground += (s, e) =>
{
var str = "暂无明细数据!";
var f = new Font("微软雅黑", 16);
var r = new Rectangle(gridView1.GridControl.Width / 2 - 100,
e.Bounds.Top + 45, e.Bounds.Right - 5, e.Bounds.Height - 5);
e.Graphics.DrawString(str, f, Brushes.Gray, r);
};
gridView1.ValidatingEditor += (sender, e) =>
{
//yz_quantity_0
GridView view = sender as GridView;
if (view.FocusedColumn.Tag != null && view.FocusedColumn.Tag.ToString().StartsWith("yz_"))
{
string[] _ary = view.FocusedColumn.Tag.ToString().Split('_');
if (_ary.Length > 2)
{
if (_ary[2] == "0")
{
double price = 0; if (!Double.TryParse(e.Value as String, out price))
{ e.Valid = false; e.ErrorText = "请输入正确的数字."; }
return;
}
}
}
};
if (tips != null)
{
tips.Appearance.BackColor = Color.LightBlue; // 设置背景颜色
tips.Appearance.ForeColor = Color.Black; // 设置前景色(文字颜色)
gridView1.MouseMove += (s, e) =>
{
try
{
GridHitInfo hi = gridView1.CalcHitInfo(new Point(e.X, e.Y));
if (hi.InRowCell)
{
int cuRowHandle = hi.RowHandle;
if (cuRowHandle < 0)
return;
DataRow curRow = gridView1.GetDataRow(cuRowHandle);
var column = hi.Column;
string showTxt = curRow[column.FieldName].ToString();
ToolTipControllerShowEventArgs aa = new ToolTipControllerShowEventArgs();
aa.AllowHtmlText = DefaultBoolean.True;
aa.Title = column.Caption; //HTML, 粗体
aa.ToolTip = showTxt; //断行
aa.ShowBeak = true;
aa.Rounded = true; ////圆角
aa.RoundRadius = 7; //圆角率
// aa.ToolTipType = ToolTipType.SuperTip; //超级样式,可多行或显示图标
aa.ToolTipType = ToolTipType.Standard;//标准样式,可显示鸟嘴。
aa.IconType = ToolTipIconType.Information; //消息图标
aa.IconSize = ToolTipIconSize.Small; //大图标
tips.ShowHint(aa);
}
else
tips.HideHint();
}
catch (Exception exception)
{
}
};
}
}
#endregion
///
/// 判断是不是一个有效的数值
///
///
///
public static bool IsNumeric(string str)
{
Regex regex = new Regex("^[0-9]+$");
return regex.IsMatch(str);
}
///
/// 判断是不是一个有效果的decimal数值
///
///
///
public static bool IsNumeric2(string str)
{
string input = str;
decimal number;
bool isNumeric = decimal.TryParse(input, out number);
return isNumeric;
}
///
/// 判断是不是一个有效的正整数
///
///
///
public static bool IsNumeric3(string str)
{
string input = str;
decimal number;
bool isNumeric = decimal.TryParse(input, out number);
if (isNumeric && number > 0)
return true;
return false;
}
///
/// 判断是不是一个有效的正整数
///
///
///
public static bool IsNumeric3(string str, string str2)
{
decimal d1 = 0;
decimal d2 = 0;
if (!string.IsNullOrEmpty(str))
{
d1 = decimal.Parse(str);
}
if (!string.IsNullOrEmpty(str2))
{
d2 = decimal.Parse(str2);
}
return (d1 + d2) > 0 ? true : false;
}
///
///
///
/// txt_psnQty_1:每张条码数量
/// txt_iCount_1:整张数值
/// txt_kQty:可打印量
///
/// txt_yuliang:余量
public static void PrintJiSuan(DevExpress.XtraEditors.TextEdit box1, DevExpress.XtraEditors.TextEdit box2, string sum, DevExpress.XtraEditors.RadioGroup rd, DevExpress.XtraEditors.TextEdit txt_yuliang = null)
{
if (rd.SelectedIndex == 2)
return;
try
{
string t1 = box1.Text.Trim();
string t2 = box2.Text.Trim();
if (!Gs.DevApp.ToolBox.UtilityHelper.IsNumeric2(t1))
return;
if (Gs.DevApp.ToolBox.UtilityHelper.ToDecimal(t1) <= 0)
return;
decimal? dc = Gs.DevApp.ToolBox.UtilityHelper.GetDecimal(sum);
decimal? dc1 = Gs.DevApp.ToolBox.UtilityHelper.GetDecimal(t1);
decimal dividend = decimal.Parse(sum); // 被除数
decimal divisor = decimal.Parse(t1); // 除数
decimal shang = dividend / divisor;
decimal integerPart = Math.Truncate(shang); // 获取整数部分
decimal decimalPart = dividend - divisor * integerPart; // 获取小数部分
//decimal quotient = dividend / divisor; // 整数部分
//decimal remainder = dividend % divisor; // 余数
box2.Text = integerPart.ToString();
if (rd.SelectedIndex == 0)
txt_yuliang.Text = decimalPart.ToString();
}
catch (Exception ex)
{
Gs.DevApp.ToolBox.MsgHelper.ShowError("输入数据错误:" + ex.Message);
}
}
public static void PrintAuto(DevExpress.XtraEditors.TextEdit txt_psnQty_1, DevExpress.XtraEditors.TextEdit txt_iCount_1, DevExpress.XtraEditors.RadioGroup radOut, DevExpress.XtraEditors.TextEdit txt_yuliang = null)
{
txt_psnQty_1.Text = "";
txt_iCount_1.Text = "";
txt_yuliang.Text = "";
if (radOut.SelectedIndex == 2)
txt_iCount_1.ReadOnly = false;
else
txt_iCount_1.ReadOnly = true;
}
#region 自定义进度条列
///
/// 自定义进度条列
///
///
/// 列的字段名
///
///
///
public static void CustomProgressBarColumn(DevExpress.XtraGrid.Views.Grid.GridView view, string fieldName, int warningValue = 50, Brush lessColor = null, Brush greaterColor = null)
{
var col = view.Columns[fieldName];
if (col == null) return;
col.AppearanceCell.Options.UseTextOptions = true;
col.AppearanceCell.TextOptions.HAlignment = HorzAlignment.Center;
view.CustomDrawCell += (s, e) =>
{
int _handle = e.RowHandle;
if (_handle < 0)
return;
if (e.Column.FieldName == fieldName)
{
DrawProgressBar(e, warningValue, lessColor, greaterColor);
e.Handled = true;
DrawEditor(e);
}
};
}
private static void DrawProgressBar(DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e, int warningValue = 50, Brush lessColor = null, Brush greaterColor = null)
{
string d = e.CellValue == null ? null : e.CellValue.ToString();
decimal percent = string.IsNullOrEmpty(d) ? 0m : decimal.Parse(d);
if (percent <= 0)
percent = 0.1m;
int width = (int)(percent * e.Bounds.Width);
Rectangle rect = new Rectangle(e.Bounds.X, e.Bounds.Y, width, e.Bounds.Height);
Brush b = Brushes.Green;
if (greaterColor != null)
{
b = greaterColor;
}
if (percent * 100 < warningValue)
{
if (lessColor == null)
{
b = Brushes.Red;
}
else
{
b = lessColor;
}
}
e.Graphics.FillRectangle(b, rect);
}
private static void DrawEditor(DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e)
{
GridCellInfo cell = e.Cell as GridCellInfo;
Point offset = cell.CellValueRect.Location;
BaseEditPainter pb = cell.ViewInfo.Painter as BaseEditPainter;
AppearanceObject style = cell.ViewInfo.PaintAppearance;
if (!offset.IsEmpty)
cell.ViewInfo.Offset(offset.X, offset.Y);
try
{
pb.Draw(new ControlGraphicsInfoArgs(cell.ViewInfo, e.Cache, cell.Bounds));
}
finally
{
if (!offset.IsEmpty)
{
cell.ViewInfo.Offset(-offset.X, -offset.Y);
}
}
}
#endregion
#region 绘制表头全选勾选框
///
/// 绘制表头全选勾选框
///
// private Rectangle checkBoxColumnHeaderRect = Rectangle.Empty;
// private GridColumn checkBoxColumn = null;
public static void CustomDrawColumnHeader(object sender, ColumnHeaderCustomDrawEventArgs e)
{
Rectangle checkBoxColumnHeaderRect = new Rectangle(51, 1, 37, 57);
if (e.Column != null && e.Column.AbsoluteIndex == 0)
{
//X = 51 Y = 1 Width = 37 Height = 57
e.Column.Caption = ".";
checkBoxColumnHeaderRect = e.Bounds;
// checkBoxColumn = e.Column;
//须把列头标题设置为空
e.Painter.DrawObject(e.Info);
//在列头中心显示复选框
int x = e.Bounds.X + (int)((e.Bounds.Width - CheckBoxRenderer.GetGlyphSize(e.Graphics, CheckBoxState.UncheckedNormal).Width) * 0.5);
int y = e.Bounds.Y + (int)((e.Bounds.Height - CheckBoxRenderer.GetGlyphSize(e.Graphics, CheckBoxState.UncheckedNormal).Height) * 0.5);
Point location = new Point(x, y);
CheckBoxState checkBoxState;
if (e.Column.Tag != null && e.Column.Tag.ToString() == "1")
checkBoxState = CheckBoxState.CheckedPressed;
else
checkBoxState = CheckBoxState.UncheckedNormal;
CheckBoxRenderer.DrawCheckBox(e.Graphics, location, checkBoxState);
e.Handled = true;
}
}
///
/// gridview 全选,取消全选
///
///
///
///
///
public static void CustomMouseUp(object sender, MouseEventArgs e, DevExpress.XtraGrid.GridControl gcMain, DevExpress.XtraGrid.Views.Grid.GridView gridView1)
{
GridColumn checkBoxColumn = gridView1.Columns[0];
Rectangle checkBoxColumnHeaderRect = new Rectangle(51, 1, 37, 57);
if (checkBoxColumnHeaderRect != Rectangle.Empty)
{
if (e.X > checkBoxColumnHeaderRect.X && e.X < (checkBoxColumnHeaderRect.X + checkBoxColumnHeaderRect.Width) && e.Y > checkBoxColumnHeaderRect.Y && e.Y < (checkBoxColumnHeaderRect.Y + checkBoxColumnHeaderRect.Height))
{
DataTable _Table = (DataTable)gcMain.DataSource;
if (checkBoxColumn.Tag != null && checkBoxColumn.Tag.ToString() == "1")
{
checkBoxColumn.Tag = "0";
foreach (DataRow row in _Table.Rows)
{
row["chkInt"] = false;
}
}
else
{
checkBoxColumn.Tag = "1";
/********2025-07-23修补过滤bug 故注释 beg ************/
//foreach (DataRow row in _Table.Rows)
//{
// row["chkInt"] = true;
//}
/********2025-07-23修补过滤bug 故注释 end ************/
/********2025-07-23修补过滤bug beg ************/
System.Collections.IList ftRow = gridView1.DataController.GetAllFilteredAndSortedRows();
System.Collections.ArrayList ftAry = new System.Collections.ArrayList();
foreach (System.Data.DataRowView _ft in ftRow)
{
string guid = _ft["guid"].ToString();
ftAry.Add(guid);
}
foreach (DataRow row in _Table.Rows)
{
if (ftAry.Contains(row["guid"].ToString()))
row["chkInt"] = true;
}
/********2025-07-23修补过滤bug end ************/
}
gcMain.BindingContext = new BindingContext();
gcMain.DataSource = _Table;
gcMain.ForceInitialize();
gridView1.CloseEditor();
gridView1.PostEditor();
gridView1.UpdateCurrentRow();
gridView1.InvalidateColumnHeader(checkBoxColumn);
}
}
}
#endregion
//读取默认组织
public static string GetFirstOrg(UserControl.UcLookOrg txt_erpSczz)
{
string userGuid = LoginInfoModel.CurrentUser.LoginUserGuid;
var pgq = new PageQueryModel(1, 999999, "FID", "asc", userGuid, " and IS_STATUS=1");
var json = JsonConvert.SerializeObject(pgq);
try
{
var strReturn = UtilityHelper.HttpPost("", "Organization/GetListPage", json);
var _obj = UtilityHelper.ReturnToDynamic(strReturn);
string _extendText = _obj.rtnData.extendText;
string[] _dftOrg = _extendText.Split(',');
if (_dftOrg.Length > 0)
{
txt_erpSczz.SetIdOrCode(_dftOrg[0].Trim());
return _dftOrg[0].Trim();
}
return "";
}
catch (Exception ex)
{
return "";
}
}
#region GridView汇总配置工具方法
///
/// 2025-08-14 kyy 快速配置GridView底部汇总(启用汇总行+设置列求和汇总)
///
/// 目标GridView控件
/// 需要进行求和汇总的列名数组
public static void SetupGridSummary(DevExpress.XtraGrid.Views.Grid.GridView gridView, params string[] summaryColumns)
{
// 启用底部汇总行
gridView.OptionsView.ShowFooter = true;
// 为每个指定列设置求和汇总
foreach (var columnName in summaryColumns)
{
// 验证列是否存在(避免异常)
if (gridView.Columns[columnName] != null)
{
gridView.Columns[columnName].SummaryItem.SummaryType = DevExpress.Data.SummaryItemType.Sum;
gridView.Columns[columnName].SummaryItem.DisplayFormat = "合计: {0}";
}
}
}
///
/// 2025-08-15 kyy 快速配置GridView条件汇总(只汇总满足条件的行)
/// 使用简单的标签显示方式,避免复杂的汇总项配置
///
/// 目标GridView控件
/// 条件字段名(如chkInt)
/// 条件值(如true、1等表示选中)
/// 需要进行求和汇总的列名数组
public static void SetupGridSummaryWithCondition(DevExpress.XtraGrid.Views.Grid.GridView gridView, string conditionFieldName, object conditionValue, params string[] summaryColumns)
{
// 启用底部汇总行
gridView.OptionsView.ShowFooter = true;
// 存储条件汇总配置到GridView的Tag中
var conditionSummaryConfig = new
{
ConditionField = conditionFieldName,
ConditionValue = conditionValue,
SummaryColumns = summaryColumns
};
// 将配置存储到GridView的Tag中(如果已有其他Tag,需要合并)
if (gridView.Tag == null)
{
gridView.Tag = conditionSummaryConfig;
}
else
{
// 如果已有Tag,创建一个复合对象
gridView.Tag = new { Existing = gridView.Tag, ConditionSummary = conditionSummaryConfig };
}
// 为每个指定列设置自定义汇总计算
foreach (var columnName in summaryColumns)
{
if (gridView.Columns[columnName] != null)
{
// 使用标准的求和汇总,但显示自定义格式
gridView.Columns[columnName].SummaryItem.SummaryType = DevExpress.Data.SummaryItemType.Sum;
gridView.Columns[columnName].SummaryItem.DisplayFormat = "选中合计: {0}";
}
}
// 绑定数据变化事件,手动计算条件汇总
gridView.CustomDrawFooterCell -= GridView_CustomDrawFooterForCondition;
gridView.CustomDrawFooterCell += GridView_CustomDrawFooterForCondition;
}
///
/// 自定义绘制页脚单元格,显示条件汇总结果
///
private static void GridView_CustomDrawFooterForCondition(object sender, DevExpress.XtraGrid.Views.Grid.FooterCellCustomDrawEventArgs e)
{
var gridView = sender as DevExpress.XtraGrid.Views.Grid.GridView;
if (gridView?.Tag == null) return;
try
{
// 获取条件汇总配置
dynamic config = GetConditionSummaryConfig(gridView.Tag);
if (config == null) return;
string conditionField = config.ConditionField;
object conditionValue = config.ConditionValue;
string[] summaryColumns = config.SummaryColumns;
// 检查当前列是否需要条件汇总
if (summaryColumns != null && Array.IndexOf(summaryColumns, e.Column.FieldName) >= 0)
{
// 计算条件汇总值
decimal totalValue = CalculateConditionalSum(gridView, conditionField, conditionValue, e.Column.FieldName);
// 设置显示文本
e.Info.DisplayText = $"{totalValue:F2}";
// 可以自定义显示样式
e.Appearance.ForeColor = System.Drawing.Color.Blue;
e.Appearance.Font = new System.Drawing.Font(e.Appearance.Font, System.Drawing.FontStyle.Bold);
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine($"条件汇总绘制错误: {ex.Message}");
}
}
///
/// 获取条件汇总配置
///
private static dynamic GetConditionSummaryConfig(object tag)
{
if (tag == null) return null;
// 检查是否是直接的配置对象
var tagType = tag.GetType();
if (tagType.GetProperty("ConditionField") != null)
{
return tag;
}
// 检查是否是复合对象
if (tagType.GetProperty("ConditionSummary") != null)
{
dynamic composite = tag;
return composite.ConditionSummary;
}
return null;
}
///
/// 计算条件汇总值
///
private static decimal CalculateConditionalSum(DevExpress.XtraGrid.Views.Grid.GridView gridView, string conditionField, object conditionValue, string summaryField)
{
decimal total = 0;
try
{
// 遍历所有可见行
for (int i = 0; i < gridView.DataRowCount; i++)
{
// 获取条件字段值
object conditionFieldValue = gridView.GetRowCellValue(i, conditionField);
// 检查条件是否匹配
if (IsConditionMatched(conditionFieldValue, conditionValue))
{
// 获取汇总字段值
object summaryFieldValue = gridView.GetRowCellValue(i, summaryField);
// 累加数值
if (summaryFieldValue != null && decimal.TryParse(summaryFieldValue.ToString(), out decimal value))
{
total += value;
}
}
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine($"条件汇总计算错误: {ex.Message}");
}
return Math.Round(total, 2);
}
///
/// 手动刷新条件汇总显示 - 优化版本,立即生效
///
public static void RefreshConditionalSummary(DevExpress.XtraGrid.Views.Grid.GridView gridView)
{
try
{
if (gridView != null)
{
// 先刷新数据绑定
gridView.PostEditor();
gridView.UpdateCurrentRow();
// 强制重绘底部汇总区域
gridView.InvalidateFooter();
// 立即刷新布局
gridView.LayoutChanged();
// 强制重绘整个视图
gridView.Invalidate();
// 确保界面立即更新
System.Windows.Forms.Application.DoEvents();
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine($"刷新条件汇总错误: {ex.Message}");
}
}
///
/// 判断条件是否匹配(用于汇总)
///
private static bool IsConditionMatched(object fieldValue, object targetValue)
{
if (fieldValue == null && targetValue == null) return true;
if (fieldValue == null || targetValue == null) return false;
string fieldStr = fieldValue.ToString().Trim();
string targetStr = targetValue.ToString().Trim();
// 处理布尔值类型的匹配
if (IsBooleanValue(fieldStr) || IsBooleanValue(targetStr))
{
bool fieldBool = ConvertToBoolean(fieldStr);
bool targetBool = ConvertToBoolean(targetStr);
return fieldBool == targetBool;
}
// 处理数值类型的匹配
if (decimal.TryParse(fieldStr, out decimal fieldNum) && decimal.TryParse(targetStr, out decimal targetNum))
{
return fieldNum == targetNum;
}
// 字符串匹配
return string.Equals(fieldStr, targetStr, StringComparison.OrdinalIgnoreCase);
}
///
/// 检查是否为布尔值
///
private static bool IsBooleanValue(string value)
{
if (string.IsNullOrEmpty(value)) return false;
string lower = value.ToLower();
return lower == "true" || lower == "false" || lower == "1" || lower == "0";
}
///
/// 转换为布尔值
///
private static bool ConvertToBoolean(string value)
{
if (string.IsNullOrEmpty(value)) return false;
string lower = value.ToLower();
return lower == "true" || lower == "1";
}
#endregion
#region 简化版GridView颜色设置方法 - 创建时间:2024年8月15日 制作人:kyy
///
/// 一行代码设置GridView颜色的方法
/// 创建时间:2024年8月15日 制作人:kyy
/// 使用示例:
/// SetSimpleGridColor(gridView1, "checkStatus", "=1", "Cell", Color.Blue);
/// SetSimpleGridColor(gridView1, "jyjg", "contains合格", "Cell", Color.Green);
/// SetSimpleGridColor(gridView1, "status", "=已审核", "Row", Color.Blue);
/// SetSimpleGridColor(gridView1, "", "quantity-okRkqty>100", "Row", Color.Red); // 字段运算表达式
///
/// GridView控件
/// 字段名(运算表达式时可为空字符串)
/// 条件(支持: =1, contains合格, >5, >=10, 或字段运算如 fieldA+fieldB>100)
/// 范围(Cell/单元格, Row/行, Column/列)
/// 颜色
public static void SetSimpleGridColor(GridView gridView, string fieldName, string condition, string scope, Color color)
{
if (gridView == null || string.IsNullOrEmpty(condition))
return;
// 检查是否为运算表达式
bool isCalculationExpression = IsCalculationExpression(condition);
// 如果是运算表达式但没有指定fieldName,fieldName设为空
if (isCalculationExpression && string.IsNullOrEmpty(fieldName))
{
fieldName = ""; // 运算表达式不需要特定字段名
}
else if (!isCalculationExpression && string.IsNullOrEmpty(fieldName))
{
return; // 普通条件必须指定字段名
}
// 移除之前可能绑定的事件(避免重复绑定)
gridView.RowCellStyle -= SimpleGridColor_RowCellStyle;
// 创建简单的颜色配置并存储到Tag
var colorConfigs = gridView.Tag as List ?? new List();
// 添加新配置
colorConfigs.Add(new SimpleColorConfig
{
FieldName = fieldName,
Condition = condition,
Scope = scope,
Color = color
});
gridView.Tag = colorConfigs;
// 绑定颜色设置事件
gridView.RowCellStyle += SimpleGridColor_RowCellStyle;
}
///
/// 简单颜色配置类
///
private class SimpleColorConfig
{
public string FieldName { get; set; }
public string Condition { get; set; }
public string Scope { get; set; }
public Color Color { get; set; }
}
///
/// 简化的颜色设置事件处理
///
private static void SimpleGridColor_RowCellStyle(object sender, RowCellStyleEventArgs e)
{
var gridView = sender as GridView;
if (gridView?.Tag is List configs)
{
foreach (var config in configs)
{
// 判断是否应该应用颜色
bool shouldApply = false;
// 检查是否为运算表达式
bool isCalculationExpression = IsCalculationExpression(config.Condition);
if (isCalculationExpression)
{
// 运算表达式根据范围决定是否应用
if (config.Scope.ToLower() == "row")
shouldApply = true; // 整行应用
else if (config.Scope.ToLower() == "cell")
shouldApply = true; // 所有单元格都尝试应用
else if (config.Scope.ToLower() == "column")
shouldApply = true; // 所有列都尝试应用
}
else
{
// 普通字段条件
if (config.Scope.ToLower() == "cell" && e.Column.FieldName == config.FieldName)
shouldApply = true;
else if (config.Scope.ToLower() == "row")
shouldApply = true;
else if (config.Scope.ToLower() == "column" && e.Column.FieldName == config.FieldName)
shouldApply = true;
}
if (!shouldApply) continue;
bool conditionMatched = false;
if (isCalculationExpression)
{
// 处理字段运算表达式
try
{
decimal result = EvaluateExpression(gridView, e.RowHandle, config.Condition);
conditionMatched = result == 1; // 1表示条件满足,0表示不满足
if (conditionMatched)
{
System.Diagnostics.Debug.WriteLine($"运算表达式匹配成功 - 表达式: {config.Condition}, 行: {e.RowHandle}");
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine($"运算表达式计算失败 - 表达式: {config.Condition}, 错误: {ex.Message}");
}
}
else
{
// 处理单字段条件
object cellValue = gridView.GetRowCellValue(e.RowHandle, config.FieldName);
if (cellValue != null)
{
string stringValue = cellValue.ToString().Trim();
// 调试信息:输出实际的字段值
if (config.FieldName == "checkStatus" && e.RowHandle < 3) // 只输出前几行避免太多日志
{
System.Diagnostics.Debug.WriteLine($"字段值调试 - 字段: {config.FieldName}, 实际值: '{stringValue}', 类型: {cellValue.GetType().Name}, 条件: {config.Condition}");
}
// 判断条件是否匹配
conditionMatched = IsConditionMatch(stringValue, config.Condition);
}
}
if (conditionMatched)
{
e.Appearance.ForeColor = config.Color;
System.Diagnostics.Debug.WriteLine($"颜色匹配成功 - 字段/表达式: {config.FieldName ?? config.Condition}, 条件: {config.Condition}");
break; // 匹配到第一个条件就停止
}
}
}
}
///
/// 检查是否为计算表达式(包含字段运算)
///
private static bool IsCalculationExpression(string condition)
{
if (string.IsNullOrEmpty(condition))
return false;
// 检查是否包含数学运算符和比较运算符的组合
char[] mathOperators = { '+', '-', '*', '/' };
string[] comparisonOperators = { ">=", "<=", ">", "<", "=", "!=" };
bool hasMathOperator = condition.IndexOfAny(mathOperators) >= 0;
bool hasComparisonOperator = comparisonOperators.Any(op => condition.Contains(op));
// 如果同时包含数学运算符和比较运算符,就认为是计算表达式
return hasMathOperator && hasComparisonOperator;
}
///
/// 判断条件是否匹配
///
private static bool IsConditionMatch(string value, string condition)
{
if (string.IsNullOrEmpty(value) || string.IsNullOrEmpty(condition))
return false;
condition = condition.Trim();
value = value.Trim();
// 处理contains条件
if (condition.StartsWith("contains", StringComparison.OrdinalIgnoreCase))
{
string matchText = condition.Substring(8).Trim();
// 移除前缀处理(如"M:免检"中的"M:")
string processedValue = value;
int colonIndex = processedValue.IndexOf(':');
if (colonIndex >= 0 && colonIndex < processedValue.Length - 1)
{
processedValue = processedValue.Substring(colonIndex + 1).Trim();
}
return processedValue.IndexOf(matchText, StringComparison.OrdinalIgnoreCase) >= 0;
}
// 处理等于条件
if (condition.StartsWith("="))
{
string targetValue = condition.Substring(1).Trim();
// 特殊处理bit类型字段(Boolean值)
if (IsBooleanCondition(targetValue))
{
return IsBooleanMatch(value, targetValue);
}
return string.Equals(value, targetValue, StringComparison.OrdinalIgnoreCase);
}
// 处理数值比较条件
if (decimal.TryParse(value, out decimal numericValue))
{
if (condition.StartsWith(">="))
{
if (decimal.TryParse(condition.Substring(2).Trim(), out decimal target))
return numericValue >= target;
}
else if (condition.StartsWith("<="))
{
if (decimal.TryParse(condition.Substring(2).Trim(), out decimal target))
return numericValue <= target;
}
else if (condition.StartsWith(">"))
{
if (decimal.TryParse(condition.Substring(1).Trim(), out decimal target))
return numericValue > target;
}
else if (condition.StartsWith("<"))
{
if (decimal.TryParse(condition.Substring(1).Trim(), out decimal target))
return numericValue < target;
}
else if (decimal.TryParse(condition, out decimal target))
{
return numericValue == target;
}
}
// 检查是否是布尔值条件
if (IsBooleanCondition(condition))
{
return IsBooleanMatch(value, condition);
}
// 默认按字符串相等处理
return string.Equals(value, condition, StringComparison.OrdinalIgnoreCase);
}
///
/// 判断多字段运算条件是否匹配(支持字段间运算)
///
private static bool IsConditionMatchWithCalculation(GridView gridView, int rowHandle, string condition)
{
if (string.IsNullOrEmpty(condition))
return false;
condition = condition.Trim();
try
{
// 解析并计算表达式
decimal calculatedValue = EvaluateExpression(gridView, rowHandle, condition);
// 如果表达式计算成功,返回true(表示条件满足)
return true;
}
catch
{
// 如果计算失败,返回false
return false;
}
}
///
/// 计算包含字段名的表达式
/// 支持格式:fieldA+fieldB>100, fieldA-fieldB<=50, fieldA*fieldB>=fieldC等
///
private static decimal EvaluateExpression(GridView gridView, int rowHandle, string expression)
{
// 提取比较运算符和目标值
string[] operators = { ">=", "<=", ">", "<", "=", "!=" };
string op = "";
string leftExpression = "";
string rightExpression = "";
foreach (var oper in operators)
{
if (expression.Contains(oper))
{
string[] parts = expression.Split(new string[] { oper }, StringSplitOptions.None);
if (parts.Length == 2)
{
op = oper;
leftExpression = parts[0].Trim();
rightExpression = parts[1].Trim();
break;
}
}
}
if (string.IsNullOrEmpty(op))
throw new ArgumentException("无效的表达式格式");
// 计算左侧表达式的值
decimal leftValue = CalculateFieldExpression(gridView, rowHandle, leftExpression);
// 计算右侧表达式的值(可能是数字或字段表达式)
decimal rightValue;
if (decimal.TryParse(rightExpression, out rightValue))
{
// 右侧是数字
}
else
{
// 右侧是字段表达式
rightValue = CalculateFieldExpression(gridView, rowHandle, rightExpression);
}
// 根据运算符判断条件是否满足
switch (op)
{
case ">=":
return leftValue >= rightValue ? 1 : 0;
case "<=":
return leftValue <= rightValue ? 1 : 0;
case ">":
return leftValue > rightValue ? 1 : 0;
case "<":
return leftValue < rightValue ? 1 : 0;
case "=":
return leftValue == rightValue ? 1 : 0;
case "!=":
return leftValue != rightValue ? 1 : 0;
default:
throw new ArgumentException($"不支持的运算符: {op}");
}
}
///
/// 计算包含字段运算的表达式(如:fieldA+fieldB-fieldC*2)
///
private static decimal CalculateFieldExpression(GridView gridView, int rowHandle, string expression)
{
expression = expression.Trim();
// 简单的表达式解析器 - 按运算优先级处理
// 先处理乘除,再处理加减
// 分割加减运算
var addSubTerms = SplitExpression(expression, new[] { '+', '-' });
decimal result = 0;
char lastOp = '+';
foreach (var term in addSubTerms)
{
string cleanTerm = term.Key.Trim();
char op = term.Value;
// 处理乘除运算
decimal termValue = CalculateMultiplyDivide(gridView, rowHandle, cleanTerm);
if (lastOp == '+')
result += termValue;
else if (lastOp == '-')
result -= termValue;
lastOp = op;
}
return result;
}
///
/// 处理乘除运算
///
private static decimal CalculateMultiplyDivide(GridView gridView, int rowHandle, string expression)
{
var mulDivTerms = SplitExpression(expression, new[] { '*', '/' });
decimal result = 0;
char lastOp = '*';
bool isFirst = true;
foreach (var term in mulDivTerms)
{
string cleanTerm = term.Key.Trim();
char op = term.Value;
decimal termValue = GetFieldOrNumericValue(gridView, rowHandle, cleanTerm);
if (isFirst)
{
result = termValue;
isFirst = false;
}
else if (lastOp == '*')
result *= termValue;
else if (lastOp == '/')
result /= termValue;
lastOp = op;
}
return result;
}
///
/// 分割表达式
///
private static List> SplitExpression(string expression, char[] operators)
{
var result = new List>();
string currentTerm = "";
for (int i = 0; i < expression.Length; i++)
{
char c = expression[i];
if (operators.Contains(c))
{
if (!string.IsNullOrEmpty(currentTerm))
{
result.Add(new KeyValuePair(currentTerm, i < expression.Length - 1 ? c : '\0'));
currentTerm = "";
}
}
else
{
currentTerm += c;
}
}
if (!string.IsNullOrEmpty(currentTerm))
{
result.Add(new KeyValuePair(currentTerm, '\0'));
}
return result;
}
///
/// 获取字段值或数值
///
private static decimal GetFieldOrNumericValue(GridView gridView, int rowHandle, string valueExpression)
{
valueExpression = valueExpression.Trim();
// 尝试解析为数字
if (decimal.TryParse(valueExpression, out decimal numValue))
{
return numValue;
}
// 作为字段名处理
try
{
object cellValue = gridView.GetRowCellValue(rowHandle, valueExpression);
if (cellValue != null && decimal.TryParse(cellValue.ToString(), out decimal fieldValue))
{
return fieldValue;
}
}
catch
{
// 字段不存在或无法转换为数字
}
return 0; // 默认值
}
///
/// 检查是否是布尔值条件
///
private static bool IsBooleanCondition(string condition)
{
string lowerCondition = condition.ToLower();
return lowerCondition == "true" || lowerCondition == "false" ||
lowerCondition == "1" || lowerCondition == "0";
}
///
/// 布尔值匹配检查
///
private static bool IsBooleanMatch(string value, string condition)
{
// 标准化布尔值
bool conditionBool = NormalizeBooleanValue(condition);
bool valueBool = NormalizeBooleanValue(value);
return conditionBool == valueBool;
}
///
/// 标准化布尔值
///
private static bool NormalizeBooleanValue(string value)
{
if (string.IsNullOrEmpty(value))
return false;
string lowerValue = value.Trim().ToLower();
// 处理各种可能的true值
if (lowerValue == "true" || lowerValue == "1" || lowerValue == "是" || lowerValue == "已审核")
return true;
// 处理各种可能的false值
if (lowerValue == "false" || lowerValue == "0" || lowerValue == "否" || lowerValue == "未审核" || lowerValue == "")
return false;
// 默认为false
return false;
}
///
/// 设置GridView复选框列点击时自动刷新条件汇总
/// 2025-08-15 kyy 新增公用方法
///
/// 目标GridView控件
/// 复选框字段名(默认为chkInt)
/// 延迟刷新时间(毫秒,默认100ms)
public static void SetupCheckboxClickRefresh(DevExpress.XtraGrid.Views.Grid.GridView gridView, string checkboxFieldName = "chkInt", int delayMs = 100)
{
if (gridView == null) return;
// 添加鼠标点击事件,检测复选框列点击
gridView.MouseDown += (s, e) =>
{
var hitInfo = gridView.CalcHitInfo(e.Location);
if (hitInfo.InRowCell && hitInfo.Column?.FieldName == checkboxFieldName)
{
// 复选框列被点击,延迟刷新汇总确保值已更新
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
timer.Interval = delayMs;
timer.Tick += (sender, args) =>
{
timer.Stop();
timer.Dispose();
RefreshConditionalSummary(gridView);
};
timer.Start();
}
};
}
///
/// 一键设置GridView条件汇总的完整功能(包含条件汇总+实时刷新)
/// 2025-08-15 kyy 新增便捷方法
///
/// 目标GridView控件
/// 条件字段名(如chkInt)
/// 条件值(如true表示选中)
/// 需要汇总的列名数组
/// 是否启用实时刷新(默认true)
/// 刷新延迟时间(毫秒,默认100ms)
public static void SetupCompleteConditionalSummary(DevExpress.XtraGrid.Views.Grid.GridView gridView,
string conditionFieldName, object conditionValue, string[] summaryColumns,
bool enableRealTimeRefresh = true, int refreshDelayMs = 100)
{
if (gridView == null || summaryColumns == null || summaryColumns.Length == 0) return;
// 1. 设置条件汇总
SetupGridSummaryWithCondition(gridView, conditionFieldName, conditionValue, summaryColumns);
if (!enableRealTimeRefresh) return;
// 2. 设置实时刷新事件
// 单元格值变化事件
gridView.CellValueChanged += (s, e) =>
{
if (e.Column.FieldName == conditionFieldName)
{
RefreshConditionalSummary(gridView);
}
};
// 数据源变化事件
gridView.DataSourceChanged += (s, e) =>
{
RefreshConditionalSummary(gridView);
};
// 编辑器隐藏事件
gridView.HiddenEditor += (s, e) =>
{
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
timer.Interval = 50;
timer.Tick += (sender, args) =>
{
timer.Stop();
timer.Dispose();
RefreshConditionalSummary(gridView);
};
timer.Start();
};
// 3. 设置复选框点击刷新
SetupCheckboxClickRefresh(gridView, conditionFieldName, refreshDelayMs);
}
#endregion
}
///
/// 下拉框条目类
///
public class CboItemEntity
{
public CboItemEntity()
{
}
public CboItemEntity(string val, string text, string fType = "")
{
Text = text;
Value = val;
FType = fType;
}
///
/// 显示值
///
public object Text { get; set; } = 0;
///
/// 对象值
///
public object Value { get; set; } = "";
public object FType { get; set; } = "";
public override string ToString()
{
return Text.ToString();
}
}
///
/// 查询框
///
public class FilterEntity
{
///
///
/// 字段名
/// 字段名备注
/// 操作符
/// 操作符备注
///
public FilterEntity(string id, string idDec, string oper,
string operDec, string val, string type)
{
fileId = id;
fileIdDec = idDec;
fileOper = oper;
fileOperDec = operDec;
fileValue = val;
fileType = type;
}
public string fileId { get; set; }
public string fileIdDec { get; set; }
public string fileOper { get; set; }
public string fileOperDec { get; set; }
public string fileValue { get; set; }
public string fileType { get; set; }
}
public enum QcSeason
{
iqc,
ipqc巡检,
ipqc首检,
fqc,
生产退料入库检,
其它入库检
}
}