diff --git a/Source/LibationWinForms/grid/ProductsGrid.Designer.cs b/Source/LibationWinForms/grid/ProductsGrid.Designer.cs index fa993918..b6659e37 100644 --- a/Source/LibationWinForms/grid/ProductsGrid.Designer.cs +++ b/Source/LibationWinForms/grid/ProductsGrid.Designer.cs @@ -78,7 +78,6 @@ this.dataGridViewTextBoxColumn10, this.dataGridViewTextBoxColumn11, this.dataGridViewImageButtonBoxColumn2}); - this.gridEntryDataGridView.ContextMenuStrip = this.contextMenuStrip1; this.gridEntryDataGridView.DataSource = this.gridEntryBindingSource; dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft; dataGridViewCellStyle1.BackColor = System.Drawing.SystemColors.Window; diff --git a/Source/LibationWinForms/grid/ProductsGrid.cs b/Source/LibationWinForms/grid/ProductsGrid.cs index aa12f2b8..341b650f 100644 --- a/Source/LibationWinForms/grid/ProductsGrid.cs +++ b/Source/LibationWinForms/grid/ProductsGrid.cs @@ -35,21 +35,20 @@ namespace LibationWinForms // alias private DataGridView _dataGridView => gridEntryDataGridView; - public ProductsGrid() + protected override void OnVisibleChanged(EventArgs e) { - InitializeComponent(); + contextMenuStrip1.Items.Add(new ToolStripLabel("Show / Hide Columns")); + contextMenuStrip1.Items.Add(new ToolStripSeparator()); //Restore Grid Display Settings var config = Configuration.Instance; var displayIndices = config.GridColumnsDisplayIndices; + var hiddenGridColumns = config.HiddenGridColumns; - contextMenuStrip1.Items.Add(new ToolStripLabel("Show / Hide Columns")); - contextMenuStrip1.Items.Add(new ToolStripSeparator()); - - var columnIndex = 0; + int columnIndex = 0, numVisible = 0; foreach (DataGridViewColumn column in _dataGridView.Columns) - { - var visible = !config.HiddenGridColumns.Contains(column.DataPropertyName); + { + var visible = !hiddenGridColumns.Contains(column.DataPropertyName); var itemName = column.DataPropertyName; var menuItem = new ToolStripMenuItem() @@ -63,8 +62,23 @@ namespace LibationWinForms column.Visible = visible; column.DisplayIndex = displayIndices[columnIndex++]; + column.HeaderCell.ContextMenuStrip = contextMenuStrip1; + + if (visible) numVisible++; } + if (numVisible == 0) + { + _dataGridView.ContextMenuStrip = contextMenuStrip1; + } + + base.OnVisibleChanged(e); + } + + public ProductsGrid() + { + InitializeComponent(); + // sorting breaks filters. must reapply filters after sorting _dataGridView.Sorted += Filter; _dataGridView.CellContentClick += DataGridView_CellContentClick; @@ -93,6 +107,12 @@ namespace LibationWinForms .Where(c=>!c.Visible) .Select(c => c.DataPropertyName) .ToArray(); + + _dataGridView.ContextMenuStrip = + _dataGridView.Columns + .Cast() + .Where(c => c.Visible).Any() ? + default(ContextMenuStrip) : contextMenuStrip1; } } private void EnableDoubleBuffering()