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)))
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>

View File

@ -187,6 +187,13 @@ namespace LibationFileManager
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
{
[Description("Ask each time what action to take.")]

View File

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

View File

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