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

3516 lines
158 KiB
C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraGrid.Views.Grid;
using DevExpress.XtraGrid;
using DevExpress.XtraGrid.Columns;
using DevExpress.Utils;
using CommonLib;
using DevExpress.XtraEditors.Repository;
using DevExpress.XtraEditors.Controls;
using System.Text.RegularExpressions;
using Lskj.MyControl.LookUp;
using DevExpress.XtraEditors;
using Lskj.PubUtils;
using DevExpress.Data;
using DevExpress.XtraGrid.Menu;
using DevExpress.Utils.Menu;
using DevExpress.XtraGrid.Views.Base;
using ControlLib.inh;
using DevExpress.XtraPrinting;
using Lskj.Common;
using System.Data.SqlClient;
namespace Lskj.MyControl
{
public partial class GridControlEx : UserControl
{
public GridView gridView { get { return gridView1; } }
public GridControl gridControl { get { return gridMain; } }
public string Sql { get; set; }
public string sqlC { get; set; }
public string ConstSql { get; set; }
public int SourceType { get; set; }
public bool IsColumnFix;
public bool IsSaveColumn = true;
public string loadBom { get; set; }
public string bomSql { get; set; }
public string bomCaption { get; set; }
public string detailEnableCond { get; set; }
public string detailEnableMsg { get; set; }
public static string OperatorId { get; set; }
public static string OperatorName { get; set; }
public bool AddCopyRows;
public string ColumnPrefix;
public string GridText;
private string headerColor = "#A0A0A0";
private bool isCancel = false;
private double customSum = 0.00;
private Dictionary<string, double> dicSum;
private Dictionary<string, Dictionary<string, string>> lookupDatas;
public Dictionary<string, DataTable> lookupTables;
private bool inSummary = false;
private bool isSetColumnWidth = false;
private DataTable clipTable;
public DataTable SumFieldsTable { get; set; }
private DataTable dtColumns;
/// <summary>
/// 当前设置列方式
/// </summary>
private int _currentSetColumnType;
private string ColumnSQL = string.Empty;
/// <summary>
/// 禁用表格是否需要改变表格颜色
/// </summary>
public bool UnAllowEditChangeColor { get; set; }
/// <summary>
/// 表格列信息保存需要的信息
/// </summary>
public string ModuleKey; //关键字
public string FormKey;
public int ModuleType; //模块类型//基础档案
/// <summary>
/// 0.默认列跳转,1为行跳转
/// </summary>
public int EnterOrder;
//报表明细
//单据明细
//来源主信息
//来源明细信息
//单据来源主信息
public Control pnlMain { get; set; }
public GridControlEx()
{
InitializeComponent();
gridView1.IndicatorWidth = 40;
gridView1.KeyDown += new KeyEventHandler(gridView1_KeyDown);
gridView1.Appearance.HeaderPanel.Font = new Font("宋体", 9);
gridView1.Appearance.HeaderPanel.TextOptions.HAlignment = HorzAlignment.Center;
gridView1.Appearance.Preview.Font = new Font("宋体", 9);
gridView1.Appearance.Row.Font = new Font("宋体", 9);
//gridView1.RowCellStyle += new RowCellStyleEventHandler(gridView1_RowCellStyle);
gridView1.RowStyle += new RowStyleEventHandler(gridView1_RowStyle);
gridView1.SelectionChanged += new DevExpress.Data.SelectionChangedEventHandler(gridView1_SelectionChange);
gridView1.ShowingEditor += new CancelEventHandler(gridView1_CancelEditor);
gridView1.PopupMenuShowing += new PopupMenuShowingEventHandler(gridView1_PopupMenuShowing);
gridView1.CustomSummaryCalculate += new CustomSummaryEventHandler(gridView1_CustomSummaryCalculate);
//gridView1.OptionsView.AllowCellMerge = true;
gridView1.OptionsSelection.MultiSelect = true;
gridView1.OptionsSelection.MultiSelectMode = GridMultiSelectMode.CellSelect;
gridView1.OptionsBehavior.EditorShowMode = EditorShowMode.MouseDownFocused;
gridView1.CustomColumnDisplayText += new DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventHandler(gridView1_CustomColumnDisplayTextEventHandler);
gridView1.CellValueChanged += new DevExpress.XtraGrid.Views.Base.CellValueChangedEventHandler(gridBillInfo_CellValueChanged);
gridView1.OptionsView.RowAutoHeight = true;
gridView1.OptionsBehavior.CopyToClipboardWithColumnHeaders = false;
gridView1.DoubleClick += new EventHandler(gridView1_DoubleClick);
dicSum = new Dictionary<string, double>();
lookupDatas = new Dictionary<string, Dictionary<string, string>>();
lookupTables = new Dictionary<string, DataTable>();
clipTable = new DataTable();
AddCopyRows = false;
ColumnPrefix = "";
OperatorId = ERPInfo.Instance.EmployeeId.ToString();
OperatorName = ERPInfo.Instance.EmployeeName.ToString();
}
void gridView1_RowStyle(object sender, RowStyleEventArgs e)
{
if (e.RowHandle >= 0)
{
DataRow row = this.gridView.GetDataRow(e.RowHandle);
if (row == null)
return;
//颜色集合
DataTable dt = RowColorCondtion as DataTable;
if (dt == null)
return;
//选择列
string cond = string.Empty;
string color = string.Empty;
string forecolor = string.Empty;
if (dt != null && dt.Rows.Count > 0)
{
foreach (DataRow dr in dt.Rows)
{
cond = dr["condition"].ToString();
List<string> condition = GetParamValue(cond);
foreach (string item in condition)
{
string filedName = item.Replace("{", "").Replace("}", "");
if (row.Table.Columns.Contains(filedName))
{
string dataType = row.Table.Columns[filedName].DataType.ToString();
if (!dataType.Equals("decimal"))
cond = cond.Replace(item, row[filedName].ToString());
else
cond = cond.Replace(item, string.IsNullOrWhiteSpace(row[filedName].ToString()) ? "0" : row[filedName].ToString());
}
else
cond = cond.Replace(item, "0");
}
cond = SqlToCode(cond);
color = dr["backcolor"] + "";
forecolor = dr["forcecolor"].ToString() + "";
string obj = Evaluator.Eval(cond) + "";
if (obj.IndexOf("true", StringComparison.OrdinalIgnoreCase) != -1)
{
if (!string.IsNullOrEmpty(color))
{
System.Drawing.Color color1 = System.Drawing.ColorTranslator.FromHtml(color);
e.Appearance.BackColor = color1;
}
if (!string.IsNullOrEmpty(forecolor))
{
System.Drawing.Color foreColor = System.Drawing.ColorTranslator.FromHtml(forecolor);
e.Appearance.ForeColor = foreColor;
}
FontStyle fst = new FontStyle();
if (dr["ifBold"].ToString() == "1")
{
fst = fst | FontStyle.Bold;
}
if (dr["ifItalic"].ToString() == "1")
{
fst = fst | FontStyle.Italic;
}
if (dr["ifStrickOut"].ToString() == "1")
{
fst = fst | FontStyle.Strikeout;
}
if (dr["ifUnderLine"].ToString() == "1")
{
fst = fst | FontStyle.Underline;
}
e.Appearance.Font = new Font(e.Appearance.Font, fst);
}
}
}
}
}
private void gridView1_DoubleClick(object sender, EventArgs e)
{
if (gridControl.ContextMenuStrip != null)
{
foreach (ToolStripMenuItem item in gridControl.ContextMenuStrip.Items)
{
if (item.Tag == null)
continue;
DataRow dr = item.Tag as DataRow;
if (dr == null)
continue;
if (dr.Table.Columns.Contains("DBClickEvent"))
{
if (dr["DBClickEvent"] + "" == "1")
{
string menuCond = dr["menuCond"] + "";
int[] rows = gridView1.GetSelectedRows();
if (rows != null && rows.Count() > 0)
{
DataRow row = gridView1.GetDataRow(rows[0]);
menuCond = ReqSqlParam(menuCond, OperatorId, OperatorName);
menuCond = ReqSqlWhere(row, menuCond);
bool isEnabled = false;
try
{
isEnabled = string.IsNullOrWhiteSpace(menuCond) || Convert.ToBoolean(Evaluator.Eval(menuCond));
}
catch (Exception)
{
XtraMessageBox.Show(string.Format("{0} 配置条件错误,请检查.", dr["menuName"]));
}
if (isEnabled)
{
item.PerformClick();
}
else
{
XtraMessageBox.Show("当前选择数据不满足条件.");
}
break;
}
}
}
}
}
}
public void reloadDictionary()
{
foreach (GridColumn gc in gridView1.Columns)
{
if (!(gc.ColumnEdit is RepositoryItemSearchLookUpEdit))
continue;
RepositoryItemSearchLookUpEdit combox = gc.ColumnEdit as RepositoryItemSearchLookUpEdit;
LookUpTag ltag = combox.Tag as LookUpTag;
if (ltag != null)
{
String SQL = ltag.Sql;
if (SQL != null)
{
SQL = Regex.Replace(SQL, "#[^##]+#", " 1=1 ");
DataTable dtTable = SqlHelper.ExecuteDataSet(SQL).Tables[0];
combox.DataSource = dtTable;
}
}
}
}
#region 处理Grid计算
private void gridBillInfo_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
{
MyTagModel tag = e.Column.Tag as MyTagModel;
if (tag.unionFields + "" != "")
setUnionValue(e.Column, e.Value);
if (SumFieldsTable == null)
return;
if (inSummary) return;
inSummary = true;
string calcSource = string.Empty;
try
{
DataRow gvRow = gridView.GetDataRow(e.RowHandle);
foreach (DataRow row in SumFieldsTable.Rows)
{
bool ifTruncate = false;
string calcExpr = row["calcExpr"].ToString();
if (calcExpr.IndexOf("@truncate:", StringComparison.OrdinalIgnoreCase) != -1)
{
calcExpr = calcExpr.Substring(10);
ifTruncate = true;
}
// 注释此代码会导致公式 a+1=b c+1=d 计算正常,此时手动修改b的值,在输入c的值时会同时计算b的值,导致无法修改。
//if (calcExpr.IndexOf("{" + e.Column.FieldName + "}", StringComparison.OrdinalIgnoreCase) != -1)
{
try
{
calcSource = calcExpr;
if (e.Column.FieldName != row["fieldName"].ToString())
{
List<string> listParam = GetParamValue(calcExpr);
foreach (string str in listParam)
{
string filed = str.Replace("{", "").Replace("}", "");
string filedValue = "";
if (gvRow.Table.Columns.Contains(filed))
{
filedValue = gvRow[filed].ToString();
if (string.IsNullOrEmpty(filedValue))
filedValue = "0";
calcExpr = calcExpr.Replace(str, filedValue + "");
}
//根据单据头变量替换
if (pnlMain != null)
{
Control[] ctrs = pnlMain.Controls.Find("txt_" + filed, true);
if ((ctrs != null) && (ctrs.Length > 0))
{
filedValue = GetControlText(ctrs[0]);
calcExpr = calcExpr.Replace(str, filedValue + "");
}
}
}
try
{
calcExpr = calcExpr.Replace("=", "==").Replace("<>", "!=").Replace("and", "&&").Replace("or", "|").Replace("--", "+");
string result = Evaluator.Eval(calcExpr).ToString();
double d = 0;
if (!string.IsNullOrEmpty(result) &&
!"NaN".Equals(result, StringComparison.OrdinalIgnoreCase) &&
!"非数字".Equals(result, StringComparison.OrdinalIgnoreCase) &&
!"undefined".Equals(result, StringComparison.OrdinalIgnoreCase) &&
result != "∞" && result != "-∞" &&
!"正无穷大".Equals(result, StringComparison.OrdinalIgnoreCase) &&
!"负无穷大".Equals(result, StringComparison.OrdinalIgnoreCase) &&
double.TryParse(result, out d))
{
//MessageBox.Show("公式:" + calcExpr + ";值:" + result);
int idataDec = 2;
if (row.Table.Columns.Contains("DataDec"))
idataDec = int.Parse(row["DataDec"].ToString());
if (ifTruncate)
{
if (result.IndexOf(".") == -1)
result = result + ".0000000000";
else
result = result + "0000000000";
gvRow[row["fieldName"].ToString()] = result.Substring(0, result.IndexOf(".")) + result.Substring(result.IndexOf("."), idataDec + 1);
//gridView.SetRowCellValue(e.RowHandle, gridView.Columns[row["fieldName"].ToString()],
//result.Substring(0, result.IndexOf(".")) + result.Substring(result.IndexOf("."), idataDec + 1));
}
else
{
gvRow[row["fieldName"].ToString()] = Math.Round(d, idataDec, MidpointRounding.AwayFromZero);
//gridView.SetRowCellValue(e.RowHandle, gridView.Columns[row["fieldName"].ToString()], Math.Round(d, idataDec, MidpointRounding.AwayFromZero));
//gridView.UpdateCurrentRow();
}
}
}
catch (Exception)
{
}
}
}
catch (Exception ex)
{
//gridView.SetRowCellValue(e.RowHandle, gridView.Columns[row["fieldName"].ToString()], 0);
//MessageBox.Show("计算公式定义错误:" + calcSource + " >> " + calcExpr + "\n" + ex.Message);
}
}
}
}
catch
{
//MessageBox.Show("计算公式定义错误:" + calcSource + "\n" + ex.Message);
}
inSummary = false;
}
#endregion
public void setCalcExpr(DataRow row, int RowHandle)
{
DataRow gvRow = gridView.GetDataRow(RowHandle);
bool ifTruncate = false;
string calcExpr = row["calcExpr"].ToString();
if (calcExpr.IndexOf("@truncate:", StringComparison.OrdinalIgnoreCase) != -1)
{
calcExpr = calcExpr.Substring(10);
ifTruncate = true;
}
//if (e.Column.FieldName != row["fieldName"].ToString())
//{
List<string> listParam = GetParamValue(calcExpr);
foreach (string str in listParam)
{
string filed = str.Replace("{", "").Replace("}", "");
string filedValue = "";
if (gvRow.Table.Columns.Contains(filed))
{
filedValue = gvRow[filed].ToString();
if (string.IsNullOrEmpty(filedValue))
filedValue = "0";
calcExpr = calcExpr.Replace(str, filedValue + "");
}
//根据单据头变量替换
if (pnlMain != null)
{
Control[] ctrs = pnlMain.Controls.Find("txt_" + filed, true);
if ((ctrs != null) && (ctrs.Length > 0))
{
filedValue = GetControlText(ctrs[0]);
calcExpr = calcExpr.Replace(str, filedValue + "");
}
}
}
calcExpr = calcExpr.Replace("=", "==").Replace("<>", "!=").Replace("and", "&&").Replace("or", "|").Replace("--", "+");
string result = Evaluator.Eval(calcExpr).ToString();
int idataDec = 2;
if (row.Table.Columns.Contains("DataDec"))
idataDec = int.Parse(row["DataDec"].ToString());
try
{
if (ifTruncate)
{
if (result.IndexOf(".") == -1)
result = result + ".0000000000";
else
result = result + "0000000000";
gridView.SetRowCellValue(RowHandle, gridView.Columns[row["fieldName"].ToString()],
result.Substring(0, result.IndexOf(".")) + result.Substring(result.IndexOf("."), idataDec + 1));
}
else
{
if (!"NaN".Equals(result) && !"undefined".Equals(result))
{
if (string.IsNullOrEmpty(result)) result = "0";
gridView.SetRowCellValue(RowHandle, gridView.Columns[row["fieldName"].ToString()],
Math.Round(double.Parse(result), idataDec, MidpointRounding.AwayFromZero));
}
}
}
catch (Exception)
{
}
}
public void setUnionValue(GridColumn col, object value)
{
MyTagModel lookUpTag = col.Tag as MyTagModel;
var focusRow = gridView.GetDataRow(gridView.FocusedRowHandle);
if (focusRow != null && lookUpTag != null)
{
string columnName = col.FieldName;
string unionFields = lookUpTag.unionFields;
string unionValue = lookUpTag.unionValue;
unionValue = ReqSqlParam(unionValue, ERPInfo.Instance.EmployeeId.ToString(), ERPInfo.Instance.EmployeeName);
string cellValue = string.IsNullOrEmpty(value + "") ? "" : value.ToString();
unionValue = unionValue.Replace("{" + columnName + "}", cellValue);
var fieldParams = GetParamValue(unionValue);
for (int i = 0; i < fieldParams.Count; i++)
{
string fieldName = fieldParams[i].Replace("{", "").Replace("}", "");
string fieldValue = focusRow[fieldName] + "";
unionValue = unionValue.Replace(fieldParams[i], fieldValue);
}
DataTable dtTable = SqlHelper.ExecuteDataSet(unionValue).Tables[0];
if (dtTable.Rows.Count > 0)
{
DataRow row = dtTable.Rows[0];
string[] unionFieldSplit = unionFields.Split(',');
for (int i = 0; i < unionFieldSplit.Count(); i++)
{
string fieldName = unionFieldSplit[i];
if (fieldName.Trim() != "")
{
focusRow[fieldName] = row[fieldName];
//gridView.SetRowCellValue(gridView.FocusedRowHandle, gridView.Columns[fieldName], row[fieldName]);
//gridView.UpdateCurrentRow();
}
}
}
else
{
string[] unionFieldSplit = unionFields.Split(',');
for (int i = 0; i < unionFieldSplit.Count(); i++)
{
string fieldName = unionFieldSplit[i];
if (fieldName.Trim() != "")
{
focusRow[fieldName] = DBNull.Value;
//gridView.SetRowCellValue(gridView.FocusedRowHandle, gridView.Columns[fieldName], null);
//gridView.UpdateCurrentRow();
}
}
}
}
}
private void gridView1_CustomColumnDisplayTextEventHandler(object sender, CustomColumnDisplayTextEventArgs e)
{
if (e.Column.ColumnEdit is RepositoryItemButtonEdit)
{
RepositoryItemButtonEdit colEdit = e.Column.ColumnEdit as RepositoryItemButtonEdit;
if (colEdit.Tag + "" == "13")
{
string lValue = e.Value + "";
if (lValue.Trim() != "")
{
string disp = "";
string[] lst = lValue.Split(',');
Dictionary<string, string> ldic = lookupDatas[e.Column.FieldName];
foreach (string item in lst)
{
if (ldic.ContainsKey(item))
disp += ldic[item] + ",";
else
disp += item + ",";
}
e.DisplayText = disp.TrimEnd(',');
}
}
}
}
private void gridView1_CustomSummaryCalculate(object sender, DevExpress.Data.CustomSummaryEventArgs e)
{
GridSummaryItem gi = e.Item as GridSummaryItem;
if (e.SummaryProcess == CustomSummaryProcess.Start)
{
customSum = 0;
dicSum.Clear();
}
GridColumn gcol = gridView1.Columns[gi.FieldName];
MyTagModel calcTag = gcol.Tag as MyTagModel;
string calcStr = "";
if (gcol.Tag != null)
{
calcStr = (calcTag.calcExpr + "").Trim();
}
if (e.SummaryProcess == CustomSummaryProcess.Calculate)
{
if (calcStr != "")
{
try
{
List<string> listParam = GetParamValue(calcStr);
foreach (string str in listParam)
{
string filed = str.Replace("{", "").Replace("}", "");
GridColumn tmpgcol = gridView1.Columns[filed];
string filedValue = gridView1.GetRowCellValue(e.RowHandle, tmpgcol).ToString();
if (string.IsNullOrEmpty(filedValue))
filedValue = "0";
if (dicSum.ContainsKey(filed))
{
dicSum[filed] += Math.Round(double.Parse(filedValue), 2, MidpointRounding.AwayFromZero);
}
else
{
dicSum.Add(filed, Math.Round(double.Parse(filedValue), 2, MidpointRounding.AwayFromZero));
}
}
}
catch (Exception ex)
{
//MessageBox.Show("计算公式定义错误:" + calcSource + " >> " + calcExpr + "\n" + ex.Message);
}
}
}
if (e.SummaryProcess == CustomSummaryProcess.Finalize)
{
if (dicSum.Count > 0)
try
{
List<string> listParam = GetParamValue(calcStr);
foreach (string str in listParam)
{
string filed = str.Replace("{", "").Replace("}", "");
string filedValue = dicSum[filed].ToString();
if (string.IsNullOrEmpty(filedValue))
filedValue = "0";
calcStr = calcStr.Replace(str, filedValue + "");
}
calcStr = calcStr.Replace("=", "==").Replace("<>", "!=").Replace("and", "&&").Replace("or", "|");
string result = Evaluator.Eval(calcStr).ToString();
int idataDec = 2;
customSum += Math.Round(double.Parse(result), idataDec, MidpointRounding.AwayFromZero);
}
catch (Exception ex)
{
//MessageBox.Show("计算公式定义错误:" + calcSource + " >> " + calcExpr + "\n" + ex.Message);
}
e.TotalValue = customSum;
}
}
/// <summary>
/// sql转换成代码
/// </summary>
public static string SqlToCode(string str)
{
string result = str;
result = result.Replace("=", "==");
result = result.Replace("<>", "!=");
result = result.Replace("and", "&&");
result = result.Replace("or", "||");
result = result.Replace(">==", ">=");
result = result.Replace("<==", "<=");
return result;
}
void gridView1_RowCellStyle(object sender, RowCellStyleEventArgs e)
{
if (!e.Column.OptionsColumn.AllowEdit && UnAllowEditChangeColor)
{
//System.Drawing.Color color1 = System.Drawing.ColorTranslator.FromHtml("#d0d0d0");
//Color color1 = ColorTranslator.FromHtml("#F0F0F0");
//e.Appearance.BackColor = color1;
//e.Appearance.ForeColor = ColorTranslator.FromHtml("#787878");
}
if (e.RowHandle >= 0)
{
DataRow row = this.gridView.GetDataRow(e.RowHandle);
if (row == null)
return;
//颜色集合
DataTable dt = RowColorCondtion as DataTable;
if (dt == null)
return;
//选择列
string cond = string.Empty;
string color = string.Empty;
string forecolor = string.Empty;
if (dt != null && dt.Rows.Count > 0)
{
foreach (DataRow dr in dt.Rows)
{
Application.DoEvents();
cond = dr["condition"].ToString();
cond = cond.Replace("{COLUMN_NAME}", e.Column.Name.Replace("col", ""));
cond = cond.Replace("{COLUMN_TITLE}", e.Column.Caption);
List<string> condition = GetParamValue(cond);
foreach (string item in condition)
{
string filedName = item.Replace("{", "").Replace("}", "");
if (row.Table.Columns.Contains(filedName))
{
string dataType = row.Table.Columns[filedName].DataType.ToString();
if (!dataType.Equals("decimal"))
cond = cond.Replace(item, row[filedName].ToString());
else
cond = cond.Replace(item, string.IsNullOrWhiteSpace(row[filedName].ToString()) ? "0" : row[filedName].ToString());
}
else
cond = cond.Replace(item, "0");
}
cond = SqlToCode(cond);
color = dr["backcolor"] + "";
forecolor = dr["forcecolor"].ToString() + "";
string obj = Evaluator.Eval(cond) + "";
if (obj.IndexOf("true", StringComparison.OrdinalIgnoreCase) != -1)
{
if (!string.IsNullOrEmpty(color))
{
System.Drawing.Color color1 = System.Drawing.ColorTranslator.FromHtml(color);
e.Appearance.BackColor = color1;
}
if (!string.IsNullOrEmpty(forecolor))
{
System.Drawing.Color foreColor = System.Drawing.ColorTranslator.FromHtml(forecolor);
e.Appearance.ForeColor = foreColor;
}
FontStyle fst = new FontStyle();
if (dr["ifBold"].ToString() == "1")
{
fst = fst | FontStyle.Bold;
}
if (dr["ifItalic"].ToString() == "1")
{
fst = fst | FontStyle.Italic;
}
if (dr["ifStrickOut"].ToString() == "1")
{
fst = fst | FontStyle.Strikeout;
}
if (dr["ifUnderLine"].ToString() == "1")
{
fst = fst | FontStyle.Underline;
}
e.Appearance.Font = new Font(e.Appearance.Font, fst);
}
}
}
}
}
private void gridView1_KeyDown(object sender, System.Windows.Forms.KeyEventArgs e)
{
if (sender != null && e != null)
{
if (e.KeyCode == Keys.Return)
{
if (gridView1.FocusedColumn.VisibleIndex == gridView1.Columns.Count - 1)
{
gridView1.FocusedRowHandle = gridView1.FocusedRowHandle + 1;
gridView1.FocusedColumn = gridView1.Columns[0];
}
else
{
if (EnterOrder == 1)
{
gridView.FocusedRowHandle = gridView.FocusedRowHandle + 1;
}
else
{
gridView1.FocusedColumn = gridView1.Columns[gridView1.FocusedColumn.VisibleIndex + 1];
}
}
}
if (e.Control & e.KeyCode == Keys.C)
{
DevExpress.XtraGrid.Views.Base.GridCell[] selecells = gridView.GetSelectedCells();
if (selecells.Length == 1)
{
object obj = gridView1.GetFocusedRowCellValue(gridView1.FocusedColumn);
if (obj != null)
{
Clipboard.SetDataObject(obj + "");
e.Handled = true;
}
}
else
{
gridView1.CopyToClipboard();
e.Handled = true;
}
}
if (e.Modifiers.CompareTo(Keys.Control) == 0 && e.KeyCode == Keys.V)
{
isCancel = true;
//e.Handled = true;
object _objData = null;
IDataObject dataObj = Clipboard.GetDataObject();
if (dataObj.GetDataPresent(DataFormats.Text))
_objData = dataObj.GetData(DataFormats.Text);
if (_objData != null)
{
string _tempStr = _objData.ToString();
int _rowNumber = 1;
int _pasteRowCount = 1;
string[] _split = { "\r\n" };
string[] _arrayRowStr = _tempStr.Split(_split, StringSplitOptions.None);
if (_arrayRowStr.Length < 1)
return;
DevExpress.XtraGrid.Views.Base.GridCell[] selecells = gridView.GetSelectedCells();
if (selecells != null && selecells.Length > 0)
{
_rowNumber = selecells[0].RowHandle;
if (_arrayRowStr.Length != gridView.SelectedRowsCount)
{
//选择区域与粘贴行数不匹配
}
_pasteRowCount = _arrayRowStr.Length;
for (int i = 0; i < _pasteRowCount; i++)
{
string[] _arrayStr2 = _arrayRowStr[i].Split('\t');
if ((i == _pasteRowCount - 1) && (_arrayRowStr[_pasteRowCount - 1].Replace("\r\n", "").Trim() == ""))
continue;
if (_arrayStr2.Length == 0)
_arrayStr2[0] = _arrayRowStr[i];
//MessageBox.Show(_arrayStr2[0]);
int _colNumber = selecells[0].Column.AbsoluteIndex;
for (int j = 0; j < _arrayStr2.Length; j++)
{
//MessageBox.Show(_arrayStr2[j]);
if ((gridView.OptionsBehavior.Editable == true) && (gridView.Columns[_colNumber].OptionsColumn.AllowEdit))
gridView.SetRowCellValue(_rowNumber, gridView.Columns[_colNumber], _arrayStr2[j]);
_colNumber += 1;
}
_rowNumber += 1;
}
if (ModuleType == 1)
SendKeys.Send("{esc}");
//e.Handled = true;
}
}
}
if (e.Control & e.Shift & e.KeyCode == Keys.C)
{
if ((gridView.OptionsBehavior.Editable == true) && (AddCopyRows == true))
{
DataTable dt = gridView.GridControl.DataSource as DataTable;
clipTable.Rows.Clear();
clipTable = dt.Clone();
foreach (int hnd in gridView.GetSelectedRows())
{
object[] obj = gridView.GetDataRow(hnd).ItemArray;
clipTable.LoadDataRow(obj, true);
}
if (clipTable.Rows.Count > 0)
{
DialogResult dlg = MessageBox.Show("是否复制新增选中的行", "询问", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
//DataTable dt = gridView.GridControl.DataSource as DataTable;
foreach (DataRow dr in clipTable.Rows)
{
DataRow drnew = dt.NewRow();
object[] obj = dr.ItemArray;
//drnew.ItemArray = obj;
for (int i = 0; i < clipTable.Columns.Count; i++)
{
if (!clipTable.Columns[i].ColumnName.ToLower().Equals(ColumnPrefix + "id", StringComparison.OrdinalIgnoreCase))
drnew[i] = dr[i];
}
dt.Rows.Add(drnew);
//dt.LoadDataRow(obj, true);
}
}
}
e.Handled = true;
}
if ((e.KeyCode == Keys.F6) || (e.KeyCode == Keys.F7))
{
GridColumn gc = gridView.FocusedColumn;
if ((gc != null) && (gridView.RowCount > 0) && (gc.OptionsColumn.AllowEdit == true) && (gridView.OptionsBehavior.Editable == true))
{
DevExpress.XtraGrid.Views.Base.GridCell[] selecells = gridView.GetSelectedCells();
if (selecells.Length == 1)
{
if (gridView.FocusedRowHandle < gridView.RowCount)
{
DialogResult dlr = MessageBox.Show("是否替换本列下所有数据为当前单元格数据?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (dlr == DialogResult.Yes)
{
object obj = gridView.GetFocusedRowCellValue(gc);
if (obj != null)
{
int focusedRowHandle = gridView.FocusedRowHandle;
for (int i = focusedRowHandle; i < gridView.RowCount; i++)
{
gridView.FocusedRowHandle = i;
object obj1 = gridView.GetRowCellValue(i, gc);
if (e.KeyCode == Keys.F6)
{
if ((obj1 == null) || (obj1.ToString() == "0") || (obj1.ToString() == ""))
gridView.SetRowCellValue(i, gc, obj);
}
else
gridView.SetRowCellValue(i, gc, obj);
gridView.PostEditor();
}
e.Handled = true;
}
}
}
}
else
{
e.Handled = true;
}
}
}
if ((e.KeyCode == Keys.F8))
{
GridColumn gc = gridView.FocusedColumn;
if ((gc != null) && (gridView.RowCount > 0) && (gc.OptionsColumn.AllowEdit == true) && (gridView.OptionsBehavior.Editable == true))
{
DevExpress.XtraGrid.Views.Base.GridCell[] selecells = gridView.GetSelectedCells();
if (selecells.Length == 1)
{
if (gridView.FocusedRowHandle < gridView.RowCount)
{
DialogResult dlr = MessageBox.Show("是否按顺序生成本列数据?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (dlr == DialogResult.Yes)
{
object obj = gridView.GetFocusedRowCellValue(gc);
long lint = 0;
int ilen = 0;
if ((obj != null) && (Int64.TryParse(obj + "", out lint)))
{
ilen = obj.ToString().Length;
int focusedRowHandle = gridView.FocusedRowHandle;
for (int i = focusedRowHandle; i <= gridView.RowCount; i++)
{
gridView.FocusedRowHandle = i;
string istr = lint.ToString().PadLeft(ilen, '0');
gridView.SetRowCellValue(i, gc, istr);
gridView.PostEditor();
lint++;
}
e.Handled = true;
}
}
}
}
else
{
e.Handled = true;
}
}
}
}
}
private DefaultBoolean GetMergeFlag(DataRow row)
{
if (!row.Table.Columns.Contains("ifMerge"))
return DefaultBoolean.False;
return (row["ifMerge"] + "" == "1") ? DefaultBoolean.True : DefaultBoolean.False;
}
public void SetColumns(string sql)
{
_currentSetColumnType = 1;
gridView.Columns.Clear();
try
{
DataTable dt = SqlHelper.ExecuteDataSet(sql).Tables[0];
ColumnSQL = sql;
dtColumns = dt;
if (OperatorName != "管理员")
{
dt = ResetColumns(dt);
}
isSetColumnWidth = dt.Rows.Count == 0;
for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow row = dt.Rows[i];
GridColumn gridColumn = new GridColumn();
gridColumn.OptionsColumn.AllowMerge = GetMergeFlag(row);
if (gridColumn.OptionsColumn.AllowMerge == DefaultBoolean.True)
gridView.OptionsView.AllowCellMerge = true;
gridColumn.FieldName = row["fieldname"].ToString();
gridColumn.Name = row["fieldname"].ToString();
gridColumn.VisibleIndex = i;
gridColumn.Caption = row["userName"].ToString();
gridColumn.Width = Convert.ToInt32(row["width"]);
gridColumn.Visible = ((Convert.ToInt32(row["width"]) > 0));
gridColumn.OptionsFilter.FilterPopupMode = FilterPopupMode.CheckedList;
gridColumn.OptionsColumn.AllowEdit = false;
gridColumn.OptionsColumn.ReadOnly = false;
string dataFormat = row["DataFormat"] + "";
CommonUtils.DataFormat(gridColumn, row["DataFormat"] + "", 7); // 单据来源明细没有定义列类型,默认按照数字方式格式化
DataColumn dc = dt.Columns["Accuracy"];
if (dc != null)
{
string Accuracy = dt.Rows[i]["Accuracy"] + "";
if (!string.IsNullOrEmpty(Accuracy) && Accuracy != "0")
{
gridColumn.DisplayFormat.FormatType = FormatType.Numeric;
gridColumn.DisplayFormat.FormatString = "F2";
}
}
DataColumn dcIsSum = dt.Columns["isSum"];
if (dcIsSum != null)
{
if (!String.IsNullOrEmpty(row["isSum"] + ""))
{
int isSum = Convert.ToInt32(row["isSum"]);
//处理统计
if (isSum == 1)
{
string defaultFormat = "{0:" + dataFormat + "}";
if (dt.Columns.Contains("sumText") && !string.IsNullOrWhiteSpace(dt.Rows[i]["sumText"] + ""))
defaultFormat = dt.Rows[i]["sumText"] + "";
gridView.OptionsView.ShowFooter = true;
gridColumn.Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Sum, row["fieldname"].ToString(), defaultFormat) });
gridView.GroupSummary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Sum, row["fieldname"].ToString(), null, defaultFormat) });
}
}
}
gridView1.Columns.Add(gridColumn);
}
if (gridView.Columns.Count > 0)
{
GridColumn firstColumn = gridView.Columns[0];
if (firstColumn != null)
{
gridView.OptionsView.ShowFooter = true;
firstColumn.Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Count, firstColumn.FieldName.ToString(), "合计: {0:#,###}行") });
gridView.GroupSummary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Count, firstColumn.FieldName.ToString(), null, "合计: {0:#,###}行") });
}
}
}
catch (Exception)
{
isSetColumnWidth = true;
}
}
/// <summary>
/// 基础数据
/// </summary>
/// <param name="dt"></param>
public void SetColumns2(DataTable dt)
{
_currentSetColumnType = 2;
dtColumns = dt;
dt = ResetColumns(dt);
gridView.Columns.Clear();
for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow row = dt.Rows[i];
GridColumn gridColumn = new GridColumn();
gridColumn.OptionsColumn.AllowMerge = GetMergeFlag(row);
if (gridColumn.OptionsColumn.AllowMerge == DefaultBoolean.True)
gridView.OptionsView.AllowCellMerge = true;
gridColumn.FieldName = row["fieldname"].ToString();
gridColumn.Name = row["fieldname"].ToString();
gridColumn.VisibleIndex = i;
gridColumn.Caption = row["username1"].ToString();
gridColumn.Width = Convert.ToInt32(row["width"]);
gridColumn.OptionsFilter.FilterPopupMode = FilterPopupMode.CheckedList;
int sqltag = Convert.ToInt32(row["fieldsqlTag"]);
if (UnAllowEditChangeColor)
{
if (Convert.ToInt32(row["edit"]) == 1)
{
gridColumn.AppearanceHeader.Options.UseForeColor = true;
gridColumn.AppearanceHeader.ForeColor = ColorTranslator.FromHtml(headerColor);
}
}
if (sqltag == 8)
{
CreatePassword(gridColumn);
}
//备注框自动换行
if (sqltag == 9)
{
GetMemoEdit(gridColumn, gridControl);
}
if (sqltag == 10)
{
gridColumn.Tag = "www";
}
if (sqltag == 11)
{
gridColumn.Tag = "qq";
}
if (sqltag == 20)
{
GetMemoExEdit(gridColumn, gridControl);
}
if (sqltag == 37)
{
InitRichEdit(gridColumn);
}
gridColumn.Visible = ((Convert.ToInt32(row["width"]) > 0));
if (i == 0)
{
gridColumn.OptionsColumn.AllowShowHide = false;
}
string unionFields = row["unionFields"] + "";
string unionValue = row["unionValue"] + "";
//gridColumn.OptionsColumn.ReadOnly = false;
gridColumn.OptionsColumn.AllowEdit = Convert.ToInt32(row["edit"]) != 1;
gridView.Columns.Add(gridColumn);
int fieldsqlTag = Convert.ToInt32(row["fieldsqlTag"]);
gridColumn.Tag = new MyTagModel() { DefaultValue = row["defaultdate"].ToString(), Tag = gridColumn.Tag, calcExpr = row["calcExpr"].ToString(), unionFields = unionFields, unionValue = unionValue, lookupSql = row["fieldsql"] + "", lookupKey = row["fieldsqlid"] + "", lookupValue = row["fieldsqlname"] + "", fieldTypeId = fieldsqlTag };
//if (fieldsqlTag == 1 || fieldsqlTag == 5) {
// GetLookUpEdit(row["fieldsql"].ToString(), row["fieldsqlid"].ToString(), row["fieldsqlname"] + "", row["fieldname"] + "", gridColumn, fieldsqlTag, row["fieldsqlid"].ToString(), row["fieldsqlname"] + "", unionFields, unionValue);
//}
//if (fieldsqlTag == 2 || fieldsqlTag == 6) {
// GetLookUpEdit(row["fieldsql"].ToString(), row["fieldsqlname"].ToString(), row["fieldsqlid"] + "", row["fieldname"] + "", gridColumn, fieldsqlTag, row["fieldsqlid"].ToString(), row["fieldsqlname"] + "", unionFields, unionValue);
//}
int fieldTypeId = Convert.ToInt32(row["fieldsqlTag"]);
string lookupSql = row["fieldsql"] + "";
string lookupKeyField = row["fieldsqlid"] + "";
string lookupResult = row["fieldsqlname"] + "";
string fieldName = row["fieldName"] + "";
if ((fieldsqlTag == 1) || (fieldsqlTag == 3))
{
GetLookUpEdit(lookupSql, lookupKeyField, lookupResult, fieldName, gridColumn, fieldTypeId, gridControl);
}
if ((fieldsqlTag == 2) || (fieldsqlTag == 23))
{
GetComboBox(lookupSql, lookupKeyField, lookupResult, fieldName, gridColumn, fieldTypeId);
}
if ((fieldsqlTag == 5) || (fieldsqlTag == 15))
{
GetLookUpEdit(row["fieldsql"].ToString(), row["fieldsqlid"].ToString(), row["fieldsqlname"] + "", row["fieldname"] + "", gridColumn, fieldsqlTag, row["fieldsqlid"].ToString(), row["fieldsqlname"] + "", unionFields, unionValue);
}
if ((fieldsqlTag == 6) || (fieldsqlTag == 16))
{
GetLookUpEdit(row["fieldsql"].ToString(), row["fieldsqlname"].ToString(), row["fieldsqlid"] + "", row["fieldname"] + "", gridColumn, fieldsqlTag, row["fieldsqlid"].ToString(), row["fieldsqlname"] + "", unionFields, unionValue);
}
if (fieldsqlTag == 96)
{
GetProgressBar(gridColumn);
}
if (fieldsqlTag == 17)
{
GetCheckColumn(gridColumn);
}
if (fieldsqlTag == 99)
{
InitPicEdit(gridColumn);
}
if (fieldsqlTag == 18 || fieldsqlTag == 19)
{
GetCheckComboColumn(row["fieldsql"].ToString(), row["fieldsqlid"] + "", row["fieldsqlname"].ToString(), row["fieldname"] + "", gridColumn, fieldsqlTag, row["fieldsqlid"].ToString(), row["fieldsqlname"] + "", unionFields, unionValue);
}
if (fieldsqlTag == 10)
{
GetHyperLink(gridColumn);
}
// 日期时间控件
if (fieldsqlTag == 4 ||
fieldsqlTag == 44 ||
fieldsqlTag == 444)
{
CreateDateTime(gridColumn, fieldsqlTag);
}
if (fieldsqlTag == ControlType.LabCalcText)
{
CreateCalc(gridColumn);
}
if (fieldsqlTag == 4444 ||
fieldsqlTag == 44444)
{
CreateTime(gridColumn, fieldsqlTag);
}
if (fieldsqlTag == 13 || fieldsqlTag == 14 || fieldsqlTag == 34)
{
CreateButtonEdit(gridColumn, row);
}
if (fieldTypeId == 33)
{
InitMutilEdit(gridColumn, row["fieldsql"].ToString(), lookupKeyField, lookupResult, fieldTypeId);
}
string dataFormat = row["DataFormat"] + "";
CommonUtils.DataFormat(gridColumn, dataFormat, fieldsqlTag);
DataColumn dc = dt.Columns["Accuracy"];
if (dc != null)
{
string Accuracy = dt.Rows[i]["Accuracy"] + "";
if (!string.IsNullOrEmpty(Accuracy) && Accuracy != "0")
{
gridColumn.DisplayFormat.FormatType = FormatType.Numeric;
gridColumn.DisplayFormat.FormatString = "F2";
}
}
DataColumn dcIsSum = dt.Columns["isSum"];
if (dcIsSum != null)
{
if (!String.IsNullOrEmpty(row["isSum"] + ""))
{
int isSum = Convert.ToInt32(row["isSum"]);
//处理统计
if (isSum == 1)
{
gridView.OptionsView.ShowFooter = true;
//if ((row["calcExpr"] + "").IndexOf("/{")==-1)
//{
string defaultFormat = "{0:" + dataFormat + "}";
if (dt.Columns.Contains("sumText") && !string.IsNullOrWhiteSpace(dt.Rows[i]["sumText"] + ""))
defaultFormat = dt.Rows[i]["sumText"] + "";
gridColumn.Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Sum, row["fieldname"].ToString(), defaultFormat) });
gridView.GroupSummary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Sum, row["fieldname"].ToString(), null, defaultFormat) });
//}
//else
//{
// gridColumn.Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Custom, row["fieldname"].ToString(), "{0:" + dataFormat + "}") });
// gridView.GroupSummary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Custom, row["fieldname"].ToString(), null, "{0:" + dataFormat + "}") });
//}
}
}
}
}
if (gridView.Columns.Count > 0)
{
GridColumn firstColumn = gridView.Columns[0];
if (firstColumn != null)
{
gridView.OptionsView.ShowFooter = true;
firstColumn.Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Count, firstColumn.FieldName.ToString(), "合计: {0:#,###}行") });
gridView.GroupSummary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Count, firstColumn.FieldName.ToString(), null, "合计: {0:#,###}行") });
}
}
}
private void InitMutilEdit(GridColumn gridColumn,string sql,string key,string value,int tagID)
{
FrmMain frmMain = new FrmMain();
String SQL = sql;
SQL = GetDefaultValue(SQL, ERPInfo.Instance.EmployeeId.ToString(), ERPInfo.Instance.EmployeeName);
Dictionary<string, string> Columns = new Dictionary<string, string>();
Columns.Add(key, "编码");
Columns.Add(value, "名称");
if (SQL.IndexOf("Remark", StringComparison.OrdinalIgnoreCase) != -1)
Columns.Add("Remark", "备注");
frmMain.IsMultiple = true;
frmMain.Columns = Columns;
int fieldsqlTag = tagID;
frmMain.ValueField = key;
frmMain.TextField = value;
frmMain.IsText = fieldsqlTag;
frmMain.sourceSQL = SQL;
frmMain.SQL = SQL;
string tmpsql = SQL;
tmpsql = Regex.Replace(SQL, "#[^##]+#", " 1=1 ");
DataTable dtb = SqlHelper.ExecuteDataSet(tmpsql).Tables[0];
//Dictionary<string, string> lookupDt = new Dictionary<string, string>();
//foreach (DataRow item in dtb.Rows)
//{
// //由于数据问题相同键值
// if (lookupDt.ContainsKey(item[frmMain.ValueField] + "")) continue;
// lookupDt.Add(item[frmMain.ValueField] + "", item[frmMain.TextField] + "");
//}
//lookupDatas.Add(gridColumn.FieldName, lookupDt);
RepositoryItemCheckedComboBoxEdit btnEdit = new RepositoryItemCheckedComboBoxEdit();
btnEdit.NullText = "";
btnEdit.PopupBorderStyle = PopupBorderStyles.Flat;
btnEdit.AllowNullInput = DefaultBoolean.False;
btnEdit.DisplayMember = frmMain.TextField;
btnEdit.AutoHeight = false;
btnEdit.SeparatorChar = ',';
btnEdit.ValueMember = fieldsqlTag == ControlType.LabMultiSelectValue ||
fieldsqlTag == ControlType.LabMultiSelectValueParam ? frmMain.ValueField : frmMain.TextField;
btnEdit.DataSource = SqlHelper.ExecuteDataTable(tmpsql);
btnEdit.Buttons[0].Visible = false;
btnEdit.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Ellipsis) });
btnEdit.Name = "btnEdit";
btnEdit.Tag = fieldsqlTag;
btnEdit.Buttons[1].Tag = frmMain;
//btnEdit.Tag = SQL;
btnEdit.ButtonClick += new DevExpress.XtraEditors.Controls.ButtonPressedEventHandler(this.OnButtonEditClick);
gridControl.RepositoryItems.Add(btnEdit);
gridColumn.OptionsColumn.ReadOnly = true;
gridColumn.ColumnEdit = btnEdit;
}
public DataTable SetColumns3(string sql)
{
_currentSetColumnType = 3;
gridView.Columns.Clear();
DataTable dt = SqlHelper.ExecuteDataSet(sql).Tables[0];
ColumnSQL = sql;
dtColumns = dt;
dt = ResetColumns(dt);
for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow row = dt.Rows[i];
GridColumn gridColumn = new GridColumn();
gridColumn.OptionsColumn.AllowMerge = GetMergeFlag(row);
if (gridColumn.OptionsColumn.AllowMerge == DefaultBoolean.True)
gridView.OptionsView.AllowCellMerge = true;
gridColumn.FieldName = row["fieldname"].ToString();
gridColumn.Name = row["fieldname"].ToString();
gridColumn.VisibleIndex = i;
gridColumn.Caption = row["userName"].ToString();
gridColumn.Width = Convert.ToInt32(row["width"]);
gridColumn.OptionsFilter.FilterPopupMode = FilterPopupMode.CheckedList;
gridColumn.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
gridColumn.Visible = ((Convert.ToInt32(row["width"]) > 0));
string dataFormat = row["DataFormat"] + "";
object obj = dt.Columns["isedited"];
if (obj != null && Convert.ToInt32(row["isedited"] + "" == "" ? "0" : row["isedited"]) == 1)
{
gridColumn.OptionsColumn.AllowEdit = false;
gridColumn.OptionsColumn.ReadOnly = true;
if (UnAllowEditChangeColor)
{
gridColumn.AppearanceHeader.Options.UseForeColor = true;
gridColumn.AppearanceHeader.ForeColor = ColorTranslator.FromHtml(headerColor);
}
}
if (dt.Columns.Contains("isSum"))
{
int isSum = string.IsNullOrEmpty(row["isSum"] + "") ? 0 : Convert.ToInt32(row["isSum"]);
//处理统计
if (isSum == 1)
{
string defaultFormat = "{0:" + dataFormat + "}";
if (dt.Columns.Contains("sumText") && !string.IsNullOrWhiteSpace(dt.Rows[i]["sumText"] + ""))
defaultFormat = dt.Rows[i]["sumText"] + "";
gridView.OptionsView.ShowFooter = true;
//gridColumn.Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Sum, row["fieldname"].ToString(), "{0}") });
//gridView.GroupSummary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Sum, row["fieldname"].ToString(), null, "") });
//if ((row["calcExpr"] + "").IndexOf("/{") == -1)
//{
gridColumn.Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Sum, row["fieldname"].ToString(), defaultFormat) });
gridView.GroupSummary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Sum, row["fieldname"].ToString(), null, defaultFormat) });
//}
//else
//{
// gridColumn.Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Custom, row["fieldname"].ToString(), "{0:" + dataFormat + "}") });
// gridView.GroupSummary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Custom, row["fieldname"].ToString(), null, "{0:" + dataFormat + "}") });
//}
}
}
gridView.Columns.Add(gridColumn);
int fieldTypeId = Convert.ToInt32(row["fieldTypeId"]);
string lookupSql = row["lookupSql"] + "";
string lookupKeyField = row["lookupKeyField"] + "";
string lookupResult = row["lookupResult"] + "";
string fieldName = row["fieldName"] + "";
string unionFields = row["unionFields"] + "";
string unionValue = row["unionValue"] + "";
//if (fieldTypeId == 1 || fieldTypeId == 5 || fieldTypeId == 15)
//{
// GetLookUpEdit(lookupSql, lookupKeyField, lookupResult, fieldName, gridColumn, fieldTypeId, lookupKeyField, lookupResult, unionFields, unionValue);
//}
//if (fieldTypeId == 2 || fieldTypeId == 6 || fieldTypeId == 16)
//{
// GetLookUpEdit(lookupSql, lookupResult, lookupKeyField, fieldName, gridColumn, fieldTypeId, lookupKeyField, lookupResult, unionFields, unionValue);
//}
if (fieldTypeId == 1)
{
GetLookUpEdit(lookupSql, lookupKeyField, lookupResult, fieldName, gridColumn, fieldTypeId, gridControl);
}
if ((fieldTypeId == 2) || (fieldTypeId == 23))
{
GetComboBox(lookupSql, lookupKeyField, lookupResult, fieldName, gridColumn, fieldTypeId);
}
if (fieldTypeId == 5 || fieldTypeId == 15)
{
GetLookUpEdit(lookupSql, lookupKeyField, lookupResult, fieldName, gridColumn, fieldTypeId, lookupKeyField, lookupResult, unionFields, unionValue);
}
if (fieldTypeId == 6 || fieldTypeId == 16)
{
GetLookUpEdit(lookupSql, lookupResult, lookupKeyField, fieldName, gridColumn, fieldTypeId, lookupKeyField, lookupResult, unionFields, unionValue);
}
if (fieldTypeId == 96)
{
GetProgressBar(gridColumn);
}
if (fieldTypeId == 17)
{
GetCheckColumn(gridColumn);
}
if (fieldTypeId == 18 || fieldTypeId == 19)
{
GetCheckComboColumn(lookupSql, lookupKeyField, lookupResult, fieldName, gridColumn, fieldTypeId, lookupKeyField, lookupResult, unionFields, unionValue);
}
// 日期时间控件
if (fieldTypeId == 4 ||
fieldTypeId == 44 ||
fieldTypeId == 444)
{
CreateDateTime(gridColumn, fieldTypeId);
}
if (fieldTypeId == ControlType.LabCalcText)
{
CreateCalc(gridColumn);
}
if (fieldTypeId == 4444 ||
fieldTypeId == 44444)
{
CreateTime(gridColumn, fieldTypeId);
}
if (fieldTypeId == 13 || fieldTypeId == 14)
{
CreateButtonEdit2(gridColumn, row);
}
if (fieldTypeId == 33)
{
InitMutilEdit(gridColumn, row);
}
//QQ和网址
if (fieldTypeId == 10)
{
GetHyperLink(gridColumn);
gridColumn.Tag = "www";
}
if (fieldTypeId == 11)
{
gridColumn.Tag = "qq";
}
//if (fieldTypeId == ControlType.LabMultiSelectValue)
//{
// GetLookUpEdit(lookupSql, lookupKeyField, lookupResult, fieldName, gridColumn, fieldTypeId, gridControl);
//}
if (fieldTypeId == 37)
{
InitRichEdit(gridColumn);
}
//备注框自动换行
if (fieldTypeId == 9)
{
GetMemoEdit(gridColumn, gridControl);
}
if (fieldTypeId == 20)
{
GetMemoExEdit(gridColumn, gridControl);
}
if (fieldTypeId == 99)
{
InitPicEdit(gridColumn);
}
gridColumn.Tag = new MyTagModel() { DefaultValue = row["DefaultValue"].ToString(), Tag = gridColumn.Tag, calcExpr = row["calcExpr"].ToString(), unionFields = unionFields, unionValue = unionValue, lookupSql = lookupSql, lookupKey = lookupKeyField, lookupValue = lookupResult, fieldTypeId = fieldTypeId };
CommonUtils.DataFormat(gridColumn, row["DataFormat"] + "", fieldTypeId);
}
if (gridView.Columns.Count > 0)
{
GridColumn firstColumn = gridView.Columns[0];
if (firstColumn != null)
{
gridView.OptionsView.ShowFooter = true;
firstColumn.Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Count, firstColumn.FieldName.ToString(), "合计: {0:#,###}行") });
gridView.GroupSummary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Count, firstColumn.FieldName.ToString(), null, "合计: {0:#,###}行") });
}
}
return dt;
}
/// <summary>
/// <para>说明:表格图片控件</para>
/// <para>创建人:姜棚</para>
/// <para>创建日期:2018-08-02 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
private void InitPicEdit(GridColumn gridColumn)
{
RepositoryItemPictureEdit picEdit = new RepositoryItemPictureEdit();
picEdit.AutoHeight = true;
picEdit.BestFitWidth = 16;
picEdit.CustomHeight = 16;
gridColumn.ColumnEdit = picEdit;
}
private void InitMutilEdit(GridColumn gridColumn, DataRow row)
{
FrmMain frmMain = new FrmMain();
String SQL = row["lookupSql"].ToString();
SQL = GetDefaultValue(SQL, ERPInfo.Instance.EmployeeId.ToString(), ERPInfo.Instance.EmployeeName);
Dictionary<string, string> Columns = new Dictionary<string, string>();
Columns.Add(row["lookupKeyField"].ToString(), "编码");
Columns.Add(row["lookupResult"].ToString(), "名称");
if (SQL.IndexOf("Remark", StringComparison.OrdinalIgnoreCase) != -1)
Columns.Add("Remark", "备注");
frmMain.IsMultiple = true;
frmMain.Columns = Columns;
int fieldsqlTag = Convert.ToInt32(row["fieldTypeId"]);
frmMain.ValueField = row["lookupKeyField"] + "";
frmMain.TextField = row["lookupResult"] + "";
frmMain.IsText = fieldsqlTag;
frmMain.sourceSQL = SQL;
frmMain.SQL = SQL;
string tmpsql = SQL;
tmpsql = Regex.Replace(SQL, "#[^##]+#", " 1=1 ");
DataTable dtb = SqlHelper.ExecuteDataSet(tmpsql).Tables[0];
//Dictionary<string, string> lookupDt = new Dictionary<string, string>();
//foreach (DataRow item in dtb.Rows)
//{
// //由于数据问题相同键值
// if (lookupDt.ContainsKey(item[frmMain.ValueField] + "")) continue;
// lookupDt.Add(item[frmMain.ValueField] + "", item[frmMain.TextField] + "");
//}
//lookupDatas.Add(gridColumn.FieldName, lookupDt);
RepositoryItemCheckedComboBoxEdit btnEdit = new RepositoryItemCheckedComboBoxEdit();
btnEdit.NullText = "";
btnEdit.PopupBorderStyle = PopupBorderStyles.Flat;
btnEdit.AllowNullInput = DefaultBoolean.False;
btnEdit.DisplayMember = frmMain.TextField;
btnEdit.AutoHeight = false;
btnEdit.SeparatorChar = ',';
btnEdit.ValueMember = fieldsqlTag == ControlType.LabMultiSelectValue ||
fieldsqlTag == ControlType.LabMultiSelectValueParam ? frmMain.ValueField : frmMain.TextField;
btnEdit.DataSource = SqlHelper.ExecuteDataTable(tmpsql);
btnEdit.Buttons[0].Visible = false;
btnEdit.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Ellipsis) });
btnEdit.Name = "btnEdit";
btnEdit.Tag = fieldsqlTag;
btnEdit.Buttons[1].Tag = frmMain;
//btnEdit.Tag = SQL;
btnEdit.ButtonClick += new DevExpress.XtraEditors.Controls.ButtonPressedEventHandler(this.OnButtonEditClick);
gridControl.RepositoryItems.Add(btnEdit);
gridColumn.OptionsColumn.ReadOnly = true;
gridColumn.ColumnEdit = btnEdit;
}
protected void OnButtonEditClick(object sender, ButtonPressedEventArgs e)
{
CheckedComboBoxEdit btnEdit = (CheckedComboBoxEdit)sender;
FrmMain frmMain = e.Button.Tag as FrmMain;
if (frmMain.IsText == ControlType.LabMultiSelectValue || frmMain.IsText == ControlType.LabMultiSelectValueParam)
frmMain.ReturnValue = btnEdit.EditValue + "";
else
frmMain.ReturnText = btnEdit.Text;
var focusRow = gridView.GetDataRow(gridView.FocusedRowHandle);
if (focusRow != null)
{
string tmpsql = frmMain.sourceSQL + "";
tmpsql = tmpsql.Replace("#", "").Replace("#", "");
var fieldParams = GetParamValue(tmpsql);
//从单据头取值
if (pnlMain != null)
{
for (int i = 0; i < fieldParams.Count; i++)
{
string fieldName = fieldParams[i].Replace("{", "").Replace("}", "");
Control[] ctl = pnlMain.Controls.Find("txt_" + fieldName, true);
if ((ctl != null) && (ctl.Length > 0))
{
string fieldValue = GetControlText(ctl[0]);
tmpsql = tmpsql.Replace(fieldParams[i], fieldValue);
}
}
}
//从选中行取值
fieldParams = GetParamValue(tmpsql);
for (int i = 0; i < fieldParams.Count; i++)
{
string fieldName = fieldParams[i].Replace("{", "").Replace("}", "");
string fieldValue = focusRow[fieldName] + "";
tmpsql = tmpsql.Replace(fieldParams[i], fieldValue);
}
frmMain.SQL = tmpsql;
}
DialogResult dr = frmMain.ShowDialog();
if (dr == DialogResult.OK)
{
btnEdit.EditValue = frmMain.ReturnValue;
}
}
/// <summary>
/// 初始化富文本控件
/// </summary>
private void InitRichEdit(GridColumn gridColumn)
{
gridColumn.AppearanceCell.Options.UseFont = true;
gridColumn.AppearanceCell.Font = new Font("宋体", 15f);
RepositoryItemRichTextEdit richEdit = new RepositoryItemRichTextEdit();
richEdit.Appearance.Font = new Font("宋体", 15f);
gridControl.RepositoryItems.Add(richEdit);
gridColumn.ColumnEdit = richEdit;
}
private void CreateButtonEdit2(GridColumn gridColumn, DataRow row)
{
FrmMain frmMain = new FrmMain();
String SQL = row["lookupSql"].ToString();
SQL = GetDefaultValue(SQL, ERPInfo.Instance.EmployeeId.ToString(), ERPInfo.Instance.EmployeeName);
Dictionary<string, string> Columns = new Dictionary<string, string>();
Columns.Add(row["lookupKeyField"].ToString(), "编码");
Columns.Add(row["lookupResult"].ToString(), "名称");
if (SQL.IndexOf("Remark", StringComparison.OrdinalIgnoreCase) != -1)
Columns.Add("Remark", "备注");
frmMain.IsMultiple = true;
frmMain.Columns = Columns;
int fieldsqlTag = Convert.ToInt32(row["fieldTypeId"]);
frmMain.ValueField = row["lookupKeyField"] + "";
frmMain.TextField = row["lookupResult"] + "";
frmMain.IsText = fieldsqlTag;
frmMain.sourceSQL = SQL;
frmMain.SQL = SQL;
string tmpsql = SQL;
tmpsql = Regex.Replace(SQL, "#[^##]+#", " 1=1 ");
DataTable dtb = SqlHelper.ExecuteDataSet(tmpsql).Tables[0];
Dictionary<string, string> lookupDt = new Dictionary<string, string>();
foreach (DataRow item in dtb.Rows)
{
//由于数据问题相同键值
if (lookupDt.ContainsKey(item[frmMain.ValueField] + "")) continue;
lookupDt.Add(item[frmMain.ValueField] + "", item[frmMain.TextField] + "");
}
lookupDatas.Add(gridColumn.FieldName, lookupDt);
RepositoryItemButtonEdit btnEdit = new RepositoryItemButtonEdit();
btnEdit.AutoHeight = false;
btnEdit.Buttons[0].Tag = frmMain;
btnEdit.Name = "btnEdit";
btnEdit.Tag = fieldsqlTag;
//btnEdit.Tag = SQL;
btnEdit.ButtonClick += new DevExpress.XtraEditors.Controls.ButtonPressedEventHandler(this.btnEdit_ButtonClick);
gridControl.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] { btnEdit });
gridColumn.OptionsColumn.ReadOnly = true;
gridColumn.ColumnEdit = btnEdit;
}
private void CreateDateTime(GridColumn gridColumn, int fieldsqlTag)
{
RepositoryItemDateEdit dateEdit = new RepositoryItemDateEdit();
dateEdit.DisplayFormat.FormatString = dateEdit.EditFormat.FormatString = dateEdit.Mask.EditMask = DateFormatType.GetFormatValue(fieldsqlTag);
dateEdit.DisplayFormat.FormatType = dateEdit.EditFormat.FormatType = DevExpress.Utils.FormatType.Custom;
dateEdit.Closed += new ClosedEventHandler(dateEdit_Closed);
gridControl.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] { dateEdit });
gridColumn.ColumnEdit = dateEdit;
}
private void CreateTime(GridColumn gridColumn, int fieldsqlTag)
{
RepositoryItemTimeEdit timeEdit = new RepositoryItemTimeEdit();
timeEdit.DisplayFormat.FormatString = timeEdit.EditFormat.FormatString = timeEdit.Mask.EditMask = DateFormatType.GetFormatValue(fieldsqlTag);
timeEdit.DisplayFormat.FormatType = timeEdit.EditFormat.FormatType = DevExpress.Utils.FormatType.Custom;
gridControl.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] { timeEdit });
gridColumn.ColumnEdit = timeEdit;
}
/// <summary>
/// 计算器
/// </summary>
/// <param name="gridColumn"></param>
private void CreateCalc(GridColumn gridColumn)
{
RepositoryItemCalcEdit calcEdit = new RepositoryItemCalcEdit();
calcEdit.AllowMouseWheel = false;
gridColumn.ColumnEdit = calcEdit;
}
private void CreatePassword(GridColumn gridColumn)
{
RepositoryItemTextEdit passEdit = new RepositoryItemTextEdit();
passEdit.UseSystemPasswordChar = true;
passEdit.PasswordChar = '*';
gridColumn.ColumnEdit = passEdit;
}
private void dateEdit_Closed(object sender, ClosedEventArgs e)
{
if (sender is DateEdit)
{
DateEdit dateEdit = (sender as DateEdit);
string dateFormatType = dateEdit.Properties.DisplayFormat.FormatString;
if (!string.IsNullOrEmpty(dateEdit.SelectedText))
{
dateEdit.EditValue = dateEdit.DateTime.ToString(dateFormatType);
}
}
}
#region 智能搜索框事件处理
/// <summary>
/// 取指定组件值
/// </summary>
/// <param name="parent"></param>
/// <param name="list"></param>
public static string GetControlText(Control control)
{
if (control == null)
return "";
if (control.Tag == null)
{
return control.Text;
}
ControlModelTag cmTag = control.Tag as ControlModelTag;
if (cmTag.fieldTypeId == ControlType.LabAutoSeacherText)
{
return control.Text;
}
else if ((cmTag.fieldTypeId == ControlType.LabAutoSeacherValue) ||
(cmTag.fieldTypeId == ControlType.LabComboxValueParam))
{
AutoSearcher te = control as AutoSearcher;
return te.ReturnValue.ToString();
}
else if (cmTag.fieldTypeId == ControlType.LabMultiSelectValue)
{
LabelLookUp lookup = control as LabelLookUp;
return lookup.ReturnValue;
}
else if (cmTag.fieldTypeId == ControlType.LabComboxValue)
{
LabelComboxEx Cb = control as LabelComboxEx;
return Cb.getComboBox.SelectedValue + "";
}
else if (cmTag.fieldTypeId == ControlType.LabComboxText)
{
LabelComboxEx Cb = control as LabelComboxEx;
return Cb.getComboBox.Text;
}
else if (cmTag.fieldTypeId == ControlType.LabDate ||
cmTag.fieldTypeId == ControlType.LabDateTime ||
cmTag.fieldTypeId == ControlType.LabDateTimeShort ||
cmTag.fieldTypeId == ControlType.LabTime ||
cmTag.fieldTypeId == ControlType.LabShortTime)
{
LabelDateEx Cb = control as LabelDateEx;
return Cb.GetDateTimePicker.Value.ToString("yyyy-MM-dd HH:mm:ss");
}
else if (cmTag.fieldTypeId == ControlType.LabTextInt)
{
if ((control.Text.Trim() == ""))
return "0";
else
return control.Text;
}
else
{
if (cmTag.fieldTypeId != 99)
{
return control.Text;
}
}
return "0";
}
/// <summary>
/// 动态加载数据源
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lookUp_QueryPopUp(object sender, CancelEventArgs e)
{
if (sender is SearchLookUpEdit)
{
var focusRow = gridView.GetDataRow(gridView.FocusedRowHandle);
if (true)
{
SearchLookUpEdit edit = (sender as SearchLookUpEdit);
LookUpTag lookUpTag = edit.Properties.Tag as LookUpTag;
if (lookUpTag != null && !string.IsNullOrEmpty(lookUpTag.Sql))
{
string sqlValue = lookUpTag.Sql.Replace("#", "").Replace("#", "");
var fieldParams = GetParamValue(sqlValue);
//从单据头取值
if (pnlMain != null)
{
for (int i = 0; i < fieldParams.Count; i++)
{
string fieldName = fieldParams[i].Replace("{", "").Replace("}", "");
Control[] ctl = pnlMain.Controls.Find("txt_" + fieldName, true);
if ((ctl != null) && (ctl.Length > 0))
{
string fieldValue = GetControlText(ctl[0]);
sqlValue = sqlValue.Replace(fieldParams[i], fieldValue);
}
}
}
//从选中行取值
if (focusRow != null)
{
fieldParams = GetParamValue(sqlValue);
for (int i = 0; i < fieldParams.Count; i++)
{
string fieldName = fieldParams[i].Replace("{", "").Replace("}", "");
fieldName = fieldName.Replace("&", "");
if (focusRow.Table.Columns.Contains(fieldName))
{
string fieldValue = focusRow[fieldName] + "";
sqlValue = sqlValue.Replace(fieldParams[i], fieldValue);
}
}
}
//MessageBox.Show(sqlValue);
DataTable dtTable = SqlHelper.ExecuteDataSet(sqlValue).Tables[0];
edit.Properties.DataSource = dtTable;
}
}
}
}
/// <summary>
/// 关联搜索
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void lookUp_EditValueChanged(object sender, EventArgs e)
{
return;
if (sender is SearchLookUpEdit)
{
SearchLookUpEdit edit = (sender as SearchLookUpEdit);
LookUpTag lookUpTag = edit.Properties.Tag as LookUpTag;
var focusRow = gridView.GetDataRow(gridView.FocusedRowHandle);
if (focusRow != null && lookUpTag != null)
{
string columnName = lookUpTag.ColumnName;
string unionFields = lookUpTag.unionFields;
string unionValue = lookUpTag.unionValue;
string valueMember = lookUpTag.ValueMember;
string displayMember = lookUpTag.DisplayMember;
unionValue = ReqSqlParam(unionValue, ERPInfo.Instance.EmployeeId.ToString(), ERPInfo.Instance.EmployeeName);
string cellValue = string.IsNullOrEmpty(edit.EditValue + "") ? "" : edit.EditValue.ToString();
unionValue = unionValue.Replace("{" + columnName + "}", cellValue);
var fieldParams = GetParamValue(unionValue);
for (int i = 0; i < fieldParams.Count; i++)
{
string fieldName = fieldParams[i].Replace("{", "").Replace("}", "");
string fieldValue = focusRow[fieldName] + "";
unionValue = unionValue.Replace(fieldParams[i], fieldValue);
}
DataTable dtTable = SqlHelper.ExecuteDataSet(unionValue).Tables[0];
if (dtTable.Rows.Count > 0)
{
DataRow row = dtTable.Rows[0];
string[] unionFieldSplit = unionFields.Split(',');
for (int i = 0; i < unionFieldSplit.Count(); i++)
{
string fieldName = unionFieldSplit[i];
gridView.SetRowCellValue(gridView.FocusedRowHandle, gridView.Columns[fieldName], row[fieldName]);
}
}
else
{
string[] unionFieldSplit = unionFields.Split(',');
for (int i = 0; i < unionFieldSplit.Count(); i++)
{
string fieldName = unionFieldSplit[i];
gridView.SetRowCellValue(gridView.FocusedRowHandle, gridView.Columns[fieldName], null);
}
}
}
}
}
#endregion
private void CreateButtonEdit(GridColumn gridColumn, DataRow row)
{
FrmMain frmMain = new FrmMain();
String SQL = row["fieldsql"].ToString();
SQL = GetDefaultValue(SQL, ERPInfo.Instance.EmployeeId.ToString(), ERPInfo.Instance.EmployeeName);
Dictionary<string, string> Columns = new Dictionary<string, string>();
Columns.Add(row["fieldsqlid"].ToString(), "编码");
Columns.Add(row["fieldsqlname"].ToString(), "名称");
if (SQL.IndexOf("Remark", StringComparison.OrdinalIgnoreCase) != -1)
Columns.Add("Remark", "备注");
frmMain.IsMultiple = true;
frmMain.Columns = Columns;
int fieldsqlTag = Convert.ToInt32(row["fieldsqlTag"]);
frmMain.ValueField = row["fieldsqlid"] + "";
frmMain.TextField = row["fieldsqlname"] + "";
frmMain.IsText = fieldsqlTag;
frmMain.SQL = SQL;
frmMain.sourceSQL = SQL;
// 多选
if ((fieldsqlTag == 33 || fieldsqlTag == 34) && SQL.Contains("#"))
{
SQL = Regex.Replace(SQL, "#[^##]+#", " 1<>1 ");
}
DataTable dtb = SqlHelper.ExecuteDataSet(SQL).Tables[0];
if (!lookupDatas.ContainsKey(gridColumn.FieldName))
{
lookupTables.Add(gridColumn.FieldName, dtb);
}
Dictionary<string, string> lookupDt = new Dictionary<string, string>();
foreach (DataRow item in dtb.Rows)
{
lookupDt.Add(item[frmMain.ValueField] + "", item[frmMain.TextField] + "");
}
if (!lookupDatas.ContainsKey(gridColumn.FieldName))
{
lookupDatas.Add(gridColumn.FieldName, lookupDt);
}
RepositoryItemButtonEdit btnEdit = new RepositoryItemButtonEdit();
btnEdit.AutoHeight = false;
btnEdit.Buttons[0].Tag = frmMain;
btnEdit.Name = "btnEdit";
btnEdit.Tag = fieldsqlTag;
btnEdit.ButtonClick += new DevExpress.XtraEditors.Controls.ButtonPressedEventHandler(this.btnEdit_ButtonClick);
gridControl.RepositoryItems.AddRange(new DevExpress.XtraEditors.Repository.RepositoryItem[] { btnEdit });
gridColumn.OptionsColumn.ReadOnly = true;
gridColumn.ColumnEdit = btnEdit;
}
void btnEdit_ButtonClick(object sender, ButtonPressedEventArgs e)
{
ButtonEdit btnEdit = (ButtonEdit)sender;
FrmMain frmMain = (FrmMain)e.Button.Tag;
if (frmMain.IsText == 13 || frmMain.IsText == 33)
{
frmMain.ReturnValue = btnEdit.Text;
}
else
{
frmMain.ReturnText = btnEdit.Text;
}
var focusRow = gridView.GetDataRow(gridView.FocusedRowHandle);
if (focusRow != null)
{
string tmpsql = frmMain.sourceSQL + "";
tmpsql = tmpsql.Replace("#", "").Replace("#", "");
var fieldParams = GetParamValue(tmpsql);
//从单据头取值
if (pnlMain != null)
{
for (int i = 0; i < fieldParams.Count; i++)
{
string fieldName = fieldParams[i].Replace("{", "").Replace("}", "");
Control[] ctl = pnlMain.Controls.Find("txt_" + fieldName, true);
if ((ctl != null) && (ctl.Length > 0))
{
string fieldValue = GetControlText(ctl[0]);
tmpsql = tmpsql.Replace(fieldParams[i], fieldValue);
}
}
}
//从选中行取值
fieldParams = GetParamValue(tmpsql);
for (int i = 0; i < fieldParams.Count; i++)
{
string fieldName = fieldParams[i].Replace("{", "").Replace("}", "");
string fieldValue = focusRow[fieldName] + "";
tmpsql = tmpsql.Replace(fieldParams[i], fieldValue);
}
frmMain.SQL = tmpsql;
}
DialogResult dr = frmMain.ShowDialog();
if (dr == DialogResult.OK)
{
String value = string.Empty;
if (frmMain.IsText == 13 || frmMain.IsText == 33)
{
value = frmMain.ReturnValue;
}
else
{
value = frmMain.ReturnText;
}
btnEdit.Text = value;
}
}
//private void GetComboBox(string sql, string key, string value, string colum, GridColumn gc, int fieldsqlTag) {
// RepositoryItemComboBox combobox = new RepositoryItemComboBox();
// sql = GetDefaultValue(sql, ERPInfo.Instance.EmployeeId.ToString(), ERPInfo.Instance.EmployeeName);
// DataTable dt = SqlHelper.ExecuteDataSet(sql).Tables[0];
// foreach (DataRow item in dt.Rows)
// combobox.Items.Add(item[value]);
// gc.ColumnEdit = combobox;
//}
#region 获取参数
public static List<string> GetParamValue(string param)
{
string SqlParamRegex = "{([^{])+}";
List<string> list = new List<string>();
Regex regex = new Regex(SqlParamRegex);
MatchCollection mcs = regex.Matches(param);
foreach (Match item in mcs)
{
list.Add(item.Value);
}
return list;
}
#endregion
/// <summary>
/// 获取默认值
/// </summary>
/// <param name="defaultValue"></param>
/// <returns></returns>
public static string GetDefaultValue(string defaultValue, string LoginId, string LoginName)
{
string result = defaultValue;
if (defaultValue.IndexOf("loginid", StringComparison.OrdinalIgnoreCase) != -1)
{
List<string> list = GetParamValue(defaultValue);
foreach (string s in list)
{
if (s.IndexOf("loginid", StringComparison.OrdinalIgnoreCase) != -1)
result = result.Replace(s, LoginId);
}
}
if (defaultValue.IndexOf("loginname", StringComparison.OrdinalIgnoreCase) != -1)
{
List<string> list = GetParamValue(defaultValue);
foreach (string s in list)
{
if (s.IndexOf("loginname", StringComparison.OrdinalIgnoreCase) != -1)
result = result.Replace(s, LoginName);
}
}
if (result.IndexOf('@') != -1)
{
object obj = SqlHelper.ExecuteScalar(CommandType.Text, result.Replace("@", ""));
if (obj != null)
{
result = obj.ToString();
}
}
if (result == "guid")
{
result = Guid.NewGuid().ToString();
}
////代表传入其他参数格式{#p_1},{#p_2}..
//if (defaultValue.IndexOf("#p_", StringComparison.OrdinalIgnoreCase) != -1)
//{
// List<string> list = PubClass.GetParamValue(defaultValue);
// foreach (string s in list)
// {
// string idx = s.Replace("{#p_", "").Replace("}", "");
// int i = 0;
// if (int.TryParse(idx, out i))
// {
// result = result.Replace(s, otherParams[i - 1]);
// }
// }
//}
return result;
}
public static string ReqSqlParam(string sql, string OperatorId, string OperatorName)
{
string sourceSql = sql;
List<string> listParm = GetParamValue(sql);
foreach (string s in listParm)
{
if (s.IndexOf("loginid", StringComparison.OrdinalIgnoreCase) != -1)
{
sourceSql = sourceSql.Replace(s, OperatorId);
}
if (s.IndexOf("loginname", StringComparison.OrdinalIgnoreCase) != -1)
{
sourceSql = sourceSql.Replace(s, OperatorName);
}
if (s.IndexOf("groupid", StringComparison.OrdinalIgnoreCase) != -1)
{
sourceSql = sourceSql.Replace(s, ERPInfo.Instance.GroupId);
}
}
return sourceSql;
}
/// <summary>
/// 替换sql
/// </summary>
/// <returns></returns>
public static string ReqSqlWhere(DataRow row, string param)
{
List<string> listParm = GetParamValue(param);
foreach (string s in listParm)
{
string filedName = s.Replace("{", "").Replace("}", "");
param = param.Replace(s, row[filedName].ToString());
}
param = ReqExecuteProc(param);
return SqlToCode(param);
}
public static string ReqExecuteProc(string param)
{
string result = param;
if (param.IndexOf("!", StringComparison.OrdinalIgnoreCase) != -1)
{
result = result.Replace("!", "").Replace("(", " ").Replace(")", "");
DataTable dt = SqlHelper.ExecuteDataSet(CommandType.Text, "exec " + result, "temp").Tables[0];
if (dt != null && dt.Rows.Count > 0)
{
result = (dt.Rows[0][0] + "" == "") || (dt.Rows[0][0] + "" == "0") ? "false" : "true";
}
}
return result;
}
private void GetComboBox(string sql, string key, string value, string colum, GridColumn gc, int fieldsqlTag)
{
string tmpsql = sql;
tmpsql = ReqSqlParam(tmpsql, ERPInfo.Instance.EmployeeId.ToString(), ERPInfo.Instance.EmployeeName);
RepositoryItemComboBox combobox = new RepositoryItemComboBox();
combobox.ImmediatePopup = true;
combobox.PopupSizeable = true;
combobox.DropDownRows = 20;
combobox.DropDownItemHeight = 20;
combobox.PopupBorderStyle = PopupBorderStyles.Flat;
combobox.Tag = value + "^" + tmpsql;
tmpsql = Regex.Replace(tmpsql, "#[^##]+#", " 1=1 ");
if (fieldsqlTag != 23)
{
DataTable dt = SqlHelper.ExecuteDataSet(tmpsql).Tables[0];
foreach (DataRow item in dt.Rows)
combobox.Items.Add(item[value]);
}
combobox.NullText = "";
//combobox.ButtonClick += new ButtonPressedEventHandler(comboButtonClick);
if (fieldsqlTag == 23)
combobox.QueryPopUp += new CancelEventHandler(comboQueryPopup);
gc.ColumnEdit = combobox;
}
private void comboQueryPopup(object sender, CancelEventArgs e)
{
//MessageBox.Show(sender.ToString());
if (sender is ComboBoxEdit)
{
var focusRow = gridView.GetDataRow(gridView.FocusedRowHandle);
if (focusRow != null)
{
ComboBoxEdit edit = (sender as ComboBoxEdit);
string tmpsql = edit.Properties.Tag.ToString();
if (!string.IsNullOrEmpty(tmpsql))
{
string listValue = tmpsql.Substring(0, tmpsql.IndexOf("^"));
string sqlValue = tmpsql.Replace("#", "").Replace("#", "");
sqlValue = sqlValue.Substring(sqlValue.IndexOf("^") + 1);
var fieldParams = GetParamValue(sqlValue);
//从单据头取值
if (pnlMain != null)
{
for (int i = 0; i < fieldParams.Count; i++)
{
string fieldName = fieldParams[i].Replace("{", "").Replace("}", "");
Control[] ctl = pnlMain.Controls.Find("txt_" + fieldName, true);
if ((ctl != null) && (ctl.Length > 0))
{
string fieldValue = GetControlText(ctl[0]);
sqlValue = sqlValue.Replace(fieldParams[i], fieldValue);
}
}
}
//从选中行取值
fieldParams = GetParamValue(sqlValue);
for (int i = 0; i < fieldParams.Count; i++)
{
string fieldName = fieldParams[i].Replace("{", "").Replace("}", "");
string fieldValue = focusRow[fieldName] + "";
sqlValue = sqlValue.Replace(fieldParams[i], fieldValue);
}
edit.Properties.Items.Clear();
//MessageBox.Show(listValue + "________" + sqlValue);
DataTable dtTable = SqlHelper.ExecuteDataSet(sqlValue).Tables[0];
foreach (DataRow item in dtTable.Rows)
edit.Properties.Items.Add(item[listValue]);
}
}
}
}
private static void LookUpEdit_ProcessNewValue(object sender, DevExpress.XtraEditors.Controls.ProcessNewValueEventArgs e)
{
DataRow Row;
RepositoryItemLookUpEdit Edit;
Edit = ((LookUpEdit)sender).Properties;
if (e.DisplayValue == null || Edit.NullText.Equals(e.DisplayValue) || string.Empty.Equals(e.DisplayValue))
return;
DataTable LookupTable = Edit.DataSource as DataTable;
Row = LookupTable.NewRow();
Row[Edit.DisplayMember] = e.DisplayValue;
LookupTable.Rows.Add(Row);
e.Handled = true;
}
private static void LookSearchUpEdit_ProcessNewValue(object sender, DevExpress.XtraEditors.Controls.ProcessNewValueEventArgs e)
{
DataRow Row;
RepositoryItemSearchLookUpEdit Edit;
Edit = ((SearchLookUpEdit)sender).Properties;
if (e.DisplayValue == null || Edit.NullText.Equals(e.DisplayValue) || string.Empty.Equals(e.DisplayValue))
return;
DataTable LookupTable = Edit.DataSource as DataTable;
Row = LookupTable.NewRow();
Row[Edit.DisplayMember] = e.DisplayValue;
LookupTable.Rows.Add(Row);
e.Handled = true;
}
private static void GetMemoEdit(GridColumn gc, GridControl gg)
{
RepositoryItemMemoEdit memo = new RepositoryItemMemoEdit();
memo.WordWrap = true;
gg.RepositoryItems.Add(memo);
gc.ColumnEdit = memo;
}
private static void GetMemoExEdit(GridColumn gc, GridControl gg)
{
RepositoryItemMemoExEdit memo = new RepositoryItemMemoExEdit();
memo.WordWrap = true;
memo.ShowIcon = false;
gg.RepositoryItems.Add(memo);
gc.ColumnEdit = memo;
}
/// <summary>
/// 刷新下拉返回参数数据源
/// </summary>
public void refreshSearchLookUp()
{
try
{
if (dtColumns == null) return;
foreach (DataRow row in dtColumns.Rows)
{
int fieldsqlTag = 0;
if (dtColumns.Columns.Contains("fieldsqlTag"))
{
fieldsqlTag = Convert.ToInt32(row["fieldsqlTag"]);
if (fieldsqlTag == 15 || fieldsqlTag == 16)
{
GridColumn grid = gridView.Columns.ColumnByFieldName(row["fieldname"] + "");
string sql = row["fieldsql"] + "";
sql = GetDefaultValue(sql, ERPInfo.Instance.EmployeeId.ToString(), ERPInfo.Instance.EmployeeName);
sql = Regex.Replace(sql, "#[^##]+#", " 1=1 ");
RepositoryItemSearchLookUpEdit edit = grid.ColumnEdit as RepositoryItemSearchLookUpEdit;
edit.DataSource = SqlHelper.ExecuteDataTable(sql);
grid.ColumnEdit = edit;
}
}
else
{
fieldsqlTag = Convert.ToInt32(row["fieldTypeId"]);
if (fieldsqlTag == 15 || fieldsqlTag == 16)
{
GridColumn grid = gridView.Columns.ColumnByFieldName(row["fieldname"] + "");
string sql = row["lookupSql"] + "";
sql = GetDefaultValue(sql, ERPInfo.Instance.EmployeeId.ToString(), ERPInfo.Instance.EmployeeName);
sql = Regex.Replace(sql, "#[^##]+#", " 1=1 ");
RepositoryItemSearchLookUpEdit edit = grid.ColumnEdit as RepositoryItemSearchLookUpEdit;
edit.DataSource = SqlHelper.ExecuteDataTable(sql);
grid.ColumnEdit = edit;
}
}
}
}
catch (Exception)
{
}
}
/// <summary>
/// 创建多选框
/// </summary>
//private void InitMutilEdit(string key, string value, string sql, GridColumn gc)
//{
// FrmMain mutilLookUp = new FrmMain();
// mutilLookUp.ValueField = key;
// mutilLookUp.TextField = value;
// mutilLookUp.sourceSQL = sql;
// RepositoryItemCheckedComboBoxEdit btnEdit = new RepositoryItemCheckedComboBoxEdit();
// btnEdit.NullText = "";
// btnEdit.PopupBorderStyle = PopupBorderStyles.Flat;
// btnEdit.AllowNullInput = DefaultBoolean.False;
// btnEdit.DisplayMember = value;
// btnEdit.ValueMember = key;
// btnEdit.SeparatorChar = ',';
// btnEdit.DataSource = SqlHelper.ExecuteDataTable(sql);
// btnEdit.Buttons[0].Visible = false; // 不能移除,移除后事件不起作用.
// btnEdit.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Ellipsis) });
// btnEdit.Buttons[1].Tag = mutilLookUp;
// btnEdit.ButtonClick += new ButtonPressedEventHandler(OnButtonEditClick);
// gridControl.RepositoryItems.Add(btnEdit);
// gc.OptionsColumn.ReadOnly = true;
// gc.ColumnEdit = btnEdit;
//}
//protected void OnButtonEditClick(object sender, ButtonPressedEventArgs e)
//{
// CheckedComboBoxEdit btnEdit = (CheckedComboBoxEdit)sender;
// FrmMain frmMain = e.Button.Tag as FrmMain;
// frmMain.ReturnValue = btnEdit.EditValue + "";
// frmMain.ReturnText = btnEdit.Text;
// frmMain.sourceSQL = ReqSqlWhere(this.gridView.GetFocusedDataRow(), frmMain.sourceSQL);
// DialogResult result = frmMain.ShowDialog();
// if (result == DialogResult.OK)
// {
// btnEdit.EditValue = frmMain.ReturnValue;
// }
//}
private void GetLookUpEdit(string sql, string key, string value, string colum, GridColumn gc, int fieldsqlTag, GridControl gg)
{
RepositoryItemLookUpEdit combobox = new RepositoryItemLookUpEdit();
//combobox.ProcessNewValue += LookUpEdit_ProcessNewValue;
combobox.SearchMode = SearchMode.AutoFilter;
combobox.ImmediatePopup = false;
combobox.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.Standard;
string tmpsql = sql;
tmpsql = ReqSqlParam(tmpsql, ERPInfo.Instance.EmployeeId.ToString(), ERPInfo.Instance.EmployeeName);
combobox.DataSource = SqlHelper.ExecuteDataSet(tmpsql).Tables[0];
if (!lookupTables.ContainsKey(colum))
lookupTables.Add(colum, combobox.DataSource as DataTable);
combobox.DisplayMember = value;
combobox.ValueMember = key;
LookUpColumnInfo ci = new LookUpColumnInfo();
ci.Caption = "编号";
ci.FieldName = key;
ci.Visible = false;
combobox.Columns.Add(ci);
LookUpColumnInfo ci2 = new LookUpColumnInfo();
ci2.Caption = "名称";
ci2.FieldName = value;
ci2.Visible = true;
combobox.Columns.Add(ci2);
gg.RepositoryItems.Add(combobox);
if (sql.IndexOf("remark", StringComparison.OrdinalIgnoreCase) != -1)
{
LookUpColumnInfo ci3 = new LookUpColumnInfo();
ci3.Caption = "备注";
ci3.FieldName = "remark";
ci3.Visible = true;
combobox.Columns.Add(ci3);
}
combobox.NullText = "";
combobox.AllowNullInput = DevExpress.Utils.DefaultBoolean.False;
gc.ColumnEdit = combobox;
}
private void GetHyperLink(GridColumn gc)
{
//RepositoryItemHyperLinkEdit hypl = new RepositoryItemHyperLinkEdit();
//gc.ColumnEdit = hypl;
}
private void GetProgressBar(GridColumn gc)
{
RepositoryItemProgressBar progress = new RepositoryItemProgressBar();
progress.ShowTitle = true;
gc.ColumnEdit = progress;
}
private void GetCheckColumn(GridColumn gc)
{
RepositoryItemCheckEdit check = new RepositoryItemCheckEdit();
check.ValueChecked = 1;
check.ValueUnchecked = 0;
gc.ColumnEdit = check;
}
private void GetCheckComboColumn(string sql, string key, string value, string colum, GridColumn gc, int fieldsqlTag,
string listKey, string listValue, string unionFields, string unionValue)
{
RepositoryItemCheckedComboBoxEdit combobox = new RepositoryItemCheckedComboBoxEdit();
sql = GetDefaultValue(sql, ERPInfo.Instance.EmployeeId.ToString(), ERPInfo.Instance.EmployeeName);
combobox.AllowFocused = true;
//if ((fieldsqlTag == 15 || fieldsqlTag == 16) && sql.Contains("#"))
//{
// combobox.Tag = new LookUpTag() { Sql = sql, ValueMember = key, DisplayMember = listValue };
// combobox.QueryPopUp += new CancelEventHandler(lookUp_QueryPopUp);
// sql = Regex.Replace(sql, "#[^##]+#", " 1=1 ");
//}
DataTable dtTable = SqlHelper.ExecuteDataSet(sql).Tables[0];
lookupTables.Add(colum, dtTable);
combobox.DataSource = dtTable;
combobox.DisplayMember = listValue;
if (fieldsqlTag == 18)
{
combobox.ValueMember = key;
}
else
{
combobox.ValueMember = listValue;
}
if (!string.IsNullOrEmpty(unionFields) && !string.IsNullOrEmpty(unionValue))
{
//combobox.Tag = new LookUpTag() { ColumnName = colum, ValueMember = key, DisplayMember = listValue, unionFields = unionFields, unionValue = unionValue };
LookUpTag lut = combobox.Tag as LookUpTag;
if (lut == null)
combobox.Tag = new LookUpTag() { ColumnName = colum, ValueMember = key, DisplayMember = listValue, unionFields = unionFields, unionValue = unionValue };
else
{
lut.ColumnName = colum;
lut.ValueMember = key;
lut.DisplayMember = listValue;
lut.unionFields = unionFields;
lut.unionValue = unionValue;
}
combobox.EditValueChanged += new EventHandler(lookUp_EditValueChanged);
}
combobox.NullText = "";
gridMain.RepositoryItems.Add(combobox);
gc.ColumnEdit = combobox;
}
private void GetLookUpEdit(string sql, string key, string value, string colum, GridColumn gc, int fieldsqlTag,
string listKey, string listValue, string unionFields, string unionValue)
{
sql = GetDefaultValue(sql, ERPInfo.Instance.EmployeeId.ToString(), ERPInfo.Instance.EmployeeName);
RepositoryItemSearchLookUpEdit combobox = new RepositoryItemSearchLookUpEdit();
//combobox.ShowAddNewButton = true;
//combobox.Buttons[2].Caption = "新增";
combobox.AllowFocused = true;
int allWidth = 0;
if ((fieldsqlTag == 15 || fieldsqlTag == 16))
{
combobox.Tag = new LookUpTag() { Sql = sql, ValueMember = key, DisplayMember = listValue };
combobox.QueryPopUp += new CancelEventHandler(lookUp_QueryPopUp);
sql = Regex.Replace(sql, "#[^##]+#", " 1=1 ");
}
DataTable dtTable = SqlHelper.ExecuteDataSet(sql).Tables[0];
dtTable.Prefix = "";
if (!lookupTables.ContainsKey(colum))
lookupTables.Add(colum, dtTable);
combobox.DataSource = dtTable;
combobox.DisplayMember = listValue;
combobox.ValueMember = key;
//if (listValue.ToLower() != key.ToLower())
//{
// GridColumn ci = new GridColumn();
// ci.Caption = "编号";
// ci.FieldName = listKey;
// allWidth += ci.Width = CalcMaxColumnWidth(dtTable, listKey);
// ci.Visible = true;
// combobox.View.Columns.Add(ci);
//}
//GridColumn ci2 = new GridColumn();
//ci2.Caption = "名称";
//ci2.FieldName = listValue;
//ci2.Visible = true;
//allWidth += ci2.Width = CalcMaxColumnWidth(dtTable, listValue);
////ci2.Width = -1;
//combobox.View.Columns.Add(ci2);
//if (sql.IndexOf("remark", StringComparison.OrdinalIgnoreCase) != -1)
//{
// GridColumn ci3 = new GridColumn();
// ci3.Caption = "备注";
// ci3.FieldName = "remark";
// ci3.Visible = true;
// allWidth += ci3.Width = CalcMaxColumnWidth(dtTable, "remark");
// combobox.View.Columns.Add(ci3);
// //combobox.BestFitMode = BestFitMode.BestFit; // 3列的时候自动计算宽度,否则自动填充满表格
// combobox.View.OptionsView.ColumnAutoWidth = false;
//}
//else
//{
// combobox.BestFitMode = BestFitMode.BestFitResizePopup;
//}
combobox.View.OptionsView.ShowIndicator = false;
combobox.View.OptionsView.ColumnAutoWidth = true;
//combobox.View.OptionsView.ShowColumnHeaders = false;
combobox.View.Appearance.HeaderPanel.TextOptions.HAlignment = HorzAlignment.Center;
combobox.PopupBorderStyle = PopupBorderStyles.Flat;
combobox.ShowPopupShadow = true;
combobox.AllowNullInput = DevExpress.Utils.DefaultBoolean.False;
//combobox.PopupFormSize = new Size(allWidth, 250);
combobox.ShowFooter = false; // 是否显示底部
if (!string.IsNullOrEmpty(unionFields) && !string.IsNullOrEmpty(unionValue))
{
//combobox.Tag = new LookUpTag() { ColumnName = colum, ValueMember = key, DisplayMember = listValue, unionFields = unionFields, unionValue = unionValue };
LookUpTag lut = combobox.Tag as LookUpTag;
if (lut == null)
combobox.Tag = new LookUpTag() { ColumnName = colum, ValueMember = key, DisplayMember = listValue, unionFields = unionFields, unionValue = unionValue };
else
{
lut.ColumnName = colum;
lut.ValueMember = key;
lut.DisplayMember = listValue;
lut.unionFields = unionFields;
lut.unionValue = unionValue;
}
combobox.EditValueChanged += new EventHandler(lookUp_EditValueChanged);
//combobox.Validating += new CancelEventHandler(lookUp_EditValidating);
}
//if (listValue.ToLower() == key.ToLower())
//{
// combobox.View.Columns[1].Visible = false;
// combobox.View.Columns[0].Width = 1;
// MessageBox.Show("OK");
//}
allWidth = 0;
foreach (DataColumn col in dtTable.Columns)
{
//MessageBox.Show(col.ColumnName);
GridColumn ci = new GridColumn();
ci.FieldName = col.ColumnName;
if (ci.FieldName.ToLower() == "dm" || ci.FieldName.ToLower() == "showid")
ci.Caption = "编码";
if (ci.FieldName.ToLower() == "mc" || ci.FieldName.ToLower() == "showname")
ci.Caption = "名称";
if (ci.FieldName.ToLower() == "remark")
ci.Caption = "备注";
//ci.Width = -1;
//MessageBox.Show(ci.FieldName.Substring(0, 1));
if (ci.FieldName.IndexOf("_parent_", StringComparison.OrdinalIgnoreCase) != -1)
dtTable.Prefix = ci.FieldName;
if (ci.FieldName.Substring(0, 1) == "_")
ci.Visible = false;
else
{
ci.Visible = true;
allWidth += ci.Width = CalcMaxColumnWidth(dtTable, ci.FieldName) + 25;
}
combobox.View.Columns.Add(ci);
}
combobox.PopupFormSize = new Size(allWidth + 40, 300);
//combobox.View.Columns[0].Visible = false;
combobox.NullText = "";
gridMain.RepositoryItems.Add(combobox);
gc.ColumnEdit = combobox;
combobox.ProcessNewValue += LookSearchUpEdit_ProcessNewValue;
combobox.ImmediatePopup = true;
combobox.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.Standard;
}
public void lookUp_EditValidating(object sender, CancelEventArgs e)
{
//MessageBox.Show("OK");
}
public void SetColumns(DataTable dt)
{
_currentSetColumnType = 4;
dtColumns = dt;
isSetColumnWidth = dt.Rows.Count > 0;
gridView.Columns.Clear();
for (int i = 0; i < dt.Rows.Count; i++)
{
DataRow row = dt.Rows[i];
GridColumn gridColumn = new GridColumn();
gridColumn.FieldName = row["fieldname"].ToString();
gridColumn.Name = row["fieldname"].ToString();
gridColumn.VisibleIndex = i;
gridColumn.Caption = row["userName"].ToString();
gridColumn.Width = Convert.ToInt32(row["width"]);
gridColumn.Visible = string.IsNullOrEmpty(row["isVisible"] + "") ? true : !Convert.ToBoolean(row["isVisible"]);
if (Convert.ToInt32(row["width"]) == 0)
gridColumn.Visible = false;
string dataFormat = row["DataFormat"] + "";
gridColumn.OptionsColumn.AllowEdit = false;
gridColumn.OptionsColumn.ReadOnly = false;
gridColumn.OptionsFilter.FilterPopupMode = FilterPopupMode.CheckedList;
CommonUtils.DataFormat(gridColumn, dataFormat, 7);
int isSum = Convert.ToInt32(row["isSum"]);
string calcExpr = "";
if (row.Table.Columns.Contains("calcExpr"))
calcExpr = row["calcExpr"] + "";
//处理统计
if (isSum == 1)
{
gridView.OptionsView.ShowFooter = true;
if (calcExpr.IndexOf("/{") == -1)
{
gridColumn.Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Sum, row["fieldname"].ToString(), "{0:" + dataFormat + "}") });
gridView.GroupSummary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Sum, row["fieldname"].ToString(), null, "{0:" + dataFormat + "}") });
}
else
{
gridColumn.Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Custom, row["fieldname"].ToString(), "{0:" + dataFormat + "}") });
gridView.GroupSummary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Custom, row["fieldname"].ToString(), null, "{0:" + dataFormat + "}") });
}
}
gridView1.Columns.Add(gridColumn);
}
if (gridView.Columns.Count > 0)
{
GridColumn firstColumn = gridView.Columns[0];
if (firstColumn != null)
{
gridView.OptionsView.ShowFooter = true;
firstColumn.Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Count, firstColumn.FieldName.ToString(), "合计: {0:#,###}行") });
gridView.GroupSummary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Count, firstColumn.FieldName.ToString(), null, "合计: {0:#,###}行") });
}
}
}
public void SetDataSource(string sql, bool isColumnFix = false)
{
if (string.IsNullOrEmpty(sql))
return;
DataTable dt = SqlHelper.ExecuteDataSet(sql).Tables[0];
if (isColumnFix)
{
gridView.Columns.Clear();
}
gridControl.DataSource = null;
gridControl.DataSource = dt;
if (isColumnFix)
{
for (int i = 0; i < gridView.Columns.Count; i++)
{
try
{
GridColumn col = gridView.Columns[i];
if (i == 0)
{
gridView.OptionsView.ShowFooter = true;
col.Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Count, col.FieldName.ToString(), "合计: {0:#,###}行") });
gridView.GroupSummary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Count, col.FieldName.ToString(), null, "合计: {0:#,###}行") });
}
if (col.FieldName.Contains("_"))
{
string[] colSplit = col.FieldName.Split('_');
if (colSplit.Length >= 2)
{
col.Caption = colSplit[0];
col.Width = Convert.ToInt32(colSplit[1]);
if (Convert.ToInt32(colSplit[1]) == 0)
col.Visible = false;
if (colSplit.Length > 2)
{
bool visible = "1".Equals(colSplit[2]);
gridView.OptionsView.ShowFooter = true;
if (visible)
{
col.Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Sum, col.FieldName, "{0:0.############}") });
gridView.GroupSummary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] { new DevExpress.XtraGrid.GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Sum, col.FieldName, null, "{0:0.############}") });
}
}
}
}
else
{
col.Width = 150;
}
}
catch (Exception)
{
}
}
}
}
/// <summary>
/// 线程调用
/// </summary>
/// <param name="sql"></param>
//public void SetDataSource(object sql)
//{
// try
// {
// string sqlValue = sql + "";
// gridControl.DataSource = null;
// if (string.IsNullOrEmpty(sqlValue))
// return;
// DataTable dt = SqlHelper.ExecuteDataSetForThread(sqlValue).Tables[0];
// gridControl.DataSource = dt;
// if (isSetColumnWidth)
// {
// foreach (GridColumn col in gridView.Columns)
// {
// try
// {
// if (col.Caption.Contains("_"))
// {
// string[] colSplit = col.Caption.Split('_');
// if (colSplit.Length == 2)
// {
// col.Caption = colSplit[0];
// col.Width = Convert.ToInt32(colSplit[1]);
// if (Convert.ToInt32(colSplit[1]) == 0)
// col.Visible = false;
// }
// }
// else
// {
// col.Width = 150;
// }
// }
// catch (Exception)
// {
// }
// }
// }
// }
// catch (Exception ex)
// {
// }
//}
/// <summary>
/// 计算最大宽度
/// </summary>
private int CalcMaxColumnWidth(DataTable dTable, string columnName)
{
int MaxWidth = 0;
int maxRow = 20;
for (int i = 0; i < dTable.Rows.Count; i++)
{
if (i < maxRow)
{
DataRow row = dTable.Rows[i];
int columnWidth = CommonUtils.GetFontWidth(row[columnName] + "");
if (columnWidth > MaxWidth)
{
MaxWidth = columnWidth;
}
}
}
//foreach (DataRow row in dTable.Rows)
//{
// int columnWidth = CommonUtils.GetFontWidth(row[columnName] + "");
// if (columnWidth > MaxWidth)
// {
// MaxWidth = columnWidth;
// }
//}
return MaxWidth;
}
private void gridView1_CustomDrawRowIndicator(object sender, RowIndicatorCustomDrawEventArgs e)
{
try
{
e.Appearance.TextOptions.HAlignment = HorzAlignment.Center;
e.Appearance.Options.UseBackColor = true;
e.Appearance.GradientMode = System.Drawing.Drawing2D.LinearGradientMode.BackwardDiagonal;
if (e.Info.IsRowIndicator)
{
if (e.RowHandle >= 0)
{
e.Info.DisplayText = (e.RowHandle + 1).ToString();
}
if (gridView1.FocusedRowHandle == e.RowHandle)
{
e.Appearance.BackColor = Color.Blue;
e.Info.BackAppearance.BackColor = Color.Blue;
e.Appearance.BackColor2 = Color.Blue;
e.Info.BackAppearance.BackColor2 = Color.Blue;
e.Appearance.ForeColor = Color.Blue;
}
}
}
catch (Exception ex)
{
}
}
public void SetFocus(string searchText, string colname)
{
DevExpress.XtraGrid.Views.Base.ColumnView view = (DevExpress.XtraGrid.Views.Base.ColumnView)this.gridControl.FocusedView;
DevExpress.XtraGrid.Columns.GridColumn column = view.Columns[colname];
if (column != null)
{
int rhFound = view.LocateByDisplayText(view.FocusedRowHandle + 1, column, searchText);
if (rhFound != DevExpress.XtraGrid.GridControl.InvalidRowHandle)
{
view.FocusedRowHandle = rhFound;
view.FocusedColumn = column;
}
}
}
/// <summary>
/// 行改变事件
/// </summary>
public object RowColorCondtion { get; set; }
public void gridView1_SelectionChange(object sender, SelectionChangedEventArgs e)
{
isCancel = false;
GridCell[] cells = gridView1.GetSelectedCells();
pnlBottom.Visible = (cells.Length > 1);
pnlSpec.Visible = (cells.Length > 1);
label1.Text = "求和:" + cells.Length.ToString();
double lSum = 0.00;
double lAvg = 0.00;
int lCount = cells.Length;
foreach (GridCell item in cells)
{
double lNumber = 0.00;
string cellValue = "0";
if (item.Column != null)
cellValue = gridView1.GetRowCellValue(item.RowHandle, item.Column) + "";
if (double.TryParse(cellValue, out lNumber))
lSum += lNumber;
}
lAvg = lSum / lCount;
label1.Text = "求和:" + lSum.ToString() + " 计数:" + lCount.ToString() + " 平均值:" + lAvg.ToString();
}
public void gridView1_CancelEditor(object sender, CancelEventArgs e)
{
e.Cancel = isCancel;
}
#region 表格列扩展
/// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void gridView1_PopupMenuShowing(object sender, PopupMenuShowingEventArgs e)
{
if (e.HitInfo.Column == null) return;
//判断是否是列标题的右键菜单
if (e.MenuType == GridMenuType.Column)
{
string gridMerge = "开启数据合并";
if (gridView1.OptionsView.AllowCellMerge)
gridMerge = "关闭数据合并";
string mergeCaption = "数据合并";
if (e.HitInfo.Column != null && e.HitInfo.Column.OptionsColumn.AllowMerge == DefaultBoolean.True)
mergeCaption = "取消合并";
GridViewColumnMenu menu = e.Menu as GridViewColumnMenu;
DXMenuItem itemFixLeft = new DXMenuItem("冻结列(左)", OnFixLeftItemClick);
DXMenuItem itemFixLeftAll = new DXMenuItem("冻结列(左全部)", OnFixLeftAllItemClick);
DXMenuItem itemFixRight = new DXMenuItem("冻结列(右)", OnFixRightItemClick);
DXMenuItem itemFixRightAll = new DXMenuItem("冻结列(右全部)", OnFixRightAllItemClick);
DXMenuItem itemUnFix = new DXMenuItem("清除冻结", OnUnFixItemClick);
DXMenuItem gridMergeItem = new DXMenuItem(gridMerge, OnGridMergeItemClick);
DXMenuItem itemMerge = new DXMenuItem(mergeCaption, OnMergeItemClick);
DXMenuItem itemSaveColumn = new DXMenuItem("保存表格属性", OnSaveItemClick);
itemSaveColumn.Tag = gridView1;
DXMenuItem itemClearColumn = new DXMenuItem("恢复表格属性", OnClearItemClick);
itemClearColumn.Tag = this;
DXMenuItem itemExportColumn = new DXMenuItem("导出表格数据", OnExportItemClick);
itemExportColumn.Tag = gridView1;
DXMenuItem itemPrintColumn = new DXMenuItem("打印表格数据", OnPrintItemClick);
itemPrintColumn.Tag = gridView1;
DXMenuItem itemSortColumn = new DXMenuItem("清除全部列排序", OnClearSortItemClick);
itemSortColumn.Tag = gridView1;
itemFixLeft.Tag = itemFixRight.Tag = itemUnFix.Tag = e.HitInfo.Column;
itemFixLeftAll.Tag = itemFixRightAll.Tag = e.HitInfo.Column;
itemFixLeft.Image = Lskj.MyControl.Properties.Resources.fix_left;
itemFixLeftAll.Image = Lskj.MyControl.Properties.Resources.fix_left;
itemFixRight.Image = Lskj.MyControl.Properties.Resources.fix_right;
itemFixRightAll.Image = Lskj.MyControl.Properties.Resources.fix_right;
itemUnFix.Image = Lskj.MyControl.Properties.Resources.fix_exit;
gridMergeItem.Tag = gridView1;
itemMerge.Tag = e.HitInfo.Column;
if (e.HitInfo.Column.Fixed == FixedStyle.Left)
itemFixLeft.Enabled = false;
if (e.HitInfo.Column.Fixed == FixedStyle.Right)
itemFixRight.Enabled = false;
if (e.HitInfo.Column.Fixed == FixedStyle.None)
itemUnFix.Enabled = false;
itemMerge.Enabled = gridView1.OptionsView.AllowCellMerge;
itemFixLeft.BeginGroup = true;
menu.Items.Add(itemFixLeft);
menu.Items.Add(itemFixLeftAll);
//menu.Items.Add(itemFixRight);
//menu.Items.Add(itemFixRightAll);
menu.Items.Add(itemUnFix);
gridMergeItem.BeginGroup = true;
menu.Items.Add(gridMergeItem);
menu.Items.Add(itemMerge);
menu.Items.Add(itemExportColumn);
menu.Items.Add(itemPrintColumn);
gridMergeItem.BeginGroup = true;
menu.Items.Add(itemSortColumn);
if ((!string.IsNullOrEmpty(FormKey)) && IsSaveColumn)
{
gridMergeItem.BeginGroup = true;
menu.Items.Add(itemSaveColumn);
menu.Items.Add(itemClearColumn);
}
}
}
/// <summary>
/// 清除所有列排序
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnClearSortItemClick(object sender, EventArgs e)
{
try
{
foreach (GridColumn col in gridView1.Columns)
{
col.SortOrder = ColumnSortOrder.None;
}
}
catch (Exception)
{
XtraMessageBox.Show("清除失败.");
}
}
/// <summary>
/// 冻结列左侧
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnFixLeftItemClick(object sender, EventArgs e)
{
DXMenuItem item = sender as DXMenuItem;
GridColumn column = item.Tag as GridColumn;
column.Fixed = FixedStyle.Left;
}
/// <summary>
/// 冻结列右侧
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnFixRightItemClick(object sender, EventArgs e)
{
DXMenuItem item = sender as DXMenuItem;
GridColumn column = item.Tag as GridColumn;
column.Fixed = FixedStyle.Right;
}
/// <summary>
/// 取消冻结列
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnUnFixItemClick(object sender, EventArgs e)
{
DXMenuItem item = sender as DXMenuItem;
GridColumn column = item.Tag as GridColumn;
column.Fixed = FixedStyle.None;
column.VisibleIndex = column.AbsoluteIndex;
}
/// <summary>
/// 冻结列左侧全部
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnFixLeftAllItemClick(object sender, EventArgs e)
{
DXMenuItem item = sender as DXMenuItem;
GridColumn column = item.Tag as GridColumn;
FixAllColumns(FixedStyle.Left, column);
}
/// <summary>
/// 冻结列右侧全部
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnFixRightAllItemClick(object sender, EventArgs e)
{
DXMenuItem item = sender as DXMenuItem;
GridColumn column = item.Tag as GridColumn;
FixAllColumns(FixedStyle.Right, column);
}
private void FixAllColumns(FixedStyle fixedStyle, GridColumn curCol)
{
switch (fixedStyle)
{
case FixedStyle.Left:
{
foreach (GridColumn item in gridView.Columns)
{
if (item.AbsoluteIndex <= curCol.AbsoluteIndex)
{
item.Fixed = FixedStyle.Left;
}
}
}
break;
case FixedStyle.Right:
{
foreach (GridColumn item in gridView.Columns)
{
if (item.AbsoluteIndex >= curCol.AbsoluteIndex)
{
item.Fixed = FixedStyle.Right;
}
}
}
break;
}
}
/// <summary>
/// 合并
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnMergeItemClick(object sender, EventArgs e)
{
DXMenuItem item = sender as DXMenuItem;
GridColumn column = item.Tag as GridColumn;
//column.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True;
if (column.OptionsColumn.AllowMerge == DefaultBoolean.True)
column.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False;
else
column.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.True;
}
/// <summary>
/// 合并
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnGridMergeItemClick(object sender, EventArgs e)
{
DXMenuItem item = sender as DXMenuItem;
GridView grv = item.Tag as GridView;
//column.OptionsColumn.AllowSort = DevExpress.Utils.DefaultBoolean.True;
if (grv.OptionsView.AllowCellMerge == true)
grv.OptionsView.AllowCellMerge = false;
else
{
grv.OptionsView.AllowCellMerge = true;
MessageBox.Show("请注意:数据合并模式已开启,该模式下将不能进行区域选择、复制和粘贴\r\n要退出合并模式请再次点击进行切换");
}
}
/// <summary>
/// 保存表格列信息
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnSaveItemClick(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(FormKey))
return;
if (XtraMessageBox.Show("是否将表格列头信息保存至数据库", "询问", MessageBoxButtons.YesNo) != DialogResult.Yes)
return;
DataTable dtTable = new DataTable();
try
{
dtTable = SqlHelper.ExecuteDataSet(string.Format("select 1 from P_systemGridConfigTab where formkey='{0}' and operatorId='{1}'", FormKey, OperatorId)).Tables[0];
}
catch (Exception ex)
{
XtraMessageBox.Show("检测到未开启列保存列功能,请联系朗速");
return;
}
// 检查当前操作人员是否已经保存过列信息
StringBuilder sb = new StringBuilder();
DXMenuItem item = sender as DXMenuItem;
GridView grv = item.Tag as GridView;
if (OperatorName != "管理员")
{
if (dtTable.Rows.Count > 0)
{
foreach (GridColumn col in grv.Columns)
{
string tempSql = string.Format(@"update P_systemGridConfigTab set orderid='{0}',fieldWidth='{1}',isvisible={2} where formkey='{3}' and fieldname='{4}' and operatorid='{5}';",
col.VisibleIndex, col.Width, Convert.ToInt32(col.Visible), FormKey, col.FieldName, OperatorId);
sb.Append(tempSql);
}
if (!string.IsNullOrEmpty(sb.ToString()))
{
SqlHelper.ExecuteNonQuery(sb.ToString());
}
}
else
{
foreach (GridColumn col in grv.Columns)
{
string tempSql = string.Format(@"insert into P_systemGridConfigTab(formkey,fieldname,username,orderid,isvisible,operatorid,operatorName,operatedate,fieldWidth)
values('{0}','{1}','{2}','{3}','{4}','{5}','{6}',getdate(),'{7}');", FormKey, col.FieldName, col.Caption, col.VisibleIndex, Convert.ToInt32(col.Visible), OperatorId, OperatorName, col.Width);
sb.Append(tempSql);
}
if (!string.IsNullOrEmpty(sb.ToString()))
{
SqlHelper.ExecuteNonQuery(sb.ToString());
}
}
}
#region old
if (OperatorName == "管理员")
{
string tmpsql = string.Empty;
string colTable = string.Empty;
string keyField = string.Empty;
string stepCode = string.Empty;
int keyOrder = 0;
//DXMenuItem item = sender as DXMenuItem;
//GridView grv = item.Tag as GridView;
//基础档案主表
if (ModuleType == 1)
{
colTable = "p_systemwordbooktab";
keyField = "tab";
tmpsql = "select top 1 orderid from p_systemwordbooktab where tab='" + ModuleKey + "' order by orderid";
object obj = SqlHelper.ExecuteScalar(CommandType.Text, tmpsql);
if (obj != null)
keyOrder = Convert.ToInt32(obj);
}
//报表明细
if (ModuleType == 2)
{
colTable = "p_systemDlltabDetailGrid";
keyField = "detailkey";
}
//单据明细
if (ModuleType == 3)
{
colTable = "p_systembillDetail";
keyField = "typecode";
}
//单据来源主信息
if (ModuleType == 4)
{
colTable = "p_systembillsourcegrid";
keyField = "sourceid";
}
//单据来源明细信息
if (ModuleType == 5)
{
colTable = "p_systembillsourcedetail";
keyField = "sourceid";
}
//单据审核列表
if (ModuleType == 6)
{
colTable = "p_systembillstepgrid";
keyField = "typeCode";
if (!string.IsNullOrEmpty(ModuleKey) && ModuleKey.Split('_').Length == 2)
{
string[] splitStr = ModuleKey.Split('_');
ModuleKey = splitStr[0];
stepCode = splitStr[1];
}
}
//基础档案审核列表
if (ModuleType == 7)
{
colTable = "p_systemdlltabflowstepgrid";
keyField = "typeCode";
if (!string.IsNullOrEmpty(ModuleKey) && ModuleKey.Split('_').Length == 2)
{
string[] splitStr = ModuleKey.Split('_');
ModuleKey = splitStr[0];
stepCode = splitStr[1];
}
}
// 单据审核附加信息
if (ModuleType == 8)
{
colTable = "p_systembillauditAttachDetail";
keyField = "attachKey";
}
tmpsql = "";
foreach (GridColumn col in grv.Columns)
{
tmpsql = tmpsql + "update " + colTable + " set width=" + col.Width.ToString() + ((ModuleType == 1) && (col.VisibleIndex == -1) ? " ,vislble=1" : "") + (col.VisibleIndex != -1 ? ",orderid=" + (col.VisibleIndex + keyOrder + (ModuleType == 1 ? 1 : 0)).ToString() : "") +
" where " + keyField + "='" + ModuleKey + "' and fieldname='" + col.FieldName + "'";
if (ModuleType == 1)
tmpsql = tmpsql + " and orderid<>" + keyOrder.ToString();
if (ModuleType == 7)
tmpsql = tmpsql + " and stepCode=" + stepCode;
tmpsql = tmpsql + ";";
}
//MessageBox.Show(tmpsql);
SqlHelper.ExecuteNonQuery(tmpsql);
}
#endregion
XtraMessageBox.Show("保存列信息成功");
}
private void OnClearItemClick(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(FormKey))
return;
if (XtraMessageBox.Show("是否将表格列头信息恢复到系统配置状态", "询问", MessageBoxButtons.YesNo) != DialogResult.Yes)
return;
DataTable dtTable = new DataTable();
try
{
dtTable = SqlHelper.ExecuteDataSet(string.Format("select 1 from P_systemGridConfigTab where formkey='{0}' and operatorId='{1}'", FormKey, OperatorId)).Tables[0];
}
catch (Exception ex)
{
XtraMessageBox.Show("检测到未开启列保存列功能,请联系朗速");
return;
}
string sql = string.Format("delete from P_systemGridConfigTab where formkey='{0}' and operatorId='{1}'", FormKey, OperatorId);
SqlHelper.ExecuteNonQuery(sql);
lookupDatas.Clear();
DXMenuItem item = sender as DXMenuItem;
BandedControlEx grd = item.Tag as BandedControlEx;
if (grd == null)
{
GridControlEx grd1 = item.Tag as GridControlEx;
switch (_currentSetColumnType)
{
case 1:
grd1.SetColumns(ColumnSQL);
break;
case 3:
grd1.SetColumns3(ColumnSQL);
break;
case 4:
grd1.SetColumns(dtColumns);
break;
case 2:
default:
grd1.SetColumns2(dtColumns);
break;
}
}
else
{
switch (_currentSetColumnType)
{
case 4:
grd.SetColumns(dtColumns);
break;
case 3:
grd.SetColumns3(ColumnSQL);
break;
case 2:
default:
grd.SetColumns2(dtColumns);
break;
}
}
if ((OperatorName == "管理员") && (ModuleType == 1))
{
sql = "update p_systemwordbooktab set vislble=vislble4,orderid=oid4 where tab='" + ModuleKey + "' and exists(select 1 from p_systemtab where clientname='钱多多')";
SqlHelper.ExecuteNonQuery(sql);
}
}
/// <summary>
/// 重置表格列
/// </summary>
/// <returns></returns>
public DataTable ResetColumns(DataTable columns)
{
try
{
if (string.IsNullOrEmpty(FormKey))
return columns;
DataTable dtColumns = SqlHelper.ExecuteDataSet(string.Format("select *,isnull(isvisible,0) as visible1,case when isnull(isvisible,0)=0 then 0 else fieldwidth end as width from P_systemGridConfigTab where formkey='{0}' and operatorid='{1}'", FormKey, OperatorId)).Tables[0];
foreach (DataRow row in dtColumns.Rows)
{
string fieldname = row["fieldname"] + "";
string orderid = row["orderid"] + "";
string fieldWidth = row["Width"] + "";
string fieldVisible = (Convert.ToInt32(row["visible1"]) == 1 ? 0 : 1).ToString();
foreach (DataRow item in columns.Rows)
{
if (fieldname.ToLower() == (item["fieldname"] + "").ToLower())
{
item["orderid"] = orderid;
item["width"] = fieldWidth;
}
}
}
DataView dv = columns.DefaultView;
dv.Sort = "orderid asc";
return dv.ToTable();
}
catch (Exception ex)
{
}
return columns;
}
/// <summary>
/// 导出表格数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnExportItemClick(object sender, EventArgs e)
{
SaveXls(gridControl);
}
/// <summary>
/// 打印表格数据
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnPrintItemClick(object sender, EventArgs e)
{
Preview(gridControl);
}
#endregion
#region 导出Excel
/// <summary>
/// 导出Excel
/// </summary>
/// <param name="GridControlPub"></param>
/// <returns></returns>
public static int SaveXls(DevExpress.XtraGrid.GridControl GridControlPub)
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.Title = "导出Excel";
saveFileDialog.Filter = "Excel文件(*.xls)|*.xls|Excel2007|*.xlsx|PDF文件|*.PDF|RTF文件|*.RTF|HTML文件|*.html";
DialogResult dialogResult = saveFileDialog.ShowDialog();
GridControl newGrid = CommonUtils.ReplaceBitType(GridControlPub);
if (dialogResult == DialogResult.OK)
{
DevExpress.XtraPrinting.XlsExportOptions options = new DevExpress.XtraPrinting.XlsExportOptions();
options.TextExportMode = TextExportMode.Text;
DevExpress.XtraPrinting.XlsxExportOptions optionsx = new DevExpress.XtraPrinting.XlsxExportOptions();
optionsx.TextExportMode = TextExportMode.Text;
if (saveFileDialog.FilterIndex == 1)
{
newGrid.ExportToXls(saveFileDialog.FileName, options);
}
if (saveFileDialog.FilterIndex == 2)
{
newGrid.ExportToXlsx(saveFileDialog.FileName, optionsx);
}
if (saveFileDialog.FilterIndex == 3)
{
newGrid.ExportToPdf(saveFileDialog.FileName);
}
if (saveFileDialog.FilterIndex == 4)
{
newGrid.ExportToRtf(saveFileDialog.FileName);
}
if (saveFileDialog.FilterIndex == 5)
{
newGrid.ExportToHtml(saveFileDialog.FileName);
}
XtraMessageBox.Show("保存成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
return 1;
}
#endregion
#region 打印GridControl
/// <summary>
/// 打印GridControl
/// </summary>
/// <param name="GridControlPub"></param>
/// <returns></returns>
public static int Preview(DevExpress.XtraGrid.GridControl GridControlPub)
{
PrintingSystem ps = null;
DevExpress.XtraPrinting.PrintableComponentLink link = null;
ps = new DevExpress.XtraPrinting.PrintingSystem();
link = new DevExpress.XtraPrinting.PrintableComponentLink(ps);
ps.Links.Add(link);
link.Component = GridControlPub;//这里可以是可打印的部件
string _PrintHeader = "打印数据信息";
PageHeaderFooter phf = link.PageHeaderFooter as PageHeaderFooter;
phf.Header.Content.Clear();
phf.Header.Content.AddRange(new string[] { "", _PrintHeader, "" });
phf.Header.Font = new System.Drawing.Font("宋体", 14, System.Drawing.FontStyle.Bold);
phf.Header.LineAlignment = BrickAlignment.Center;
link.CreateDocument(); //建立文档
ps.PreviewFormEx.Show();
return 1;
}
#endregion
private void gridView1_CustomDrawCell(object sender, RowCellCustomDrawEventArgs e)
{
if (e.RowHandle == gridView1.FocusedRowHandle)
e.Appearance.BackColor = ColorTranslator.FromHtml("#9feb6a"); //Color.SpringGreen;
}
private void gridMain_Click(object sender, EventArgs e)
{
}
/// <summary>
/// Gets or sets the adapter object.
/// </summary>
/// <value>The adapter object.</value>
public SqlDataAdapter AdapterObj { get; set; }
/// <summary>
/// <para>说明:获取选中行数据</para>
/// <para>创建人:龚宇超</para>
/// <para>创建日期:2019-10-18 </para>
/// <para>修改人:</para>
/// <para>修改日期:</para>
/// <para>修改备注:</para>
/// <para>版本:1.0</para>
/// </summary>
/// <returns>DataRow[].</returns>
public virtual DataRow[] GetViewFocusedDataRows()
{
int[] rows = gridView.GetSelectedRows();
DataRow[] dataRows = new DataRow[rows.Length];
for (int i = 0; i < rows.Length; i++)
{
dataRows[i] = gridView.GetDataRow(rows[i]);
}
return dataRows;
}
public void ReleaseEvent()
{
gridView1.RowStyle -= new RowStyleEventHandler(gridView1_RowStyle);
}
}
}