1
lu
2024-12-08 c47dadf9b621c36d84c6f0f2cac1fc5e08221858
DevApp/Gs.DevApp/ToolBox/UtilityHelper.cs
@@ -1,32 +1,105 @@
using Newtonsoft.Json.Linq;
using System;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.IO;
using System.Linq;
using System.Net;
using System.Reflection;
using System.Text;
using System.Resources;
using System.Drawing;
using Newtonsoft.Json;
using Gs.DevApp.Models;
using System.Windows.Forms;
using static System.Windows.Forms.Control;
using DevExpress.XtraEditors;
using DevExpress.XtraTab;
using System.IO;
using System.Net;
using System.Net.Cache;
using System.Net.Http;
using System.Reflection;
using System.Resources;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Forms;
using DevExpress.RichEdit.Export;
using DevExpress.XtraBars.Customization;
using DevExpress.XtraEditors;
using DevExpress.XtraEditors.Controls;
using DevExpress.XtraGrid;
using DevExpress.XtraGrid.Columns;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraTab;
using DevExpress.XtraTreeList;
using DevExpress.XtraWaitForm;
using Gs.DevApp.Entity;
using Gs.DevApp.UserControl;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using static System.Windows.Forms.Control;
namespace Gs.DevApp.ToolBox
{
    /// <summary>
    /// 通用类
    ///     通用类
    /// </summary>
    public class UtilityHelper
    {
        private static string WebApiUrl = System.Configuration.ConfigurationSettings.AppSettings.Get("WebApiUrl").ToString();
        private static readonly string WebApiUrl =
            ConfigurationManager.AppSettings["WebApiUrl"];
        public static async Task<string> UploadFileAsync(string filePath)
        {
            using (var httpClient = new HttpClient())
            using (var form = new MultipartFormDataContent())
            {
                httpClient.DefaultRequestHeaders.Add("token",
                    GetBasicAuthTicket());
                using (var fs = File.OpenRead(filePath))
                using (var streamContent = new StreamContent(fs))
                {
                    form.Add(streamContent, "file", Path.GetFileName(filePath));
                    var response =
                        await httpClient.PostAsync(
                            WebApiUrl + "Upload/UploadFile", form);
                    var responseString =
                        await response.Content.ReadAsStringAsync();
                    return responseString;
                }
            }
        }
        /// <summary>
        ///     httpPost访问服务
        /// </summary>
        /// <param name="url">服务地址</param>
        /// <param name="meth">方法名称</param>
        /// <param name="param">参数</param>
        /// <returns></returns>
        //public static async Task<string> HttpPostAsync(string url, string meth, string param)
        //{
        //    if (string.IsNullOrEmpty(url))
        //        url = WebApiUrl;
        //    url += meth;
        //    var request = (HttpWebRequest)WebRequest.Create(url);
        //    request.Method = "POST";
        //    request.ContentType = "application/json";
        //    request.Headers.Add("token", GetBasicAuthTicket());
        //    request.Accept = "*/*";
        //    request.Timeout = 15000;
        //    request.AllowAutoRedirect = false;
        //    request.ServicePoint.Expect100Continue = false;
        //    HttpRequestCachePolicy noCachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);
        //    request.CachePolicy = noCachePolicy;
        //    using (Stream requestStream = await request.GetRequestStreamAsync())
        //    {
        //        byte[] dataBytes = Encoding.UTF8.GetBytes(param);
        //        await requestStream.WriteAsync(dataBytes, 0, dataBytes.Length);
        //    }
        //    using (WebResponse response = await request.GetResponseAsync())
        //    {
        //        using (StreamReader reader = new StreamReader(response.GetResponseStream()))
        //        {
        //            return await reader.ReadToEndAsync();
        //        }
        //    }
        //}
        /// <summary>
        /// httpPost访问服务
        ///     httpPost访问服务
        /// </summary>
        /// <param name="url">服务地址</param>
        /// <param name="meth">方法名称</param>
@@ -34,35 +107,53 @@
        /// <returns></returns>
        public static string HttpPost(string url, string meth, string param)
        {
            if (string.IsNullOrEmpty(url))
                url = WebApiUrl;
            url += meth;
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
            request.Method = "POST";
            request.ContentType = "application/json";
            request.Headers.Add("token", GetBasicAuthTicket());
            request.Accept = "*/*";
            request.Timeout = 15000;
            request.AllowAutoRedirect = false;
            string _caption = "拼命加载中,请稍后...";
            DevExpress.Utils.WaitDialogForm wdf = new DevExpress.Utils.WaitDialogForm(_caption + meth, "友情提示");
            wdf.BackColor = System.Drawing.Color.LightSkyBlue;
            wdf.Padding = new Padding(15);
            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 = 15000;
                request.AllowAutoRedirect = false;
                request.ServicePoint.Expect100Continue = false;
                wdf.SetCaption(_caption+"(10/100)" + meth);
                HttpRequestCachePolicy noCachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);
                request.CachePolicy = noCachePolicy;
                wdf.SetCaption(_caption + "(20/100)" + meth);
                requestStream = new StreamWriter(request.GetRequestStream());
                requestStream.Write(param);
                requestStream.Close();
                wdf.SetCaption(_caption + "30/100)" + meth);
                response = request.GetResponse();
                wdf.SetCaption(_caption + "(40/100)");
                if (response != null)
                {
                    StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
                    wdf.SetCaption(_caption + "(50/100)" + meth);
                    var reader = new StreamReader(response.GetResponseStream(),
                        Encoding.UTF8);
                    responseStr = reader.ReadToEnd();
                    //File.WriteAllText(Server.MapPath("~/") + @"\test.txt", responseStr); 
                    reader.Close();
                    wdf.SetCaption(_caption + "(60/100)" + meth);
                }
                wdf.SetCaption(_caption + "(80/100)" + meth);
            }
            catch (Exception ex)
            {
                wdf.Close();
                LogHelper.Debug(url, param + ":" + ex.Message);
                throw ex;
            }
            finally
@@ -71,80 +162,120 @@
                requestStream = null;
                response = null;
            }
            wdf.SetCaption(_caption + "(90/100)");
            wdf.Close();
            return responseStr;
        }
        /// <summary>
        /// 根据图片名读取资源文件,不带后缀名
        ///     默认页大小
        /// </summary>
        /// <returns></returns>
        public static int GetPageSize()
        {
            return int.Parse(ConfigurationSettings.AppSettings.Get("PageSize"));
        }
        /// <summary>
        ///     根据图片名读取资源文件,不带后缀名
        /// </summary>
        /// <param name="imageName"></param>
        /// <param name="lay">1为大图</param>
        /// <returns></returns>
        public static Image GetImgFromResource(string imageName, int lay)
        {
            // 获取当前程序集
            Assembly assembly = Assembly.GetExecutingAssembly();
            // 创建资源管理器来访问资源
            ResourceManager resourceManager = new ResourceManager("Gs.DevApp.Properties.Resources", assembly);
            // 尝试获取图片资源
            var assembly = Assembly.GetExecutingAssembly();
            var resourceManager =
                new ResourceManager("Gs.DevApp.Properties.Resources", assembly);
            try
            {
                Image image = resourceManager.GetObject(imageName) as Image;
                if (image != null)
                {
                    return image;
                }
                var image = resourceManager.GetObject(imageName) as Image;
                if (image != null) return image;
            }
            catch (Exception ex)
            {
            }
            Image image2 = resourceManager.GetObject(lay == 1 ? "chartsshowlegend_32x32" : "linktoprevious_16x16") as Image;
            var image2 = resourceManager.GetObject(lay == 1
                ? "chartsshowlegend_32x32"
                : "linktoprevious_16x16") as Image;
            return image2;
        }
        /// <summary>
        /// 生成token
        ///     初始化一个表
        /// </summary>
        /// <param name="gc"></param>
        /// <param name="gv"></param>
        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();
        }
        /// <summary>
        ///     生成访问服务的token
        /// </summary>
        /// <returns></returns>
        public static string GetBasicAuthTicket()
        {
            string userGuid = string.IsNullOrEmpty(LoginInfoModel.CurrentUser.LoginUserGuid) ? Guid.NewGuid().ToString() : LoginInfoModel.CurrentUser.LoginUserGuid;
            string orgGuid = string.IsNullOrEmpty(LoginInfoModel.CurrentUser.LoginOrgGuid) ? Guid.NewGuid().ToString() : LoginInfoModel.CurrentUser.LoginOrgGuid;
            string token = (userGuid + "~" + orgGuid);
            var userGuid =
                string.IsNullOrEmpty(LoginInfoModel.CurrentUser.LoginUserGuid)
                    ? Guid.NewGuid().ToString()
                    : LoginInfoModel.CurrentUser.LoginUserGuid;
            var orgGuid =
                string.IsNullOrEmpty(LoginInfoModel.CurrentUser.LoginOrgGuid)
                    ? Guid.NewGuid().ToString()
                    : LoginInfoModel.CurrentUser.LoginOrgGuid;
            var token = userGuid + "~" + orgGuid;
            return token;
        }
        /// <summary>
        /// 标准json串返回ReturnModel-->table,
        ///     服务返回的json转为ReturnModel-->包含TablePage分页,
        /// </summary>
        /// <param name="strReturn"></param>
        /// <returns></returns>
        public static ReturnModel<PageListModel> GetTableByJson(string strReturn)
        public static ReturnModel<PageListModel> ReturnToTablePage(
            string strReturn)
        {
            ReturnModel<PageListModel> rto = new ReturnModel<PageListModel>();
            JObject json = JObject.Parse(strReturn);
            var rto = new ReturnModel<PageListModel>();
            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());
            JArray array = new JArray();
            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);
            }
            DataTable dt = JsonConvert.DeserializeObject<DataTable>(array.ToString());
            foreach (var a in d) array.Add(a);
            var dt = JsonConvert.DeserializeObject<DataTable>(array.ToString());
            rto.rtnData.list = dt;
            return rto;
        }
        /// <summary>
        /// 标准json串返回ReturnModel->字符串,
        ///     服务返回的json返回ReturnModel,
        /// </summary>
        /// <param name="strReturn"></param>
        /// <returns></returns>
        public static ReturnModel<dynamic> GetDataByJson(string strReturn)
        public static ReturnModel<dynamic> ReturnToDynamic(string strReturn)
        {
            ReturnModel<dynamic> rto = new ReturnModel<dynamic>();
            JObject json = JObject.Parse(strReturn);
            var rto = new ReturnModel<dynamic>();
            var json = JObject.Parse(strReturn);
            rto.rtnCode = int.Parse(json["rtnCode"].ToString());
            rto.rtnMsg = json["rtnMsg"].ToString();
            rto.rtnData = json["rtnData"];
@@ -152,252 +283,1249 @@
        }
        /// <summary>
        /// 标准json串返回ReturnModel-->table,
        ///     服务返回的json串返回ReturnModel-->仅仅有list,不分页,
        /// </summary>
        /// <param name="strReturn"></param>
        /// <returns></returns>
        public static ReturnModel<DataTable> GetNoPageTableByJson(string strReturn)
        public static ReturnModel<DataTable> ReturnToList(string strReturn)
        {
            ReturnModel<DataTable> rto = new ReturnModel<DataTable>();
            JObject json = JObject.Parse(strReturn);
            var rto = new ReturnModel<DataTable>();
            var json = JObject.Parse(strReturn);
            rto.rtnCode = int.Parse(json["rtnCode"].ToString());
            rto.rtnMsg = json["rtnMsg"].ToString();
            rto.rtnData = new DataTable();
            JArray array = new JArray();
            var array = new JArray();
            var d = json["rtnData"];
            foreach (var a in d)
            {
                array.Add(a);
            }
            DataTable dt = JsonConvert.DeserializeObject<DataTable>(array.ToString());
            foreach (var a in d) array.Add(a);
            var dt = JsonConvert.DeserializeObject<DataTable>(array.ToString());
            rto.rtnData = dt;
            return rto;
        }
        /// <summary>
        /// 读取默认页大小
        /// </summary>
        /// <returns></returns>
        public static int GetPageSize()
        {
            return 50;
            // return int.Parse(System.Configuration.ConfigurationSettings.AppSettings.Get("PageSize").ToString());
        }
        /// <summary>
        /// 根据对象批量设置文本值
        ///     根据对象批量设置文本框的值
        /// </summary>
        /// <param name="controls">controls:为groupBox1.Controls/panel1.Controls</param>
        /// <param name="dynamicObject">对像</param>
        /// <param name="isEdt">是否可编辑</param>
        public static void SetValueByObj(ControlCollection controls, dynamic dynamicObject, Boolean isEdt)
        /// <param name="gridViews">关联的grid</param>
        public static void SetValueByObj(ControlCollection controls,
            dynamic dynamicObject, bool isEdt, List<GridView> gridViews = null)
        {
            isEdt = !isEdt;
            if (gridViews != null)
                foreach (var gv in gridViews)
                {
                    foreach (GridColumn colmn in gv.Columns)
                    {
                        if (colmn.Name.ToString().Contains("gvMxDel") || colmn.Name.ToString().Contains("gvMxTui"))
                        {
                            //  colmn.Visible = !isEdt;
                            //  break;
                            colmn.OptionsColumn.AllowEdit = true;
                        }
                        else
                            colmn.OptionsColumn.AllowEdit = !isEdt;
                    }
                    //gv.OptionsBehavior.Editable = !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())
            {
                string strName = property.Name;
                string strVal = property.Value.ToString();
                //    // 如果value是一个对象,可以递归遍历
                //    if (property.Value is JObject)
                //    {
                //        JObject nestedObject = (JObject)property.Value;
                //        foreach (JProperty nestedProperty in nestedObject.Properties())
                //        {
                //            Console.WriteLine("\tName: {0}, Value: {1}", nestedProperty.Name, nestedProperty.Value);
                //        }
                //    }
                Control[] cols = controls.Find("txt_" + strName, true);
                if (cols.Length > 0)
                var strName = property.Name;
                var strVal = property.Value.ToString();
                try
                {
                    Control colType = cols[0];
                    //下拉
                    if (colType is ComboBoxEdit)
                    var _dddddd = "txt_" + strName;
                    var cols = controls.Find(_dddddd, true);
                    if (cols.Length > 0)
                    {
                        ComboBoxEdit txt = colType as ComboBoxEdit;
                        if (txt.Properties.TextEditStyle == DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor)
                            txt.SelectedIndex = int.Parse(strVal);
                        else
                        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)
                                txt.SelectedIndex = int.Parse(strVal);
                            else
                                txt.Text = strVal;
                            txt.ReadOnly = isEdt;
                            continue;
                        }
                        //下拉
                        if (colType is ComboBoxEdit)
                        {
                            var txt = colType as ComboBoxEdit;
                            if (txt.Properties.TextEditStyle ==
                                TextEditStyles.DisableTextEditor)
                                txt.SelectedIndex = int.Parse(strVal);
                            else
                                txt.Text = strVal;
                            txt.ReadOnly = isEdt;
                            continue;
                        }
                        //自定义下拉
                        if (colType is UcComBox)
                        {
                            var txt = colType as UcComBox;
                            txt.Val = strVal;
                            txt.Enabled = !isEdt;
                            continue;
                        }
                        //文本
                        if (colType is TextEdit)
                        {
                            var txt = colType as TextEdit;
                            if (txt != null)
                                txt.Text = strVal;
                            txt.ReadOnly = isEdt;
                            continue;
                        }
                        if (colType is MemoEdit)
                        {
                            var txt = colType as MemoEdit;
                            if (txt != null)
                                txt.Text = strVal;
                            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 (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.ReadOnly = isEdt;
                            continue;
                        }
                        //单选
                        if (colType is CheckBox)
                        {
                            var txt = colType as CheckBox;
                            if (txt != null)
                                txt.Checked = bool.Parse(strVal);
                            txt.Enabled = !isEdt;
                            continue;
                        }
                        if (colType is CheckEdit)
                        {
                            var txt = colType as CheckEdit;
                            if (txt != null)
                                txt.Checked = bool.Parse(strVal);
                            txt.ReadOnly = isEdt;
                            continue;
                        }
                        //时间
                        if (colType is DateTimePicker)
                        {
                            var txt = colType as DateTimePicker;
                            txt.Text = strVal;
                        txt.Enabled = isEdt;
                        continue;
                            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);
                            if (txt.IsReadly == false)
                                txt.Enabled = !isEdt;
                            else
                                txt.Enabled = false;
                            continue;
                        }
                        //自定义供应商
                        if (colType is UcLookSupplier)
                        {
                            var txt = colType as UcLookSupplier;
                            txt.SetIdOrCode(strVal);
                            if (txt.IsReadly == false)
                                txt.Enabled = !isEdt;
                            else
                                txt.Enabled = false;
                            continue;
                        }
                        //自定义物料
                        if (colType is UcLookItems)
                        {
                            var txt = colType as UcLookItems;
                            txt.SetIdOrCode(strVal);
                            if (txt.IsReadly == false)
                                txt.Enabled = !isEdt;
                            else
                                txt.Enabled = false;
                            continue;
                        }
                        //自定车间
                        if (colType is UcLookWorkshop)
                        {
                            var txt = colType as UcLookWorkshop;
                            txt.SetIdOrCode(strVal);
                            if (txt.IsReadly == false)
                                txt.Enabled = !isEdt;
                            else
                                txt.Enabled = false;
                            continue;
                        }
                        //自定产线
                        if (colType is UcLookWorkline)
                        {
                            var txt = colType as UcLookWorkline;
                            txt.SetIdOrCode(strVal);
                            if (txt.IsReadly == false)
                                txt.Enabled = !isEdt;
                            else
                                txt.Enabled = false;
                            continue;
                        }
                        //自定单位
                        if (colType is UcLookUnit)
                        {
                            var txt = colType as UcLookUnit;
                            txt.SetIdOrCode(strVal);
                            if (txt.IsReadly == false)
                                txt.Enabled = !isEdt;
                            else
                                txt.Enabled = false;
                            continue;
                        }
                        //自定客户
                        if (colType is UcLookCustomer)
                        {
                            var txt = colType as UcLookCustomer;
                            txt.SetIdOrCode(strVal);
                            if (txt.IsReadly == false)
                                txt.Enabled = !isEdt;
                            else
                                txt.Enabled = false;
                            continue;
                        }
                        //自定员工
                        if (colType is UcLookStaff)
                        {
                            var txt = colType as UcLookStaff;
                            txt.SetIdOrCode(strVal);
                            if (txt.IsReadly == false)
                                txt.Enabled = !isEdt;
                            else
                                txt.Enabled = false;
                            continue;
                        }
                        //自定组织
                        if (colType is UcLookOrg)
                        {
                            var txt = colType as UcLookOrg;
                            txt.SetIdOrCode(strVal);
                            if (txt.IsReadly == false)
                                txt.Enabled = !isEdt;
                            else
                                txt.Enabled = false;
                            continue;
                        }
                        if (colType is SimpleButton)
                        {
                            var txt = colType as SimpleButton;
                            txt.Enabled = !isEdt;
                            continue;
                        }
                    }
                    //文本
                    if (colType is TextEdit)
                    {
                        TextEdit txt = colType as TextEdit;
                        if (txt != null)
                            txt.Text = strVal;
                        txt.Enabled = isEdt;
                        continue;
                    }
                     //数字卡
                    if (colType is NumericUpDown)
                    {
                        NumericUpDown txt = colType as NumericUpDown;
                        if (txt != null)
                            txt.Text = strVal;
                        txt.Enabled = isEdt;
                        continue;
                    }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }
        /// <summary>
        /// 清空容器里面的控件
        ///     清空容器里面的控件
        /// </summary>
        /// <param name="controls">controls:为groupBox1.Controls/panel1.Controls</param>
        /// <param name="isEdt">是否可编辑</param>
        public static void CleanValue(ControlCollection controls, Boolean isEdt)
        /// <param name="gridViews">关联的grid</param>
        public static void CleanValueByControl(ControlCollection controls,
            bool isEdt, List<GridView> gridViews = null)
        {
            isEdt = !isEdt;
            if (gridViews != null)
                foreach (var gv in gridViews)
                {
                    foreach (GridColumn colmn in gv.Columns)
                    {
                        if (colmn.Name.ToString().Contains("gvMxDel") || colmn.Name.ToString().Contains("gvMxTui"))
                        {
                            //  colmn.Visible = !isEdt;
                            //  break;
                            colmn.OptionsColumn.AllowEdit = true;
                        }
                        else
                            colmn.OptionsColumn.AllowEdit = !isEdt;
                    }
                    //gv.OptionsBehavior.Editable = !isEdt;
                }
            foreach (Control ctrl in controls)
            {
                ctrl.Enabled = isEdt;
                //多行文本
                if (ctrl is MemoEdit)
                {
                    MemoEdit txt = ctrl as MemoEdit;
                    var txt = ctrl as MemoEdit;
                    txt.Text = "";
                    txt.Enabled = isEdt;
                    txt.ReadOnly = isEdt;
                    continue;
                }
                //下拉
                if (ctrl is ComboBoxEdit)
                {
                    ComboBoxEdit txt = ctrl as ComboBoxEdit;
                    if (txt.Properties.TextEditStyle == DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor)
                    var txt = ctrl as ComboBoxEdit;
                    if (txt.Properties.TextEditStyle ==
                        TextEditStyles.DisableTextEditor)
                        txt.SelectedIndex = 0;
                    else
                        txt.Text = "";
                    txt.Enabled = isEdt;
                    txt.ReadOnly = isEdt;
                    continue;
                }
                //自定义的下拉
                if (ctrl is UcComBox)
                {
                    var txt = ctrl as UcComBox;
                    txt.Val = "0";
                    txt.Enabled = !isEdt;
                    continue;
                }
                //文本
                if (ctrl is TextEdit)
                {
                    ctrl.Text = "";
                    var txt = ctrl as TextEdit;
                    txt.Text = "";
                    txt.ReadOnly = isEdt;
                    continue;
                }
                if (ctrl is MemoEdit)
                {
                    var txt = ctrl as MemoEdit;
                    if (txt != null)
                        txt.Text = "";
                    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.Checked = false;
                    txt.Enabled = !isEdt;
                }
                if (ctrl is CheckEdit)
                {
                    var txt = ctrl as CheckEdit;
                    txt.ReadOnly = isEdt;
                    continue;
                }
                //自定义仓库
                if (ctrl is UcLookCk)
                {
                    var txt = ctrl as UcLookCk;
                    txt.SetIdOrCode("-1");
                    txt.Enabled = !isEdt;
                    continue;
                }
                //自定义供应商
                if (ctrl is UcLookSupplier)
                {
                    var txt = ctrl as UcLookSupplier;
                    txt.SetIdOrCode("-1");
                    txt.Enabled = !isEdt;
                    continue;
                }
                //自定义物料
                if (ctrl is UcLookItems)
                {
                    var txt = ctrl as UcLookItems;
                    txt.SetIdOrCode("-1");
                    txt.Enabled = !isEdt;
                    continue;
                }
                //自定车间
                if (ctrl is UcLookWorkshop)
                {
                    var txt = ctrl as UcLookWorkshop;
                    txt.SetIdOrCode("-1");
                    txt.Enabled = !isEdt;
                    continue;
                }
                //自定产线
                if (ctrl is UcLookWorkline)
                {
                    var txt = ctrl as UcLookWorkline;
                    txt.SetIdOrCode("-1");
                    txt.Enabled = !isEdt;
                    continue;
                }
                //自定单位
                if (ctrl is UcLookUnit)
                {
                    var txt = ctrl as UcLookUnit;
                    txt.SetIdOrCode("-1");
                    txt.Enabled = !isEdt;
                    continue;
                }
                //自定客户
                if (ctrl is UcLookCustomer)
                {
                    var txt = ctrl as UcLookCustomer;
                    txt.SetIdOrCode("-1");
                    txt.Enabled = !isEdt;
                    continue;
                }
                //自定客户
                if (ctrl is UcLookStaff)
                {
                    var txt = ctrl as UcLookStaff;
                    txt.SetIdOrCode("-1");
                    txt.Enabled = !isEdt;
                    continue;
                }
                //自定组织
                if (ctrl is UcLookOrg)
                {
                    var txt = ctrl as UcLookOrg;
                    txt.SetIdOrCode("-1");
                    txt.Enabled = !isEdt;
                    continue;
                }
                if (ctrl is SimpleButton)
                {
                    var txt = ctrl as SimpleButton;
                    txt.Enabled = !isEdt;
                    continue;
                }
            }
        }
        /// <summary>
        /// 禁用或启用容器里面的控件
        ///     禁用或启用容器里面的控件
        /// </summary>
        /// <param name="controls">controls:为groupBox1.Controls/panel1.Controls</param>
        /// <param name="isEdt">是否可编辑</param>
        public static void ChangeEnable(ControlCollection controls, Boolean isEdt)
        /// <param name="isEdt"></param>
        /// <param name="gridViews"></param>
        public static void ChangeEnableByControl(ControlCollection controls,
            bool isEdt, List<GridView> gridViews = null)
        {
            isEdt = !isEdt;
            if (gridViews != null)
                foreach (var gv in gridViews)
                {
                    foreach (GridColumn colmn in gv.Columns)
                    {
                        if (colmn.Name.ToString().Contains("gvMxDel") || colmn.Name.ToString().Contains("gvMxTui"))
                        {
                            //  colmn.Visible = !isEdt;
                            //  break;
                            colmn.OptionsColumn.AllowEdit = true;
                        }
                        else
                            colmn.OptionsColumn.AllowEdit = !isEdt;
                    }
                    //gv.OptionsBehavior.Editable = !isEdt;
                }
            foreach (Control ctrl in controls)
            {
                //文本
                if (ctrl is TextEdit)
                {
                    ctrl.Enabled = isEdt;
                    var txt = ctrl as TextEdit;
                    txt.ReadOnly = isEdt;
                    continue;
                }
                if (ctrl is MemoEdit)
                {
                    var txt = ctrl as MemoEdit;
                    txt.ReadOnly = isEdt;
                    continue;
                }
                //数字卡
                if (ctrl is NumericUpDown)
                {
                    ctrl.Enabled = isEdt;
                    var txt = ctrl as NumericUpDown;
                    txt.ReadOnly = isEdt;
                    continue;
                }
                //下拉
                if (ctrl is UcComBox)
                {
                    var txt = ctrl as UcComBox;
                    txt.Val = "0";
                    txt.Enabled = !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;
                    if (txt.IsReadly == false)
                        txt.Enabled = !isEdt;
                    else
                        txt.Enabled = false;
                    continue;
                }
                //自定义供应商
                if (ctrl is UcLookSupplier)
                {
                    var txt = ctrl as UcLookSupplier;
                    if (txt.IsReadly == false)
                        txt.Enabled = !isEdt;
                    else
                        txt.Enabled = false;
                    continue;
                }
                //自定义物料
                if (ctrl is UcLookItems)
                {
                    var txt = ctrl as UcLookItems;
                    if (txt.IsReadly == false)
                        txt.Enabled = !isEdt;
                    else
                        txt.Enabled = false;
                    continue;
                }
                //自定义车间
                if (ctrl is UcLookWorkshop)
                {
                    var txt = ctrl as UcLookWorkshop;
                    if (txt.IsReadly == false)
                        txt.Enabled = !isEdt;
                    else
                        txt.Enabled = false;
                    continue;
                }
                //自定义产线
                if (ctrl is UcLookWorkline)
                {
                    var txt = ctrl as UcLookWorkline;
                    if (txt.IsReadly == false)
                        txt.Enabled = !isEdt;
                    else
                        txt.Enabled = false;
                    continue;
                }
                //自定义单位
                if (ctrl is UcLookUnit)
                {
                    var txt = ctrl as UcLookUnit;
                    if (txt.IsReadly == false)
                        txt.Enabled = !isEdt;
                    else
                        txt.Enabled = false;
                    continue;
                }
                //自定义客户
                if (ctrl is UcLookCustomer)
                {
                    var txt = ctrl as UcLookCustomer;
                    if (txt.IsReadly == false)
                        txt.Enabled = !isEdt;
                    else
                        txt.Enabled = false;
                    continue;
                }
                //自定义员工
                if (ctrl is UcLookStaff)
                {
                    var txt = ctrl as UcLookStaff;
                    if (txt.IsReadly == false)
                        txt.Enabled = !isEdt;
                    else
                        txt.Enabled = false;
                    continue;
                }
                //自定组织
                if (ctrl is UcLookOrg)
                {
                    var txt = ctrl as UcLookOrg;
                    if (txt.IsReadly == false)
                        txt.Enabled = !isEdt;
                    else
                        txt.Enabled = false;
                    continue;
                }
            }
        }
        /// <summary>
        ///切换选项卡
        ///     切换选项卡
        /// </summary>
        /// <param name="tabControl">选项卡容器</param>
        /// <param name="idx">从0开始,如果是999,则全部可用</param>
        public static void ChangeTab(XtraTabControl tabControl, int idx)
        public static void JumpToTab(XtraTabControl tabControl, int idx)
        {
            if (idx == 999)
            {
                for (int i = 0; i < tabControl.TabPages.Count; i++)
                {
                for (var i = 0; i < tabControl.TabPages.Count; i++)
                    tabControl.TabPages[i].PageEnabled = true;
                }
                tabControl.SelectedTabPageIndex = tabControl.TabPages.Count - 1;
                return;
            }
            for (int i = 0; i < tabControl.TabPages.Count; i++)
            {
            for (var i = 0; i < tabControl.TabPages.Count; i++)
                tabControl.TabPages[i].PageEnabled = false;
            }
            tabControl.TabPages[idx].PageEnabled = true;
            tabControl.SelectedTabPageIndex = idx;
        }
        /// <summary>
        ///     TreeView联动选择
        /// </summary>
        /// <param name="e"></param>
        public static void TreeViewCheck(TreeViewEventArgs e)
        {
            try
            {
                if (e.Node.Nodes.Count > 0)
                {
                    bool NoFalse = true;
                    foreach (TreeNode tn in e.Node.Nodes)
                    {
                        if (tn.Checked == false)
                        tn.Checked = e.Node.Checked;
                        foreach (TreeNode x in tn.Nodes)
                        {
                            NoFalse = false;
                            x.Checked = e.Node.Checked;
                            foreach (TreeNode y in x.Nodes)
                                y.Checked = e.Node.Checked;
                        }
                    }
                    if (e.Node.Checked == true || NoFalse)
                    {
                        foreach (TreeNode tn in e.Node.Nodes)
                        {
                            if (tn.Checked != e.Node.Checked)
                            {
                                tn.Checked = e.Node.Checked;
                            }
                        }
                    }
                }
                if (e.Node.Parent != null && e.Node.Parent is TreeNode)
                if (e.Node.Checked && e.Node.Parent != null &&
                    e.Node.Parent.Nodes.Count > 0)
                {
                    bool ParentNode = true;
                    foreach (TreeNode tn in e.Node.Parent.Nodes)
                    var currentNode = e.Node;
                    while (currentNode != null)
                    {
                        if (tn.Checked == false)
                        {
                            ParentNode = false;
                        }
                    }
                    if (e.Node.Parent.Checked != ParentNode && (e.Node.Checked == false || e.Node.Checked == true && e.Node.Parent.Checked == false))
                    {
                        e.Node.Parent.Checked = ParentNode;
                        currentNode.Checked = e.Node.Checked;
                        currentNode = currentNode.Parent;
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
                MsgHelper.ShowError(ex.Message);
            }
        }
        /// <summary>
        /// 转驼峰命名
        ///     转驼峰命名
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public static string ToCamelCase(string input)
        public static string ToCamelCase(string strItem)
        {
            if (string.IsNullOrEmpty(input))
                return input;
            //如果包含小写,但不包含下划线
            var hasLowercase = Regex.IsMatch(strItem, @"[a-z]");
            if (hasLowercase && !strItem.Contains("_"))
            {
                var chars = strItem.ToCharArray();
                chars[0] = char.ToLower(chars[0]);
                return new string(chars);
            }
            // 匹配非字母数字字符后的第一个字母,并将其转换为大写
            return Regex.Replace(
                input,
                "([a-z])([A-Z])",
                "$1$2",
                RegexOptions.CultureInvariant
            ).Trim();
            var strItems = strItem.ToLower().Split('_');
            var strItemTarget = strItems[0];
            for (var j = 1; j < strItems.Length; j++)
            {
                var temp = strItems[j];
                var temp1 = temp[0].ToString().ToUpper();
                var temp2 = "";
                temp2 = temp1 + temp.Remove(0, 1);
                strItemTarget += temp2;
            }
            return strItemTarget;
        }
        /// <summary>
        /// 转Guid
        /// </summary>
        /// <param name="str"></param>
        /// <returns></returns>
        public static Guid ToGuid(string str)
        {
            if (string.IsNullOrEmpty(str)) return Guid.Empty;
            return Guid.Parse(str);
        }
        public static int ToInt(string str)
        {
            try
            {
                return int.Parse(str);
            }
            catch (Exception)
            {
                return 0;
            }
        }
        public static long ToLong(string str)
        {
            try
            {
                return long.Parse(str);
            }
            catch (Exception)
            {
                return 0;
            }
        }
        public static int ToBit(string str)
        {
            if (str.ToUpper() == "true".ToUpper())
                return 1;
            return 0;
        }
        /// <summary>
        /// 读取grid的当前行
        /// </summary>
        /// <param name="xtraTabControl1"></param>
        /// <param name="lbGuid">编辑框中的主键名</param>
        /// <param name="txtName">编辑框中的文本框名</param>
        /// <param name="gridView1"></param>
        /// <param name="SelectedTabPageIndex"></param>
        /// <returns></returns>
        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);
        }
        /// <summary>
        ///     读取TreeView的当前行
        /// </summary>
        /// <param name="xtraTabControl1"></param>
        /// <param name="lbGuid"></param>
        /// <param name="txtName"></param>
        /// <param name="tlMenu"></param>
        /// <param name="SelectedTabPageIndex"></param>
        /// <returns></returns>
        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);
        }
        /// <summary>
        ///     读取TreeList的当前行
        /// </summary>
        /// <param name="xtraTabControl1"></param>
        /// <param name="lbGuid"></param>
        /// <param name="txtName"></param>
        /// <param name="tlMenu"></param>
        /// <param name="SelectedTabPageIndex"></param>
        /// <returns></returns>
        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);
        }
        /// <summary>
        ///     读取GridView双击的主键
        /// </summary>
        /// <param name="gridView1"></param>
        /// <param name="e"></param>
        /// <param name="colName"></param>
        /// <returns></returns>
        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 "";
        }
        /// <summary>
        ///     读取GridView双击的主键
        /// </summary>
        /// <param name="gridView1"></param>
        /// <param name="e"></param>
        /// <param name="colName"></param>
        /// <returns></returns>
        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 "";
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="s"></param>
        /// <param name="btnChkIco"></param>
        /// <param name="fm"></param>
        /// <param name="fileName">对应的审核字段名称</param>
        /// <param name="icoName"></param>
        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)
                {
                    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())
                            btnChkIco.Image = global::Gs.DevApp.Properties.Resources.ico_check;
                        else
                            btnChkIco.Image = global::Gs.DevApp.Properties.Resources.ico_noCheck;
                        btnChkIco.Anchor = AnchorStyles.Top | AnchorStyles.Right; // 靠右
                        btnChkIco.Location = new Point(fm.ClientSize.Width - btnChkIco.Width - 20, 80); // 距离顶部10像素
                    }
                }
            }
        }
        #region 设置搜索
        public static string getQueryWord(string str)
        {
            return str.ToUpper().Replace("query_".ToUpper(), "");
        }
        public static FilterEntity getFilterEntityWord(string id, string idDec, string val)
        {
            return new FilterEntity(getQueryWord(id), idDec + ")", " like ", "包含)", "%" + val + "%");
        }
        public static List<FilterEntity> GetDilter(GridColumnCollection Columns)
        {
            List<FilterEntity> fiList = new List<FilterEntity>();
            foreach (DevExpress.XtraGrid.Columns.GridColumn col in Columns)
            {
                ColumnFilterInfo filter = col.FilterInfo;
                if (string.IsNullOrEmpty(filter.FilterString))
                    continue;
                //  fiList.Add(new FilterEntity("b.FNumber", "使用组织", " like ", "包含", "%" + filter.Value + "%"));
                string[] ddd = filter.FilterString.Replace("Contains", "").Replace("(", "").Replace(")", "").Replace("'", "").Replace("'", "").Split(',');
                //Contains([fSubsidiary], '005')
                fiList.Add(getFilterEntityWord(col.Tag.ToString(), col.Caption.Trim(), ddd[1].Trim()));
            }
            return fiList;
        }
        /// <summary>
        /// 根据过滤器,读取查询条件,org表为组织
        /// </summary>
        /// <param name="_filterList"></param>
        /// <returns></returns>
        public static string GetSearchWhere(List<FilterEntity> _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
                    _sbSqlWhere.Append(" and " + itm.fileId + itm.fileOper + "'" +
                                      itm.fileValue + "'");
            }
            return _sbSqlWhere.ToString();
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="gridView1">gridview</param>
        /// <param name="btnChkIco">图标按钮</param>
        /// <param name="fm">当前窗体</param>
        /// <param name="fileName">字段</param>
        /// <param name="icoName">图标路径</param>
        public static void SetGridSear(GridView gridView1, PictureBox btnChkIco = null, Form fm = null, string fileName = "checkStatus", string icoName = "")
        {
         //   gridView1.OptionsView.ColumnAutoWidth = false;自动调整列宽
            foreach (GridColumn column in gridView1.Columns)
            {
                column.OptionsFilter.AutoFilterCondition = AutoFilterCondition.Contains;
                column.OptionsFilter.ImmediateUpdateAutoFilter = false;
                // column.OptionsColumn.AllowEdit = false;
                if (column.Tag == null || column.Tag.ToString().Length <= 0)
                    column.OptionsFilter.AllowAutoFilter = false;
            }
            gridView1.OptionsFilter.AllowAutoFilterConditionChange = DevExpress.Utils.DefaultBoolean.False;
            gridView1.OptionsFilter.AllowFilterEditor = false;
            gridView1.OptionsFilter.ShowCustomFunctions = DevExpress.Utils.DefaultBoolean.False;
            gridView1.OptionsCustomization.AllowFilter = false;
            gridView1.OptionsFind.ShowSearchNavButtons = false;
            gridView1.OptionsView.ShowAutoFilterRow = true;
            gridView1.OptionsView.ShowGroupPanel = false;
            gridView1.IndicatorWidth = 50;
            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 (btnChkIco != null)
            {
                gridView1.FocusedRowChanged += (s, e) =>
                {
                    UtilityHelper.SetCheckIco(s, btnChkIco, fm, fileName, icoName);
                };
            }
        }
        /// <summary>
        /// 设置明细grid样式
        /// </summary>
        /// <param name="gridView1"></param>
        /// <param name="btnChkIco"></param>
        /// <param name="fm"></param>
        /// <param name="fileName"></param>
        /// <param name="icoName"></param>
        public static void SetGridSearMx(GridView gridView1)
        {
            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 = 40;
            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;
                        }
                    }
                }
            };
        }
        #endregion
        public static bool IsNumeric(string str)
        {
            Regex regex = new Regex("^[0-9]+$");
            return regex.IsMatch(str);
        }
    }
}
    /// <summary>
    ///     下拉框条目类
    /// </summary>
    public class CboItemEntity
    {
        public CboItemEntity()
        {
        }
        public CboItemEntity(string val, string text)
        {
            Text = text;
            Value = val;
        }
        /// <summary>
        ///     显示值
        /// </summary>
        public object Text { get; set; } = 0;
        /// <summary>
        ///     对象值
        /// </summary>
        public object Value { get; set; } = "";
        public override string ToString()
        {
            return Text.ToString();
        }
    }
    /// <summary>
    ///     查询框
    /// </summary>
    public class FilterEntity
    {
        /// <summary>
        /// </summary>
        /// <param name="id">字段名</param>
        /// <param name="idDec">字段名备注</param>
        /// <param name="oper">操作符</param>
        /// <param name="operDec">操作符备注</param>
        /// <param name="val"></param>
        public FilterEntity(string id, string idDec, string oper,
            string operDec, string val)
        {
            fileId = id;
            fileIdDec = idDec;
            fileOper = oper;
            fileOperDec = operDec;
            fileValue = val;
        }
        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; }
    }
}