diff --git a/Source/AppScaffolding/LibationScaffolding.cs b/Source/AppScaffolding/LibationScaffolding.cs index 63818d6d..493b5964 100644 --- a/Source/AppScaffolding/LibationScaffolding.cs +++ b/Source/AppScaffolding/LibationScaffolding.cs @@ -128,6 +128,12 @@ namespace AppScaffolding if (!config.Exists(nameof(config.HiddenGridColumns))) config.HiddenGridColumns = Array.Empty(); + + if (!config.Exists(nameof(config.GridColumnsDisplayIndices))) + { + int startIndex = 0; + config.GridColumnsDisplayIndices = new int[30].Select(_ => startIndex++).ToArray(); + } } /// Initialize logging. Run after migration diff --git a/Source/LibationFileManager/Configuration.cs b/Source/LibationFileManager/Configuration.cs index 0a18b770..c9610fb1 100644 --- a/Source/LibationFileManager/Configuration.cs +++ b/Source/LibationFileManager/Configuration.cs @@ -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(nameof(GridColumnsDisplayIndices)); + set => persistentDictionary.SetNonString(nameof(GridColumnsDisplayIndices), value); + } + public enum BadBookAction { [Description("Ask each time what action to take.")] diff --git a/Source/LibationWinForms/grid/ProductsGrid.Designer.cs b/Source/LibationWinForms/grid/ProductsGrid.Designer.cs index 0aec4e05..fa993918 100644 --- a/Source/LibationWinForms/grid/ProductsGrid.Designer.cs +++ b/Source/LibationWinForms/grid/ProductsGrid.Designer.cs @@ -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 // diff --git a/Source/LibationWinForms/grid/ProductsGrid.cs b/Source/LibationWinForms/grid/ProductsGrid.cs index e6d71366..aa12f2b8 100644 --- a/Source/LibationWinForms/grid/ProductsGrid.cs +++ b/Source/LibationWinForms/grid/ProductsGrid.cs @@ -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().FirstOrDefault(c => c.DataPropertyName == propertyName); + var column = _dataGridView.Columns + .Cast() + .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(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() + .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(rowIndex); #endregion + private void gridEntryDataGridView_ColumnDisplayIndexChanged(object sender, DataGridViewColumnEventArgs e) + { + Configuration.Instance.GridColumnsDisplayIndices + = _dataGridView.Columns + .Cast() + .Select(c => c.DisplayIndex) + .ToArray(); + } } }