feat: 完善个人设置及表格功能
This commit is contained in:
@@ -122,6 +122,8 @@ namespace Lskj.Control
|
||||
this.bandedGridView.PopupMenuShowing += new DevExpress.XtraGrid.Views.Grid.PopupMenuShowingEventHandler(this.OnGridViewPopupMenuShowing);
|
||||
this.bandedGridView.Click += new EventHandler(OnBandedGridView_Click);
|
||||
this.bandedGridView.DoubleClick += new EventHandler(OnBandedGridViewDoubleClick);
|
||||
// 多表头的操作列使用 BandedGridView,复用基类的禁编按钮点击处理。
|
||||
this.bandedGridView.MouseDown += GridView_MouseDown;
|
||||
this.bandedGridView.CustomDrawGroupRow += new RowObjectCustomDrawEventHandler(OnGridCustomDrawGroupRow);
|
||||
this.bandedGridView.LeftCoordChanged += OnBandedLeftCoordChanged;
|
||||
this.SetGridRowHeightAndFont();
|
||||
@@ -133,6 +135,236 @@ namespace Lskj.Control
|
||||
this.bandedGridView.ShowingEditor += GridView_ShowingEditor;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 多表头创建或重建操作列。
|
||||
/// 操作列不参与业务列配置,只挂到空白一级表头的最右侧。
|
||||
/// </summary>
|
||||
protected override void TryInitRightMenuBtnEdit(bool rebuild)
|
||||
{
|
||||
if (!this.gridColumnsInitialized || this.Model == null ||
|
||||
(this.CustomColumKey ?? string.Empty).Contains("BaseLeftGridView_"))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
BandedGridColumn oldColumn = this.bandedGridView.Columns["RightMenuBtnEdit"];
|
||||
bool showButtonColumn = this.rightMenuButtonTable != null &&
|
||||
this.rightMenuButtonTable.Rows.Cast<DataRow>().Any(row =>
|
||||
(row.Table.Columns.Contains("IcoName") &&
|
||||
!string.IsNullOrWhiteSpace(row["IcoName"] + "")) ||
|
||||
(row.Table.Columns.Contains("showtoolbar") &&
|
||||
"1".Equals(row["showtoolbar"] + "")));
|
||||
if (!showButtonColumn)
|
||||
{
|
||||
if (oldColumn != null)
|
||||
{
|
||||
this.RemoveRightMenuButtonColumn(oldColumn);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (oldColumn != null)
|
||||
{
|
||||
if (!rebuild)
|
||||
{
|
||||
return;
|
||||
}
|
||||
this.RemoveRightMenuButtonColumn(oldColumn);
|
||||
}
|
||||
|
||||
this.InitRightMenuBtnEdit(this.rightMenuButtonTable);
|
||||
DataTable dataSource = this.GridControl == null ? null : this.GridControl.DataSource as DataTable;
|
||||
if (dataSource != null && !dataSource.Columns.Contains("RightMenuBtnEdit"))
|
||||
{
|
||||
dataSource.Columns.Add("RightMenuBtnEdit");
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 删除旧操作列,同时保持空白一级表头下其他列的现有宽度。
|
||||
/// </summary>
|
||||
private void RemoveRightMenuButtonColumn(BandedGridColumn oldColumn)
|
||||
{
|
||||
GridBand ownerBand = oldColumn.OwnerBand;
|
||||
int oldColumnWidth = oldColumn.Width;
|
||||
int originalBandWidth = ownerBand == null ? 0 : ownerBand.Width;
|
||||
Dictionary<BandedGridColumn, int> originalColumnWidths = ownerBand == null
|
||||
? new Dictionary<BandedGridColumn, int>()
|
||||
: ownerBand.Columns.Cast<BandedGridColumn>()
|
||||
.Where(column => column != oldColumn)
|
||||
.ToDictionary(column => column, column => column.Width);
|
||||
|
||||
this.bandedGridView.BeginUpdate();
|
||||
try
|
||||
{
|
||||
this.bandedGridView.Columns.Remove(oldColumn);
|
||||
if (ownerBand == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (ownerBand.Columns.Count == 0)
|
||||
{
|
||||
this.bandedGridView.Bands.Remove(ownerBand);
|
||||
}
|
||||
else
|
||||
{
|
||||
ownerBand.Width = Math.Max(0, originalBandWidth - oldColumnWidth);
|
||||
foreach (KeyValuePair<BandedGridColumn, int> item in originalColumnWidths)
|
||||
{
|
||||
item.Key.Width = item.Value;
|
||||
}
|
||||
}
|
||||
}
|
||||
finally
|
||||
{
|
||||
this.bandedGridView.EndUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 创建多表头操作列,并将其放到空白一级表头的最右侧。
|
||||
/// </summary>
|
||||
protected override void InitRightMenuBtnEdit(DataTable rightMenuTab)
|
||||
{
|
||||
if (rightMenuTab == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
BandedGridColumn gridColumn = new BandedGridColumn();
|
||||
gridColumn.FieldName = "RightMenuBtnEdit";
|
||||
gridColumn.Name = "RightMenuBtnEdit";
|
||||
gridColumn.Caption = "操作列";
|
||||
gridColumn.Visible = true;
|
||||
gridColumn.OptionsColumn.AllowEdit = true;
|
||||
|
||||
RepositoryItemButtonEdit itemButtonEdit = new RepositoryItemButtonEdit();
|
||||
itemButtonEdit.Buttons.Clear();
|
||||
itemButtonEdit.AppearanceDisabled.Options.UseTextOptions = true;
|
||||
itemButtonEdit.AppearanceDisabled.TextOptions.HAlignment = HorzAlignment.Center;
|
||||
itemButtonEdit.TextEditStyle = TextEditStyles.HideTextEditor;
|
||||
itemButtonEdit.ButtonsStyle = BorderStyles.UltraFlat;
|
||||
itemButtonEdit.BorderStyle = BorderStyles.NoBorder;
|
||||
itemButtonEdit.ButtonClick += new ButtonPressedEventHandler(OnItemButtonEdit_ButtonClick);
|
||||
|
||||
int columnWidth = 0;
|
||||
if (rightMenuTab.Columns.Contains("IcoName"))
|
||||
{
|
||||
DataRow[] rightMenuButtons = rightMenuTab.Select()
|
||||
.Where(n => !string.IsNullOrEmpty(n["IcoName"] + ""))
|
||||
.ToArray();
|
||||
int pictureWidth = 30;
|
||||
foreach (DataRow rightMenu in rightMenuButtons)
|
||||
{
|
||||
GridRightMenuModel menuModel = new GridRightMenuModel(rightMenu);
|
||||
if (string.IsNullOrWhiteSpace(menuModel.MenuName))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
EditorButton editorButton = new EditorButton();
|
||||
editorButton.Appearance.BackColor = Color.Transparent;
|
||||
if (!string.IsNullOrEmpty(menuModel.IcoName))
|
||||
{
|
||||
try
|
||||
{
|
||||
Image image = GetRightMenuButtonImage(menuModel.IcoName);
|
||||
if (image != null && image.Width > 30)
|
||||
{
|
||||
pictureWidth = image.Width;
|
||||
}
|
||||
editorButton.Image = image;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
}
|
||||
editorButton.ToolTip = menuModel.MenuName;
|
||||
editorButton.Kind = ButtonPredefines.Glyph;
|
||||
editorButton.Width = pictureWidth;
|
||||
editorButton.Tag = menuModel;
|
||||
itemButtonEdit.Buttons.Add(editorButton);
|
||||
}
|
||||
columnWidth = rightMenuButtons.Length * pictureWidth;
|
||||
}
|
||||
|
||||
if (rightMenuTab.Columns.Contains("showtoolbar"))
|
||||
{
|
||||
DataRow[] rightMenuTextButtons = rightMenuTab.Select()
|
||||
.Where(n => "1".Equals(n["showtoolbar"] + ""))
|
||||
.ToArray();
|
||||
foreach (DataRow rightMenu in rightMenuTextButtons)
|
||||
{
|
||||
GridRightMenuModel menuModel = new GridRightMenuModel(rightMenu);
|
||||
if (string.IsNullOrWhiteSpace(menuModel.MenuName))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
EditorButton editorButton = new EditorButton();
|
||||
editorButton.Caption = menuModel.MenuName + "";
|
||||
editorButton.ToolTip = menuModel.MenuName;
|
||||
editorButton.Kind = ButtonPredefines.Glyph;
|
||||
editorButton.Width = this.CalculateTextWidth(editorButton.Caption, editorButton.Appearance.Font);
|
||||
editorButton.Tag = menuModel;
|
||||
editorButton.Appearance.BackColor = Color.FromArgb(240, 240, 240);
|
||||
editorButton.Appearance.BorderColor = Color.FromArgb(180, 180, 180);
|
||||
editorButton.Appearance.ForeColor = Color.FromArgb(50, 50, 50);
|
||||
editorButton.Appearance.Options.UseBackColor = true;
|
||||
editorButton.Appearance.Options.UseBorderColor = true;
|
||||
editorButton.Appearance.Options.UseForeColor = true;
|
||||
itemButtonEdit.Buttons.Add(editorButton);
|
||||
columnWidth += editorButton.Width;
|
||||
}
|
||||
}
|
||||
|
||||
gridColumn.ColumnEdit = itemButtonEdit;
|
||||
gridColumn.MaxWidth = columnWidth;
|
||||
gridColumn.MinWidth = columnWidth;
|
||||
gridColumn.Width = columnWidth;
|
||||
|
||||
GridBand emptyBand = this.bandedGridView.Bands.Cast<GridBand>()
|
||||
.FirstOrDefault(x => string.IsNullOrEmpty(x.Caption));
|
||||
if (emptyBand == null)
|
||||
{
|
||||
emptyBand = new GridBand();
|
||||
emptyBand.Caption = "";
|
||||
emptyBand.AppearanceHeader.Options.UseFont = true;
|
||||
emptyBand.AppearanceHeader.Font = new Font("宋体", 9, FontStyle.Bold);
|
||||
emptyBand.AppearanceHeader.Options.UseTextOptions = true;
|
||||
emptyBand.AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Center;
|
||||
this.bandedGridView.Bands.Add(emptyBand);
|
||||
}
|
||||
|
||||
int originalBandWidth = emptyBand.Width;
|
||||
Dictionary<BandedGridColumn, int> originalColumnWidths = emptyBand.Columns
|
||||
.Cast<BandedGridColumn>()
|
||||
.ToDictionary(column => column, column => column.Width);
|
||||
|
||||
this.bandedGridView.BeginUpdate();
|
||||
try
|
||||
{
|
||||
emptyBand.Columns.Add(gridColumn);
|
||||
this.bandedGridView.Columns.Add(gridColumn);
|
||||
gridColumn.ColVIndex = emptyBand.Columns.Count - 1;
|
||||
|
||||
// DevExpress 默认保持 Band 总宽度,新增列时会压缩同一 Band 下的原列。
|
||||
// 恢复原列宽,并单独为操作列扩展一级表头宽度。
|
||||
emptyBand.Width = originalBandWidth + columnWidth;
|
||||
foreach (KeyValuePair<BandedGridColumn, int> item in originalColumnWidths)
|
||||
{
|
||||
item.Key.Width = item.Value;
|
||||
}
|
||||
gridColumn.Width = columnWidth;
|
||||
}
|
||||
finally
|
||||
{
|
||||
this.bandedGridView.EndUpdate();
|
||||
}
|
||||
this.bandedGridView.OptionsBehavior.EditorShowMode = EditorShowMode.MouseDown;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
@@ -574,6 +806,7 @@ namespace Lskj.Control
|
||||
protected void AddBandColumns(DataTable table, bool readOnly = true)
|
||||
{
|
||||
if (table == null) return;
|
||||
this.gridColumnsInitialized = false;
|
||||
this.InitGridColumsTab = table;
|
||||
this.mControlList.Clear();
|
||||
List<String> bandFieldstr = new List<String>();
|
||||
@@ -844,6 +1077,8 @@ namespace Lskj.Control
|
||||
// 加载数据源
|
||||
//BindDataSource();
|
||||
this.SetCustomColumns();//加载多表头自定义列
|
||||
this.gridColumnsInitialized = true;
|
||||
this.TryInitRightMenuBtnEdit(false);
|
||||
|
||||
//多表头冻结
|
||||
foreach (BandedGridColumn item in FrozenColumns)
|
||||
|
||||
Reference in New Issue
Block a user