From 99d5bbb39856c788023adbdc592b927befcb1320 Mon Sep 17 00:00:00 2001 From: Erik Darling <2136037+erikdarlingdata@users.noreply.github.com> Date: Tue, 17 Mar 2026 21:00:46 -0400 Subject: [PATCH] Hide all empty DataGrids to prevent white scrollbar artifacts Collapse DataGrid.Visibility when data count is 0 for all FinOps grids: Recommendations, DatabaseResources, StorageGrowth, WaitCategorySummary, ExpensiveQueries, MemoryGrantEfficiency, HighImpact. Co-Authored-By: Claude Opus 4.6 (1M context) --- Dashboard/Controls/FinOpsContent.xaml.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Dashboard/Controls/FinOpsContent.xaml.cs b/Dashboard/Controls/FinOpsContent.xaml.cs index c1024f2..990ee25 100644 --- a/Dashboard/Controls/FinOpsContent.xaml.cs +++ b/Dashboard/Controls/FinOpsContent.xaml.cs @@ -145,6 +145,7 @@ private async Task LoadRecommendationsAsync() { var data = await _databaseService.GetFinOpsRecommendationsAsync(_currentServerMonthlyCost); RecommendationsDataGrid.ItemsSource = data; + RecommendationsDataGrid.Visibility = data.Count > 0 ? Visibility.Visible : Visibility.Collapsed; RecommendationsNoDataMessage.Visibility = data.Count == 0 ? Visibility.Visible : Visibility.Collapsed; RecommendationsCountIndicator.Text = data.Count > 0 ? $"{data.Count} recommendation(s)" : ""; } @@ -366,6 +367,7 @@ private async Task LoadDatabaseResourcesAsync() var hoursBack = GetResourceUsageHoursBack(); var data = await _databaseService.GetFinOpsDatabaseResourceUsageAsync(hoursBack); DatabaseResourcesDataGrid.ItemsSource = data; + DatabaseResourcesDataGrid.Visibility = data.Count > 0 ? Visibility.Visible : Visibility.Collapsed; DatabaseResourcesNoDataMessage.Visibility = data.Count == 0 ? Visibility.Visible : Visibility.Collapsed; DbResourcesCountIndicator.Text = data.Count > 0 ? $"{data.Count} database(s)" : ""; } @@ -387,6 +389,7 @@ private async Task LoadStorageGrowthAsync() { var data = await _databaseService.GetFinOpsStorageGrowthAsync(); StorageGrowthDataGrid.ItemsSource = data; + StorageGrowthDataGrid.Visibility = data.Count > 0 ? Visibility.Visible : Visibility.Collapsed; StorageGrowthNoDataMessage.Visibility = data.Count == 0 ? Visibility.Visible : Visibility.Collapsed; StorageGrowthCountIndicator.Text = data.Count > 0 ? $"{data.Count} database(s)" : ""; } @@ -491,6 +494,7 @@ private async Task LoadWaitCategorySummaryAsync() } WaitCategorySummaryDataGrid.ItemsSource = data; + WaitCategorySummaryDataGrid.Visibility = data.Count > 0 ? Visibility.Visible : Visibility.Collapsed; WaitCategorySummaryNoDataMessage.Visibility = data.Count == 0 ? Visibility.Visible : Visibility.Collapsed; } catch (Exception ex) @@ -525,6 +529,7 @@ private async Task LoadExpensiveQueriesAsync() } ExpensiveQueriesDataGrid.ItemsSource = data; + ExpensiveQueriesDataGrid.Visibility = data.Count > 0 ? Visibility.Visible : Visibility.Collapsed; ExpensiveQueriesNoDataMessage.Visibility = data.Count == 0 ? Visibility.Visible : Visibility.Collapsed; ExpensiveQueriesCountIndicator.Text = data.Count > 0 ? $"{data.Count} query(s)" : ""; } @@ -542,6 +547,7 @@ private async Task LoadMemoryGrantEfficiencyAsync() { var data = await _databaseService.GetFinOpsMemoryGrantEfficiencyAsync(); MemoryGrantEfficiencyDataGrid.ItemsSource = data; + MemoryGrantEfficiencyDataGrid.Visibility = data.Count > 0 ? Visibility.Visible : Visibility.Collapsed; MemoryGrantEfficiencyNoDataMessage.Visibility = data.Count == 0 ? Visibility.Visible : Visibility.Collapsed; } catch (Exception ex) @@ -765,6 +771,7 @@ private async Task LoadHighImpactQueriesAsync() var hoursBack = GetHighImpactHoursBack(); var data = await _databaseService.GetFinOpsHighImpactQueriesAsync(hoursBack); HighImpactDataGrid.ItemsSource = data; + HighImpactDataGrid.Visibility = data.Count > 0 ? Visibility.Visible : Visibility.Collapsed; HighImpactNoDataMessage.Visibility = data.Count == 0 ? Visibility.Visible : Visibility.Collapsed; HighImpactCountIndicator.Text = data.Count > 0 ? $"{data.Count} high-impact query(s)" : ""; }