Add option to reorder ProductsGrid columns

This commit is contained in:
Michael Bucari-Tovo 2022-05-09 13:21:10 -06:00
parent aecc54401d
commit 9fe95bbddc
4 changed files with 39 additions and 15 deletions

View File

@ -128,6 +128,12 @@ namespace AppScaffolding
if (!config.Exists(nameof(config.HiddenGridColumns))) if (!config.Exists(nameof(config.HiddenGridColumns)))
config.HiddenGridColumns = Array.Empty<string>(); config.HiddenGridColumns = Array.Empty<string>();
if (!config.Exists(nameof(config.GridColumnsDisplayIndices)))
{
int startIndex = 0;
config.GridColumnsDisplayIndices = new int[30].Select(_ => startIndex++).ToArray();
}
} }
/// <summary>Initialize logging. Run after migration</summary> /// <summary>Initialize logging. Run after migration</summary>

View File

@ -187,6 +187,13 @@ namespace LibationFileManager
set => persistentDictionary.SetNonString(nameof(HiddenGridColumns), value); set => persistentDictionary.SetNonString(nameof(HiddenGridColumns), value);
} }
[Description("A DisplayIndex list of columns in ProductsGrid")]
public int[] GridColumnsDisplayIndices
{
get => persistentDictionary.GetNonString<int[]>(nameof(GridColumnsDisplayIndices));
set => persistentDictionary.SetNonString(nameof(GridColumnsDisplayIndices), value);
}
public enum BadBookAction public enum BadBookAction
{ {
[Description("Ask each time what action to take.")] [Description("Ask each time what action to take.")]

View File

@ -59,6 +59,7 @@
// //
this.gridEntryDataGridView.AllowUserToAddRows = false; this.gridEntryDataGridView.AllowUserToAddRows = false;
this.gridEntryDataGridView.AllowUserToDeleteRows = false; this.gridEntryDataGridView.AllowUserToDeleteRows = false;
this.gridEntryDataGridView.AllowUserToOrderColumns = true;
this.gridEntryDataGridView.AllowUserToResizeRows = false; this.gridEntryDataGridView.AllowUserToResizeRows = false;
this.gridEntryDataGridView.AutoGenerateColumns = false; this.gridEntryDataGridView.AutoGenerateColumns = false;
this.gridEntryDataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; this.gridEntryDataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
@ -96,6 +97,7 @@
this.gridEntryDataGridView.RowTemplate.Height = 82; this.gridEntryDataGridView.RowTemplate.Height = 82;
this.gridEntryDataGridView.Size = new System.Drawing.Size(1510, 380); this.gridEntryDataGridView.Size = new System.Drawing.Size(1510, 380);
this.gridEntryDataGridView.TabIndex = 0; this.gridEntryDataGridView.TabIndex = 0;
this.gridEntryDataGridView.ColumnDisplayIndexChanged += new System.Windows.Forms.DataGridViewColumnEventHandler(this.gridEntryDataGridView_ColumnDisplayIndexChanged);
// //
// dataGridViewImageButtonBoxColumn1 // dataGridViewImageButtonBoxColumn1
// //
@ -211,7 +213,7 @@
// contextMenuStrip1 // contextMenuStrip1
// //
this.contextMenuStrip1.Name = "contextMenuStrip1"; this.contextMenuStrip1.Name = "contextMenuStrip1";
this.contextMenuStrip1.Size = new System.Drawing.Size(181, 26); this.contextMenuStrip1.Size = new System.Drawing.Size(61, 4);
// //
// ProductsGrid // ProductsGrid
// //

View File

@ -39,15 +39,17 @@ namespace LibationWinForms
{ {
InitializeComponent(); InitializeComponent();
var hiddenGridEntries = Configuration.Instance.HiddenGridColumns; //Restore Grid Display Settings
var config = Configuration.Instance;
var displayIndices = config.GridColumnsDisplayIndices;
contextMenuStrip1.Items.Add(new ToolStripLabel("Show / Hide Columns")); contextMenuStrip1.Items.Add(new ToolStripLabel("Show / Hide Columns"));
contextMenuStrip1.Items.Add(new ToolStripSeparator()); contextMenuStrip1.Items.Add(new ToolStripSeparator());
var columnIndex = 0;
foreach (DataGridViewColumn column in _dataGridView.Columns) foreach (DataGridViewColumn column in _dataGridView.Columns)
{ {
var visible = !hiddenGridEntries.Contains(column.DataPropertyName); var visible = !config.HiddenGridColumns.Contains(column.DataPropertyName);
var itemName = column.DataPropertyName; var itemName = column.DataPropertyName;
var menuItem = new ToolStripMenuItem() var menuItem = new ToolStripMenuItem()
@ -60,6 +62,7 @@ namespace LibationWinForms
contextMenuStrip1.Items.Add(menuItem); contextMenuStrip1.Items.Add(menuItem);
column.Visible = visible; column.Visible = visible;
column.DisplayIndex = displayIndices[columnIndex++];
} }
// sorting breaks filters. must reapply filters after sorting // sorting breaks filters. must reapply filters after sorting
@ -74,7 +77,9 @@ namespace LibationWinForms
var menuItem = sender as ToolStripMenuItem; var menuItem = sender as ToolStripMenuItem;
var propertyName = menuItem.Tag as string; var propertyName = menuItem.Tag as string;
var column = _dataGridView.Columns.Cast<DataGridViewColumn>().FirstOrDefault(c => c.DataPropertyName == propertyName); var column = _dataGridView.Columns
.Cast<DataGridViewColumn>()
.FirstOrDefault(c => c.DataPropertyName == propertyName);
if (column != null) if (column != null)
{ {
@ -82,16 +87,12 @@ namespace LibationWinForms
menuItem.Checked = !visible; menuItem.Checked = !visible;
column.Visible = !visible; column.Visible = !visible;
var config = Configuration.Instance; Configuration.Instance.HiddenGridColumns =
_dataGridView.Columns
var hiddenColumns = new List<string>(config.HiddenGridColumns); .Cast<DataGridViewColumn>()
.Where(c=>!c.Visible)
if (column.Visible && hiddenColumns.Contains(propertyName)) .Select(c => c.DataPropertyName)
hiddenColumns.Remove(propertyName); .ToArray();
else if (!hiddenColumns.Contains(propertyName))
hiddenColumns.Add(propertyName);
config.HiddenGridColumns = hiddenColumns.ToArray();
} }
} }
private void EnableDoubleBuffering() private void EnableDoubleBuffering()
@ -276,5 +277,13 @@ namespace LibationWinForms
private GridEntry getGridEntry(int rowIndex) => _dataGridView.GetBoundItem<GridEntry>(rowIndex); private GridEntry getGridEntry(int rowIndex) => _dataGridView.GetBoundItem<GridEntry>(rowIndex);
#endregion #endregion
private void gridEntryDataGridView_ColumnDisplayIndexChanged(object sender, DataGridViewColumnEventArgs e)
{
Configuration.Instance.GridColumnsDisplayIndices
= _dataGridView.Columns
.Cast<DataGridViewColumn>()
.Select(c => c.DisplayIndex)
.ToArray();
}
} }
} }