SVN r1047

SVN-Revision: r1047
This commit is contained in:
cyf
2025-11-20 09:01:11 +00:00
parent 6c0f72cb62
commit 2616d5dbad
23 changed files with 741 additions and 202 deletions
+239 -79
View File
@@ -264,6 +264,10 @@ namespace Lskj.Control
/// </summary>
public event ParseGridDataEventHandler OnParseGridDataCallBack;
/// <summary>
/// 所有数据粘贴完成后调用
/// </summary>
public event EventHandler OnAllAfterParseCallBack;
/// <summary>
/// Delegate GridColumnCallDLL
/// </summary>
/// <param name="rowItem">The row item.</param>
@@ -386,6 +390,11 @@ namespace Lskj.Control
/// 聚合多表头控件
/// </summary>
public TreeBandedGridControlEx CustomGroupTreeBandEx;
/// <summary>
/// 聚合界面是否冻结基本信息列
/// </summary>
public bool AggregationFreeze;
/// <summary>
/// 聚合多表头控件选中行
/// </summary>
@@ -431,6 +440,18 @@ namespace Lskj.Control
/// 进度条类型的列名称
/// </summary>
private List<string> ProgressBarColumn = new List<string>();
/// <summary>
/// 提示文本 字段(列名,提示信息)
/// </summary>
public Dictionary<string, string> PromptMessage = new Dictionary<string, string>();
/// <summary>
/// 合计行格式(设置成全局变量,更好的处理语言翻译的情况)
/// </summary>
public string TotalFormat = Business.Impl.LanguageTranslation.Translatable ? Business.Impl.LanguageTranslation.GetTranslatedText("合计") + ": {0:#,###}" + Business.Impl.LanguageTranslation.GetTranslatedText("行") : "合计: {0:#,###}行";
/// <summary>
/// 搜索框 手动添加行
/// </summary>
public Dictionary<string, List<DataRow>> ManuallyAddData = new Dictionary<string, List<DataRow>>();
public GridControlEx()
@@ -689,11 +710,13 @@ namespace Lskj.Control
if (string.IsNullOrEmpty(model.MergeGroup)) return;
string[] fields = model.MergeGroup.Trim(',').Split(',');
bool handled = false;//默认合并
DataTable table = gridView.GridControl.DataSourceTable();
for (int i = 0; i < fields.Length; i++)
{
int row1 = e.RowHandle1;
int row2 = e.RowHandle2;
string McColumn = fields[i] + "";//关联条件列
if (!table.Columns.Contains(McColumn)) break;
string value1 = gridView.GetDataRow(row1)[McColumn].ToString();
string value2 = gridView.GetDataRow(row2)[McColumn].ToString();
if (value1 != value2)
@@ -1176,7 +1199,7 @@ namespace Lskj.Control
if (gridColumn.VisibleIndex >= 0 && this.isFirstVisableCol)
{
gridView.OptionsView.ShowFooter = true;
gridColumn.Summary.AddRange(new GridSummaryItem[] { new GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Count, gridColumn.FieldName, "合计: {0:#,###}行") });
gridColumn.Summary.AddRange(new GridSummaryItem[] { new GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Count, gridColumn.FieldName, TotalFormat) });
if (SystemInfo.Instance.GroupSpecialMode)
{
//gridView.GroupSummary.Add(new GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Count, gridColumn.FieldName, null, "合计: {0:#,###}行"));
@@ -1184,7 +1207,7 @@ namespace Lskj.Control
}
else
{
gridView.GroupSummary.AddRange(new GridSummaryItem[] { new GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Count, gridColumn.FieldName, null, "合计: {0:#,###}行") });
gridView.GroupSummary.AddRange(new GridSummaryItem[] { new GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Count, gridColumn.FieldName, null, TotalFormat) });
}
@@ -1291,6 +1314,10 @@ namespace Lskj.Control
{
this.RepeatedVerificationNames.Add(model.FieldName);
}
if (!string.IsNullOrWhiteSpace(model.PromptText))
{
PromptMessage.Add(model.FieldName, model.PromptText);
}
}
@@ -1567,6 +1594,11 @@ namespace Lskj.Control
gridColumn.AppearanceCell.TextOptions.VAlignment = VertAlignment.Center;
gridColumn.AppearanceCell.TextOptions.WordWrap = WordWrap.Wrap;
}
if (!string.IsNullOrWhiteSpace(model.PromptText))
{
PromptMessage.Add(model.FieldName, model.PromptText);
}
}
DataTable customTable = this.gridView.GetCustomColumnByDatabase(this.CustomColumKey);
this.SetCustomColumns(customTable);
@@ -1693,6 +1725,11 @@ namespace Lskj.Control
gridColumn.AppearanceCell.TextOptions.VAlignment = VertAlignment.Center;
gridColumn.AppearanceCell.TextOptions.WordWrap = WordWrap.Wrap;
}
if (!string.IsNullOrWhiteSpace(model.PromptText))
{
PromptMessage.Add(model.FieldName, model.PromptText);
}
}
if (Model != null)
@@ -2541,7 +2578,7 @@ namespace Lskj.Control
if (col.VisibleIndex == 0)
{
isShowFooter = true;
col.Summary.AddRange(new GridSummaryItem[] { new GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Count, col.FieldName, "合计: {0:#,###}行") });
col.Summary.AddRange(new GridSummaryItem[] { new GridColumnSummaryItem(DevExpress.Data.SummaryItemType.Count, col.FieldName, TotalFormat) });
if (SystemInfo.Instance.GroupSpecialMode)
{
@@ -2550,7 +2587,7 @@ namespace Lskj.Control
}
else
{
gridView.GroupSummary.AddRange(new GridSummaryItem[] { new GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Count, col.FieldName, null, "合计: {0:#,###}行") });
gridView.GroupSummary.AddRange(new GridSummaryItem[] { new GridGroupSummaryItem(DevExpress.Data.SummaryItemType.Count, col.FieldName, null, TotalFormat) });
}
}
else
@@ -2643,8 +2680,13 @@ namespace Lskj.Control
{
if (SystemInfo.Instance.GridRowFontSize > 0)
{
this.gridView.Appearance.Row.Font = new Font("微软雅黑", SystemInfo.Instance.GridRowFontSize);
this.gridView.Appearance.HeaderPanel.Font = new Font("微软雅黑", SystemInfo.Instance.GridRowFontSize);
this.gridView.Appearance.Row.Font = new Font(this.gridView.Appearance.Row.Font.Name, SystemInfo.Instance.GridRowFontSize);
this.gridView.Appearance.HeaderPanel.Font = new Font(this.gridView.Appearance.HeaderPanel.Font.Name, SystemInfo.Instance.GridRowFontSize);
}
if (!string.IsNullOrWhiteSpace(SystemInfo.Instance.GridFontName))
{
this.gridView.Appearance.Row.Font = new Font(SystemInfo.Instance.GridFontName, this.gridView.Appearance.Row.Font.Size);
this.gridView.Appearance.HeaderPanel.Font = new Font(SystemInfo.Instance.GridFontName, this.gridView.Appearance.HeaderPanel.Font.Size);
}
if (SystemInfo.Instance.GridRowHeight > 0)
{
@@ -4102,7 +4144,8 @@ namespace Lskj.Control
gridControl.RepositoryItems.Add(searchEdit);
gridColumn.ColumnEdit = searchEdit;
searchEdit.View.Tag = searchEdit;
if (model.SearchBoxAddition && (ControlType.LabAutoCompleteText == model.FieldType || ControlType.LabAutoGridText == model.FieldType || ControlType.LabAutoGridTextParam == model.FieldType))
if (model.SearchBoxAddition) searchEdit.ProcessNewValue += SearchEdit_ProcessNewValue;
if ((ControlType.LabAutoCompleteText == model.FieldType || ControlType.LabAutoGridText == model.FieldType || ControlType.LabAutoGridTextParam == model.FieldType))
{
searchEdit.EditValueChanging += gridLookUpEdit1_EditValueChangingAdd;
}
@@ -4110,12 +4153,108 @@ namespace Lskj.Control
{
searchEdit.EditValueChanging += gridLookUpEdit1_EditValueChanging;
}
searchEdit.View.CustomDrawFilterPanel += OnCustomDrawFilterPanel;
searchEdit.View.Click += new EventHandler(View_Click);
this.mControlList.Add(model);
}
/// <summary>
/// 添加一个值到数据源中
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void SearchEdit_ProcessNewValue(object sender, ProcessNewValueEventArgs e)
{
try
{
GridLookUpEdit edit = sender as GridLookUpEdit;
GridColumnModel model = edit.Properties.Tag as GridColumnModel;
//RepositoryItemGridLookUpEdit searchEdit = edit.Properties;
RepositoryItemGridLookUpEdit searchEdit = GridView.Columns[model.FieldName].ColumnEdit as RepositoryItemGridLookUpEdit;
DataTable dt = (searchEdit.DataSource as DataTable);
BeginInvoke(new MethodInvoker(delegate ()
{
FilterLookup(sender, e.DisplayValue + "");
}));
if (true)
{
if (string.IsNullOrWhiteSpace(e.DisplayValue + "")) return;
string ValueName = searchEdit.View.Columns[0].FieldName;
string TextName = searchEdit.View.Columns[1].FieldName;
Type dataType = dt.Columns[ValueName].DataType;
DataRow newRow = dt.NewRow();
if (dataType.Name == "Int32")
{
int maxdm = Convert.ToInt32(searchEdit.View.Columns[ValueName].Tag);
edit.Properties.View.ActiveFilterString = string.Format(ValueName + "< {0}", maxdm);
int maxdmIndex = dt.AsEnumerable().Select(t => t.Field<int>(ValueName)).Max();
newRow[ValueName] = maxdmIndex + 1;
newRow[TextName] = e.DisplayValue + "";
if (dt.Rows.Cast<DataRow>().FirstOrDefault(x => (x[ValueName] + "").Equals(e.DisplayValue + "")) == null)
{
if (model.FieldType == ControlType.LabAutoGridValueParam || model.FieldType == ControlType.LabAutoGridTextParam || model.FieldType == ControlType.LabAutoCompleteTextParam || model.FieldType == ControlType.LabAutoCompleteValueParam)
{
if (this.ManuallyAddData.ContainsKey(model.FieldName))
{
List<DataRow> DataRows = this.ManuallyAddData[model.FieldName];
DataRows.Add(newRow);
}
else
{
List<DataRow> DataRows = new List<DataRow>();
DataRows.Add(newRow);
this.ManuallyAddData.Add(model.FieldName, DataRows);
}
}
dt.Rows.Add(newRow.ItemArray);
e.Handled = true;
}
}
else if (dataType.Name == "String")
{
newRow[ValueName] = e.DisplayValue + "";
newRow[TextName] = e.DisplayValue + "";
if (dt.Rows.Cast<DataRow>().FirstOrDefault(x => (x[TextName] + "").Equals(e.DisplayValue + "")) == null)
{
if (model.FieldType == ControlType.LabAutoGridValueParam || model.FieldType == ControlType.LabAutoGridTextParam || model.FieldType == ControlType.LabAutoCompleteTextParam || model.FieldType == ControlType.LabAutoCompleteValueParam)
{
if (this.ManuallyAddData.ContainsKey(model.FieldName))
{
List<DataRow> DataRows = this.ManuallyAddData[model.FieldName];
DataRows.Add(newRow);
}
else
{
List<DataRow> DataRows = new List<DataRow>();
DataRows.Add(newRow);
this.ManuallyAddData.Add(model.FieldName, DataRows);
}
}
dt.Rows.Add(newRow.ItemArray);
e.Handled = true;
}
}
}
}
catch (Exception ex)
{
string Message = ErrorMessage.PromptErrorMessage(ex, Model.ModuleCode);
MessageUtil.Show(Message, ex.Message);
}
finally
{
}
}
/// <summary>
/// 数据源中点击将数据源更新
/// </summary>
@@ -4192,15 +4331,41 @@ namespace Lskj.Control
{
FilterLookup(sender, e.NewValue + "");
}));
if (string.IsNullOrWhiteSpace(edit.AutoSearchText) && e.NewValue == "")
{
DataRow newRow = dt.NewRow();
if (dt.Rows.Cast<DataRow>().FirstOrDefault(x => x == newRow) == null)
{
dt.Rows.Add(newRow.ItemArray);
}
}
//if (string.IsNullOrWhiteSpace(edit.AutoSearchText) && e.NewValue == "")
//{
// DataRow newRow = dt.NewRow();
// if (dt.Rows.Cast<DataRow>().FirstOrDefault(x => x == newRow) == null)
// {
// dt.Rows.Add(newRow.ItemArray);
// }
//}
}
catch (Exception ex)
{
string Message = ErrorMessage.PromptErrorMessage(ex, Model.ModuleCode);
MessageUtil.Show(Message, ex.Message);
}
}
/// <summary>
/// 把输入值添加到数据源中
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void gridLookUpEdit1_EditValueChangingAdd(object sender, DevExpress.XtraEditors.Controls.ChangingEventArgs e)
{
try
{
GridLookUpEdit edit = sender as GridLookUpEdit;
RepositoryItemGridLookUpEdit searchEdit = edit.Properties;
DataTable dt = (searchEdit.DataSource as DataTable);
BeginInvoke(new MethodInvoker(delegate ()
{
FilterLookup(sender, e.NewValue + "");
}));
//if (true)
//{
@@ -4241,62 +4406,6 @@ namespace Lskj.Control
}
/// <summary>
/// 把输入值添加到数据源中
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void gridLookUpEdit1_EditValueChangingAdd(object sender, DevExpress.XtraEditors.Controls.ChangingEventArgs e)
{
try
{
GridLookUpEdit edit = sender as GridLookUpEdit;
RepositoryItemGridLookUpEdit searchEdit = edit.Properties;
DataTable dt = (searchEdit.DataSource as DataTable);
BeginInvoke(new MethodInvoker(delegate ()
{
FilterLookup(sender, e.NewValue + "");
}));
if (true)
{
if (string.IsNullOrWhiteSpace(e.NewValue + "")) return;
string ValueName = searchEdit.View.Columns[0].FieldName;
string TextName = searchEdit.View.Columns[1].FieldName;
Type dataType = dt.Columns[ValueName].DataType;
DataRow newRow = dt.NewRow();
if (dataType.Name == "Int32")
{
int maxdm = Convert.ToInt32(searchEdit.View.Columns[ValueName].Tag);
edit.Properties.View.ActiveFilterString = string.Format(ValueName + "< {0}", maxdm);
int maxdmIndex = dt.AsEnumerable().Select(t => t.Field<int>(ValueName)).Max();
newRow[ValueName] = maxdmIndex + 1;
newRow[TextName] = e.NewValue + "";
if (dt.Rows.Cast<DataRow>().FirstOrDefault(x => (x[ValueName] + "").Equals(e.NewValue + "")) == null)
{
dt.Rows.Add(newRow.ItemArray);
}
}
else if (dataType.Name == "String")
{
newRow[ValueName] = e.NewValue + "";
newRow[TextName] = e.NewValue + "";
if (dt.Rows.Cast<DataRow>().FirstOrDefault(x => (x[TextName] + "").Equals(e.NewValue + "")) == null)
{
dt.Rows.Add(newRow.ItemArray);
}
}
}
}
catch (Exception ex)
{
string Message = ErrorMessage.PromptErrorMessage(ex, Model.ModuleCode);
MessageUtil.Show(Message, ex.Message);
}
}
/// <summary>
/// <para>说明:创建多选框</para>
@@ -5563,14 +5672,25 @@ namespace Lskj.Control
//OldPasteMethod(e, _objData);
NewPasteMethod(e, _objData);
}
if (OnAllAfterParseCallBack != null)
{
OnAllAfterParseCallBack(null, null);
}
}
// 向下复制整行
if (e.Control && e.Shift && e.KeyCode == Keys.C)
{
DataRow rt = this.gridView.GetDataRow(gridView.FocusedRowHandle);
DataTable dt = (DataTable)this.GridControl.DataSource;
dt.Rows.Add(rt.ItemArray);
GridControl.DataSource = dt;
if (rt != null)
{
DataTable dt = (DataTable)this.GridControl.DataSource;
//dt.Rows.Add(rt.ItemArray);
DataRow newRow = dt.NewRow();
newRow.ItemArray = rt.ItemArray;
dt.Rows.InsertAt(newRow, gridView.FocusedRowHandle + 1);
GridControl.DataSource = dt;
}
}
// 复制单元格
if (e.Control && e.KeyCode == Keys.C)
@@ -6328,6 +6448,25 @@ namespace Lskj.Control
e.Appearance.BackColor = ColorTranslator.FromHtml(SystemInfo.Instance.SelectRowBackColor);
}
}
string PromptText = string.Empty;
// 判断单元格值是否为 null 或空
if (PromptMessage.TryGetValue(e.Column.FieldName, out PromptText) && (e.CellValue == null || string.IsNullOrEmpty(e.CellValue.ToString())))
{
// 绘制默认单元格背景
e.DefaultDraw();
// 绘制提示文本(灰色、斜体)
var appearance = e.Appearance;
appearance.ForeColor = Color.Gray;
appearance.FontStyleDelta = FontStyle.Italic;
e.Graphics.DrawString(PromptText, appearance.Font,
new SolidBrush(appearance.ForeColor), e.Bounds,
new StringFormat { Alignment = StringAlignment.Near, LineAlignment = StringAlignment.Center });
// 标记事件已处理,避免默认绘制覆盖
e.Handled = true;
}
}
catch (Exception ex)
{
@@ -6730,11 +6869,26 @@ namespace Lskj.Control
sqlValue = ReplaceHelper.ReplaceRowParam(rowItem, sqlValue);
}
DataTable table = MainImpl.GetDataTableResult(sqlValue);
if (model.SearchBoxAddition && (model.FieldType == ControlType.LabAutoGridValueParam || model.FieldType == ControlType.LabAutoGridTextParam || model.FieldType == ControlType.LabAutoCompleteTextParam || model.FieldType == ControlType.LabAutoCompleteValueParam))
{
if (this.ManuallyAddData.ContainsKey(model.FieldName))
{
List<DataRow> DataRows = this.ManuallyAddData[model.FieldName];
foreach (DataRow row in DataRows)
{
DataRow newrow = table.NewRow();
newrow.ItemArray = row.ItemArray;
table.Rows.Add(newrow);
}
}
}
edit.Properties.DataSource = table;
string[] columnsWidth = model != null ? model.LookUpFieldsWidth.Trim().TrimEnd(',').Split(',') : null;
if (model != null && !string.IsNullOrWhiteSpace(model.LookUpFieldsWidth) && columnsWidth.Length > 0)
{
@@ -7556,7 +7710,11 @@ namespace Lskj.Control
/* ========= 2. 创建“基本信息”Band ========= */
List<GridColumnModel> normalColumns = ColumnList.Where(o => o.IsCustomGroupField == 0 || o.IsCustomGroupField == 3).ToList();
GridBand normalBand = new GridBand { Caption = "基本信息", Fixed = FixedStyle.Left };
GridBand normalBand = new GridBand { Caption = "基本信息" };
if (this.AggregationFreeze) normalBand.Fixed = FixedStyle.Left;
bandedGridControlEx.BandedView.Bands.Add(normalBand);
foreach (var normalCol in normalColumns)
@@ -7689,7 +7847,9 @@ namespace Lskj.Control
/* ========= 2. 创建“基本信息”Band ========= */
List<GridColumnModel> normalColumns = ColumnList.Where(o => o.IsCustomGroupField == 0 || o.IsCustomGroupField == 3).ToList();
DevExpress.XtraTreeList.Columns.TreeListBand normalBand = new DevExpress.XtraTreeList.Columns.TreeListBand { Caption = "基本信息", Fixed = DevExpress.XtraTreeList.Columns.FixedStyle.Left };
DevExpress.XtraTreeList.Columns.TreeListBand normalBand = new DevExpress.XtraTreeList.Columns.TreeListBand { Caption = "基本信息" };
if (this.AggregationFreeze) normalBand.Fixed = DevExpress.XtraTreeList.Columns.FixedStyle.Left;
normalBand.AppearanceHeader.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
normalBand.AppearanceHeader.Options.UseTextOptions = true;
TreeBandedGridControlEx.TreeListObj.Bands.Add(normalBand);