Skip to content

[DataGrid] Add IsFixed parameter #3921

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 10 commits into from
Closed

[DataGrid] Add IsFixed parameter #3921

wants to merge 10 commits into from

Conversation

Copilot
Copy link
Contributor

@Copilot Copilot AI commented Jun 15, 2025

This PR adds an IsFixed parameter to the FluentDataGrid component that allows developers to optimize performance when working with static datasets that are not expected to change during the grid's lifetime. Fix #3911

Changes

New Parameter

  • Added IsFixed boolean parameter with default value false to maintain backward compatibility
  • When IsFixed=true, the grid optimizes refresh behavior for static datasets
  • When IsFixed=false (default), maintains existing behavior from v4.11.9

Performance Optimizations

When IsFixed=true:

  • Skips hash computation for Items collection change detection
  • Reduces automatic RefreshItems calls to only forced or initial requests
  • Maintains full functionality for pagination, explicit refreshes, and data source changes

Usage Example

<!-- Default behavior (existing functionality) -->
<FluentDataGrid Items="@dynamicData.AsQueryable()">
    <PropertyColumn Property="@(x => x.Name)" />
</FluentDataGrid>

<!-- Optimized for static datasets -->
<FluentDataGrid Items="@staticData.AsQueryable()" IsFixed="true">
    <PropertyColumn Property="@(x => x.Name)" />
</FluentDataGrid>

Implementation Details

  • Modified OnParametersSetAsync() to respect the IsFixed parameter in change detection logic
  • Enhanced RefreshDataCoreAsync() to be more conservative about automatic refreshes when IsFixed=true
  • Added comprehensive test coverage including edge cases and explicit refresh scenarios

Backward Compatibility

  • Default value of false ensures existing code continues to work unchanged
  • All existing functionality (pagination, sorting, explicit refreshes) remains fully functional
  • No breaking changes to existing APIs

This implementation replaces the automatic refresh logic that was added in v4.12.0 with more controlled behavior when developers know their dataset is static, providing significant performance benefits for such scenarios.

Fixes #3920.

Warning

Firewall rules blocked me from connecting to one or more addresses

I tried to connect to the following addresses, but was blocked by firewall rules:

  • 7tjvsblobprodcus341.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj (dns block)
  • 80zvsblobprodcus35.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj (dns block)
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj -f net9.0 (dns block)
    • Triggering command: dotnet test tests/Core/Microsoft.FluentUI.AspNetCore.Components.Tests.csproj -f net9.0 --filter FluentDataGrid_IsFixed --verbosity normal (dns block)
  • 8xbvsblobprodcus382.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj (dns block)
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj -f net9.0 (dns block)
    • Triggering command: dotnet test tests/Core/Microsoft.FluentUI.AspNetCore.Components.Tests.csproj -f net9.0 --filter FluentDataGrid_IsFixed --verbosity normal (dns block)
  • aka.ms
    • Triggering command: curl -I -sSL --retry 5 --retry-delay 2 --connect-timeout 15 REDACTED (dns block)
  • bcnvsblobprodcus378.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj (dns block)
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj -f net9.0 (dns block)
    • Triggering command: dotnet test tests/Core/Microsoft.FluentUI.AspNetCore.Components.Tests.csproj -f net9.0 --filter FluentDataGrid_IsFixed --verbosity normal (dns block)
  • c50vsblobprodcus330.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj (dns block)
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj -f net9.0 (dns block)
    • Triggering command: dotnet test tests/Core/Microsoft.FluentUI.AspNetCore.Components.Tests.csproj -f net9.0 --filter FluentDataGrid_IsFixed --verbosity normal (dns block)
  • c78vsblobprodcus322.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj (dns block)
  • d0svsblobprodcus381.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj (dns block)
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj -f net9.0 (dns block)
    • Triggering command: dotnet test tests/Core/Microsoft.FluentUI.AspNetCore.Components.Tests.csproj -f net9.0 --filter FluentDataGrid_IsFixed --verbosity normal (dns block)
  • imzvsblobprodcus368.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj (dns block)
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj -f net9.0 (dns block)
    • Triggering command: dotnet test tests/Core/Microsoft.FluentUI.AspNetCore.Components.Tests.csproj -f net9.0 --filter FluentDataGrid_IsFixed --verbosity normal (dns block)
  • jd4vsblobprodcus366.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj (dns block)
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj -f net9.0 (dns block)
    • Triggering command: dotnet test tests/Core/Microsoft.FluentUI.AspNetCore.Components.Tests.csproj -f net9.0 --filter FluentDataGrid_IsFixed --verbosity normal (dns block)
  • jrqvsblobprodcus343.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj (dns block)
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj -f net9.0 (dns block)
    • Triggering command: dotnet test tests/Core/Microsoft.FluentUI.AspNetCore.Components.Tests.csproj -f net9.0 --filter FluentDataGrid_IsFixed --verbosity normal (dns block)
  • kh4vsblobprodcus325.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj (dns block)
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj -f net9.0 (dns block)
    • Triggering command: dotnet test tests/Core/Microsoft.FluentUI.AspNetCore.Components.Tests.csproj -f net9.0 --filter FluentDataGrid_IsFixed --verbosity normal (dns block)
  • kmuvsblobprodcus389.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj (dns block)
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj -f net9.0 (dns block)
    • Triggering command: dotnet test tests/Core/Microsoft.FluentUI.AspNetCore.Components.Tests.csproj -f net9.0 --filter FluentDataGrid_IsFixed --verbosity normal (dns block)
  • l49vsblobprodcus358.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj (dns block)
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj -f net9.0 (dns block)
    • Triggering command: dotnet test tests/Core/Microsoft.FluentUI.AspNetCore.Components.Tests.csproj -f net9.0 --filter FluentDataGrid_IsFixed --verbosity normal (dns block)
  • lylvsblobprodcus31.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj (dns block)
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj -f net9.0 (dns block)
    • Triggering command: dotnet test tests/Core/Microsoft.FluentUI.AspNetCore.Components.Tests.csproj -f net9.0 --filter FluentDataGrid_IsFixed --verbosity normal (dns block)
  • nn8vsblobprodcus340.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj (dns block)
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj -f net9.0 (dns block)
    • Triggering command: dotnet test tests/Core/Microsoft.FluentUI.AspNetCore.Components.Tests.csproj -f net9.0 --filter FluentDataGrid_IsFixed --verbosity normal (dns block)
  • o3svsblobprodcus318.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj (dns block)
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj -f net9.0 (dns block)
    • Triggering command: dotnet test tests/Core/Microsoft.FluentUI.AspNetCore.Components.Tests.csproj -f net9.0 --filter FluentDataGrid_IsFixed --verbosity normal (dns block)
  • uy6vsblobprodcus34.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj (dns block)
  • vb4vsblobprodcus33.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj (dns block)
  • x3yvsblobprodcus370.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj (dns block)
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj -f net9.0 (dns block)
    • Triggering command: dotnet test tests/Core/Microsoft.FluentUI.AspNetCore.Components.Tests.csproj -f net9.0 --filter FluentDataGrid_IsFixed --verbosity normal (dns block)

If you need me to access, download, or install something from one of these locations, you can either:


💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.

@vnbaaij vnbaaij changed the title [WIP] feat: Add IsFixed parameter to DataGrid [DataGrid] Add IsFixed parameter Jun 15, 2025
Copilot AI and others added 2 commits June 15, 2025 12:25
Co-authored-by: vnbaaij <1761079+vnbaaij@users.noreply.github.com>
Co-authored-by: vnbaaij <1761079+vnbaaij@users.noreply.github.com>
@Copilot Copilot AI changed the title [DataGrid] Add IsFixed parameter feat: Add IsFixed parameter to FluentDataGrid for static datasets Jun 15, 2025
@Copilot Copilot AI requested a review from vnbaaij June 15, 2025 12:28
Copilot finished work on behalf of vnbaaij June 15, 2025 12:28
@vnbaaij
Copy link
Collaborator

vnbaaij commented Jun 15, 2025

@copilot with the suggested changes, can we remove the hash calculation on the items in the DataGrid (which was added in v4.12.0)?

Copy link

github-actions bot commented Jun 15, 2025

✅ All tests passed successfully

Details on your Workflow / Core Tests page.

Copy link

github-actions bot commented Jun 15, 2025

Summary - Unit Tests Code Coverage

Summary
Generated on: 6/16/2025 - 8:48:14 PM
Coverage date: 6/16/2025 - 8:48:07 PM
Parser: Cobertura
Assemblies: 1
Classes: 254
Files: 364
Line coverage: 60.6% (5986 of 9877)
Covered lines: 5986
Uncovered lines: 3891
Coverable lines: 9877
Total lines: 32702
Branch coverage: 52.8% (3008 of 5691)
Covered branches: 3008
Total branches: 5691
Method coverage: Feature is only available for sponsors
Tag: 3785_15691509683

Coverage

Microsoft.FluentUI.AspNetCore.Components - 60.6%
Name Line Branch
Microsoft.FluentUI.AspNetCore.Components 60.6% 52.8%
Microsoft.FluentUI.AspNetCore.Components.AccordionChangeEventArgs 0%
Microsoft.FluentUI.AspNetCore.Components.ActionButton`1 50%
Microsoft.FluentUI.AspNetCore.Components.ActionLink`1 0%
Microsoft.FluentUI.AspNetCore.Components.CalendarExtended 95% 86.6%
Microsoft.FluentUI.AspNetCore.Components.CalendarTitles 87% 76.6%
Microsoft.FluentUI.AspNetCore.Components.CheckboxChangeEventArgs 50%
Microsoft.FluentUI.AspNetCore.Components.ColumnBase`1 25.4% 20.8%
Microsoft.FluentUI.AspNetCore.Components.ColumnKeyGridSort`1 0% 0%
Microsoft.FluentUI.AspNetCore.Components.ColumnOptionsLabels 80%
Microsoft.FluentUI.AspNetCore.Components.ColumnResizeLabels 90.9%
Microsoft.FluentUI.AspNetCore.Components.ColumnResizeOptions`1 0% 0%
Microsoft.FluentUI.AspNetCore.Components.ColumnSortLabels 85.7%
Microsoft.FluentUI.AspNetCore.Components.CommunicationToast 0% 0%
Microsoft.FluentUI.AspNetCore.Components.CommunicationToastContent 0%
Microsoft.FluentUI.AspNetCore.Components.ComponentParameters 16.6% 0%
Microsoft.FluentUI.AspNetCore.Components.Components.DateTime.RangeOfDates 100% 50%
Microsoft.FluentUI.AspNetCore.Components.Components.Tooltip.TooltipGlobalOp
tions
40%
Microsoft.FluentUI.AspNetCore.Components.Components.Tooltip.TooltipOptions 0%
Microsoft.FluentUI.AspNetCore.Components.Components.Tooltip.TooltipService 57.5% 30%
Microsoft.FluentUI.AspNetCore.Components.CountdownTimer 0% 0%
Microsoft.FluentUI.AspNetCore.Components.CustomEmoji 0% 0%
Microsoft.FluentUI.AspNetCore.Components.CustomIcon 0%
Microsoft.FluentUI.AspNetCore.Components.DataGrid.Infrastructure.AsyncQuery
ExecutorSupplier
38.4% 43.7%
Microsoft.FluentUI.AspNetCore.Components.DataGrid.Infrastructure.ColumnsCol
lectedNotifier`1
87.5% 50%
Microsoft.FluentUI.AspNetCore.Components.DataGrid.Infrastructure.Defer 100%
Microsoft.FluentUI.AspNetCore.Components.DataGrid.Infrastructure.DisplayAtt
ributeExtensions
66.6% 50%
Microsoft.FluentUI.AspNetCore.Components.DataGrid.Infrastructure.InternalGr
idContext`1
90.9% 100%
Microsoft.FluentUI.AspNetCore.Components.DataGridCellFocusEventArgs 0%
Microsoft.FluentUI.AspNetCore.Components.DataGridRowFocusEventArgs 0%
Microsoft.FluentUI.AspNetCore.Components.DialogEventArgs 0%
Microsoft.FluentUI.AspNetCore.Components.DialogHelper 0%
Microsoft.FluentUI.AspNetCore.Components.DialogInstance 92.3% 75%
Microsoft.FluentUI.AspNetCore.Components.DialogParameters 90.9% 100%
Microsoft.FluentUI.AspNetCore.Components.DialogParameters`1 100%
Microsoft.FluentUI.AspNetCore.Components.DialogReference 36.3% 37.5%
Microsoft.FluentUI.AspNetCore.Components.DialogResult 0% 0%
Microsoft.FluentUI.AspNetCore.Components.DialogService 4.1% 2.6%
Microsoft.FluentUI.AspNetCore.Components.Emoji 0% 0%
Microsoft.FluentUI.AspNetCore.Components.EmojiCompress 0% 0%
Microsoft.FluentUI.AspNetCore.Components.EmojiExtensions 0% 0%
Microsoft.FluentUI.AspNetCore.Components.EmojiInfo 0%
Microsoft.FluentUI.AspNetCore.Components.Extensions.AdditionalAttributesExt
ensions
100% 100%
Microsoft.FluentUI.AspNetCore.Components.Extensions.BooleanExtensions 100% 100%
Microsoft.FluentUI.AspNetCore.Components.Extensions.DateTimeExtensions 81.2% 85%
Microsoft.FluentUI.AspNetCore.Components.Extensions.EnumExtensions 70.5% 59%
Microsoft.FluentUI.AspNetCore.Components.Extensions.FluentInputExtensions 25.9% 16.6%
Microsoft.FluentUI.AspNetCore.Components.Extensions.UrlFormatterExtensions 100% 75%
Microsoft.FluentUI.AspNetCore.Components.FluentAccessibilityStatus 0% 0%
Microsoft.FluentUI.AspNetCore.Components.FluentAccordion 59.2% 0%
Microsoft.FluentUI.AspNetCore.Components.FluentAccordionItem 78.5% 35.7%
Microsoft.FluentUI.AspNetCore.Components.FluentAnchor 90% 67.8%
Microsoft.FluentUI.AspNetCore.Components.FluentAnchoredRegion 87.7% 60%
Microsoft.FluentUI.AspNetCore.Components.FluentAppBar 65% 38.8%
Microsoft.FluentUI.AspNetCore.Components.FluentAppBarItem 85.2% 60%
Microsoft.FluentUI.AspNetCore.Components.FluentAutocomplete`1 87.5% 76%
Microsoft.FluentUI.AspNetCore.Components.FluentBadge 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentBodyContent 100%
Microsoft.FluentUI.AspNetCore.Components.FluentBreadcrumb 100%
Microsoft.FluentUI.AspNetCore.Components.FluentBreadcrumbItem 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentButton 84.3% 64.5%
Microsoft.FluentUI.AspNetCore.Components.FluentCalendar 83.4% 78.3%
Microsoft.FluentUI.AspNetCore.Components.FluentCalendarBase 93.7% 81.2%
Microsoft.FluentUI.AspNetCore.Components.FluentCalendarDay 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentCalendarMonth 92.3% 64.2%
Microsoft.FluentUI.AspNetCore.Components.FluentCalendarYear 84.6% 58.3%
Microsoft.FluentUI.AspNetCore.Components.FluentCard 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentCheckbox 91.1% 87%
Microsoft.FluentUI.AspNetCore.Components.FluentCollapsibleRegion 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentCombobox`1 69% 60%
Microsoft.FluentUI.AspNetCore.Components.FluentComponentBase 90.9% 50%
Microsoft.FluentUI.AspNetCore.Components.FluentCounterBadge 92.3% 84.8%
Microsoft.FluentUI.AspNetCore.Components.FluentDataGrid`1 59.4% 48.8%
Microsoft.FluentUI.AspNetCore.Components.FluentDataGridCell`1 79.5% 70%
Microsoft.FluentUI.AspNetCore.Components.FluentDataGridRow`1 57.1% 37.5%
Microsoft.FluentUI.AspNetCore.Components.FluentDatePicker 85.4% 56.2%
Microsoft.FluentUI.AspNetCore.Components.FluentDesignSystemProvider 100% 50%
Microsoft.FluentUI.AspNetCore.Components.FluentDesignTheme 0% 0%
Microsoft.FluentUI.AspNetCore.Components.FluentDialog 58.9% 62.7%
Microsoft.FluentUI.AspNetCore.Components.FluentDialogBody 100%
Microsoft.FluentUI.AspNetCore.Components.FluentDialogFooter 66.6% 44.1%
Microsoft.FluentUI.AspNetCore.Components.FluentDialogHeader 85.1% 78.1%
Microsoft.FluentUI.AspNetCore.Components.FluentDialogProvider 60.2% 52.1%
Microsoft.FluentUI.AspNetCore.Components.FluentDivider 86.9% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentDragContainer`1 71.4%
Microsoft.FluentUI.AspNetCore.Components.FluentDragEventArgs`1 0%
Microsoft.FluentUI.AspNetCore.Components.FluentDropZone`1 21.1% 4.3%
Microsoft.FluentUI.AspNetCore.Components.FluentEditForm 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentEmoji`1 0% 0%
Microsoft.FluentUI.AspNetCore.Components.FluentFlipper 100%
Microsoft.FluentUI.AspNetCore.Components.FluentFooter 100%
Microsoft.FluentUI.AspNetCore.Components.FluentGrid 72.2% 50%
Microsoft.FluentUI.AspNetCore.Components.FluentGridItem 87.5% 82.5%
Microsoft.FluentUI.AspNetCore.Components.FluentHeader 100%
Microsoft.FluentUI.AspNetCore.Components.FluentHighlighter 80% 20%
Microsoft.FluentUI.AspNetCore.Components.FluentHorizontalScroll 60.6% 20%
Microsoft.FluentUI.AspNetCore.Components.FluentIcon`1 88.3% 81.2%
Microsoft.FluentUI.AspNetCore.Components.FluentInputBase`1 69% 61.2%
Microsoft.FluentUI.AspNetCore.Components.FluentInputFile 89.5% 79.6%
Microsoft.FluentUI.AspNetCore.Components.FluentInputFileBuffer 100%
Microsoft.FluentUI.AspNetCore.Components.FluentInputFileEventArgs 92.3%
Microsoft.FluentUI.AspNetCore.Components.FluentInputLabel 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentKeyCode 90.3% 90%
Microsoft.FluentUI.AspNetCore.Components.FluentKeyCodeEventArgs 100% 75%
Microsoft.FluentUI.AspNetCore.Components.FluentKeyCodeProvider 40% 0%
Microsoft.FluentUI.AspNetCore.Components.FluentLabel 98% 88.8%
Microsoft.FluentUI.AspNetCore.Components.FluentLayout 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentListbox`1 94.4% 83.3%
Microsoft.FluentUI.AspNetCore.Components.FluentMain 100%
Microsoft.FluentUI.AspNetCore.Components.FluentMainLayout 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentMenu 34.6% 48.2%
Microsoft.FluentUI.AspNetCore.Components.FluentMenuButton 65% 7.1%
Microsoft.FluentUI.AspNetCore.Components.FluentMenuItem 0% 0%
Microsoft.FluentUI.AspNetCore.Components.FluentMenuProvider 95.2% 83.3%
Microsoft.FluentUI.AspNetCore.Components.FluentMessageBar 50.4% 24.1%
Microsoft.FluentUI.AspNetCore.Components.FluentMessageBarProvider 70.4% 59%
Microsoft.FluentUI.AspNetCore.Components.FluentMultiSplitter 81.7% 66.6%
Microsoft.FluentUI.AspNetCore.Components.FluentMultiSplitterEventArgs 100%
Microsoft.FluentUI.AspNetCore.Components.FluentMultiSplitterPane 97.1% 91%
Microsoft.FluentUI.AspNetCore.Components.FluentMultiSplitterResizeEventArgs 100%
Microsoft.FluentUI.AspNetCore.Components.FluentNavBase 55.1% 16.6%
Microsoft.FluentUI.AspNetCore.Components.FluentNavGroup 62.3% 36.6%
Microsoft.FluentUI.AspNetCore.Components.FluentNavLink 84.6% 50%
Microsoft.FluentUI.AspNetCore.Components.FluentNavMenu 61.1% 33.3%
Microsoft.FluentUI.AspNetCore.Components.FluentNavMenuGroup 0% 0%
Microsoft.FluentUI.AspNetCore.Components.FluentNavMenuItemBase 0% 0%
Microsoft.FluentUI.AspNetCore.Components.FluentNavMenuLink 0% 0%
Microsoft.FluentUI.AspNetCore.Components.FluentNavMenuTree 0% 0%
Microsoft.FluentUI.AspNetCore.Components.FluentNumberField`1 63.8% 55.1%
Microsoft.FluentUI.AspNetCore.Components.FluentOption`1 79.4% 61.5%
Microsoft.FluentUI.AspNetCore.Components.FluentOverflow 0% 0%
Microsoft.FluentUI.AspNetCore.Components.FluentOverflowItem 0% 0%
Microsoft.FluentUI.AspNetCore.Components.FluentOverlay 74% 62%
Microsoft.FluentUI.AspNetCore.Components.FluentPageScript 100%
Microsoft.FluentUI.AspNetCore.Components.FluentPaginator 0% 0%
Microsoft.FluentUI.AspNetCore.Components.FluentPersona 100% 78.1%
Microsoft.FluentUI.AspNetCore.Components.FluentPopover 78.4% 65.9%
Microsoft.FluentUI.AspNetCore.Components.FluentPresenceBadge 60.9% 29.1%
Microsoft.FluentUI.AspNetCore.Components.FluentProfileMenu 100% 100%
Microsoft.FluentUI.AspNetCore.Components.FluentProgress 81.2% 68.1%
Microsoft.FluentUI.AspNetCore.Components.FluentProgressRing 97.6% 92.8%
Microsoft.FluentUI.AspNetCore.Components.FluentPullToRefresh 94% 89.2%
Microsoft.FluentUI.AspNetCore.Components.FluentRadio`1 0% 0%
Microsoft.FluentUI.AspNetCore.Components.FluentRadioContext 70% 0%
Microsoft.FluentUI.AspNetCore.Components.FluentRadioGroup`1 77.7% 16.6%
Microsoft.FluentUI.AspNetCore.Components.FluentRating 76.4% 78.2%
Microsoft.FluentUI.AspNetCore.Components.FluentSearch 88.5% 83.3%
Microsoft.FluentUI.AspNetCore.Components.FluentSelect`1 96.4% 90%
Microsoft.FluentUI.AspNetCore.Components.FluentSkeleton 40.9% 50%
Microsoft.FluentUI.AspNetCore.Components.FluentSlider`1 84.7% 68.4%
Microsoft.FluentUI.AspNetCore.Components.FluentSliderLabel`1 65.8% 33.3%
Microsoft.FluentUI.AspNetCore.Components.FluentSortableList`1 86.9% 59%
Microsoft.FluentUI.AspNetCore.Components.FluentSortableListEventArgs 83.3%
Microsoft.FluentUI.AspNetCore.Components.FluentSpacer 100% 50%
Microsoft.FluentUI.AspNetCore.Components.FluentSplashScreen 0% 0%
Microsoft.FluentUI.AspNetCore.Components.FluentSplitter 70.7% 40%
Microsoft.FluentUI.AspNetCore.Components.FluentStack 82.9% 33.3%
Microsoft.FluentUI.AspNetCore.Components.FluentSwitch 82.6% 50%
Microsoft.FluentUI.AspNetCore.Components.FluentTab 0% 0%
Microsoft.FluentUI.AspNetCore.Components.FluentTabs 0% 0%
Microsoft.FluentUI.AspNetCore.Components.FluentTextArea 85%
Microsoft.FluentUI.AspNetCore.Components.FluentTextField 88.8% 60%
Microsoft.FluentUI.AspNetCore.Components.FluentTimePicker 100% 90%
Microsoft.FluentUI.AspNetCore.Components.FluentToast 0% 0%
Microsoft.FluentUI.AspNetCore.Components.FluentToastProvider 0% 0%
Microsoft.FluentUI.AspNetCore.Components.FluentToolbar 68.9% 50%
Microsoft.FluentUI.AspNetCore.Components.FluentTooltip 68.4% 73.8%
Microsoft.FluentUI.AspNetCore.Components.FluentTooltipProvider 0% 0%
Microsoft.FluentUI.AspNetCore.Components.FluentTreeItem 89.3% 77.7%
Microsoft.FluentUI.AspNetCore.Components.FluentTreeView 79.7% 65.6%
Microsoft.FluentUI.AspNetCore.Components.FluentValidationMessage`1 0% 0%
Microsoft.FluentUI.AspNetCore.Components.FluentValidationSummary 100% 87.5%
Microsoft.FluentUI.AspNetCore.Components.FluentWizard 95.2% 85.8%
Microsoft.FluentUI.AspNetCore.Components.FluentWizardStep 95.8% 88.3%
Microsoft.FluentUI.AspNetCore.Components.FluentWizardStepArgs 100%
Microsoft.FluentUI.AspNetCore.Components.FluentWizardStepChangeEventArgs 100%
Microsoft.FluentUI.AspNetCore.Components.GlobalState 31.8% 50%
Microsoft.FluentUI.AspNetCore.Components.GridItemsProviderRequest`1 54.5% 20.8%
Microsoft.FluentUI.AspNetCore.Components.GridItemsProviderResult 100%
Microsoft.FluentUI.AspNetCore.Components.GridItemsProviderResult`1 100%
Microsoft.FluentUI.AspNetCore.Components.GridSort`1 35.1% 25.9%
Microsoft.FluentUI.AspNetCore.Components.HorizontalScrollEventArgs 0%
Microsoft.FluentUI.AspNetCore.Components.Icon 83.7% 91.1%
Microsoft.FluentUI.AspNetCore.Components.IconFromImage 100%
Microsoft.FluentUI.AspNetCore.Components.IconInfo 100%
Microsoft.FluentUI.AspNetCore.Components.IconsExtensions 0% 0%
Microsoft.FluentUI.AspNetCore.Components.Identifier 66.6% 62.5%
Microsoft.FluentUI.AspNetCore.Components.IdentifierContext 66.6% 41.6%
Microsoft.FluentUI.AspNetCore.Components.IDialogService 0%
Microsoft.FluentUI.AspNetCore.Components.INavMenuItemsOwner 0%
Microsoft.FluentUI.AspNetCore.Components.Infrastructure.EventCallbackSubscr
ibable`1
100% 100%
Microsoft.FluentUI.AspNetCore.Components.Infrastructure.EventCallbackSubscr
iber`1
100% 87.5%
Microsoft.FluentUI.AspNetCore.Components.InputHelpers`1 62.1% 48.6%
Microsoft.FluentUI.AspNetCore.Components.InternalAppBarContext 100% 100%
Microsoft.FluentUI.AspNetCore.Components.InternalDialogContext 80%
Microsoft.FluentUI.AspNetCore.Components.InternalListContext`1 80% 66.6%
Microsoft.FluentUI.AspNetCore.Components.InternalToastContext 0%
Microsoft.FluentUI.AspNetCore.Components.KeyCodeService 60.3% 28.5%
Microsoft.FluentUI.AspNetCore.Components.KeyDown 0% 0%
Microsoft.FluentUI.AspNetCore.Components.LibraryConfiguration 88.8% 50%
Microsoft.FluentUI.AspNetCore.Components.ListComponentBase`1 62.3% 59.3%
Microsoft.FluentUI.AspNetCore.Components.LoadedEventArgs 0%
Microsoft.FluentUI.AspNetCore.Components.LuminanceChangedEventArgs 0%
Microsoft.FluentUI.AspNetCore.Components.MenuChangeEventArgs 0%
Microsoft.FluentUI.AspNetCore.Components.MenuService 41.6% 0%
Microsoft.FluentUI.AspNetCore.Components.Message 50% 0%
Microsoft.FluentUI.AspNetCore.Components.MessageBox 50% 0%
Microsoft.FluentUI.AspNetCore.Components.MessageBoxContent 0%
Microsoft.FluentUI.AspNetCore.Components.MessageOptions 76.9%
Microsoft.FluentUI.AspNetCore.Components.MessageService 33% 26.9%
Microsoft.FluentUI.AspNetCore.Components.NavMenuActionArgs 0% 0%
Microsoft.FluentUI.AspNetCore.Components.OfficeColorUtilities 0%
Microsoft.FluentUI.AspNetCore.Components.Option`1 0%
Microsoft.FluentUI.AspNetCore.Components.OptionsSearchEventArgs`1 100%
Microsoft.FluentUI.AspNetCore.Components.OverflowItem 100%
Microsoft.FluentUI.AspNetCore.Components.PaginationState 59% 43.7%
Microsoft.FluentUI.AspNetCore.Components.ProgressFileDetails 100%
Microsoft.FluentUI.AspNetCore.Components.ProgressToast 0% 0%
Microsoft.FluentUI.AspNetCore.Components.ProgressToastContent 0%
Microsoft.FluentUI.AspNetCore.Components.PropertyColumn`2 80.4% 55%
Microsoft.FluentUI.AspNetCore.Components.RenderFragmentDialog 100%
Microsoft.FluentUI.AspNetCore.Components.Resources.TimeAgoResource 76.1% 100%
Microsoft.FluentUI.AspNetCore.Components.SelectAllTemplateArgs 100%
Microsoft.FluentUI.AspNetCore.Components.SelectColumn`1 87% 81.6%
Microsoft.FluentUI.AspNetCore.Components.SelectDatesHoverEventArgs 0%
Microsoft.FluentUI.AspNetCore.Components.ServiceCollectionExtensions 59.2% 66.6%
Microsoft.FluentUI.AspNetCore.Components.SortedProperty 0%
Microsoft.FluentUI.AspNetCore.Components.SplashScreenContent 0% 0%
Microsoft.FluentUI.AspNetCore.Components.SplitterCollapsedEventArgs 0%
Microsoft.FluentUI.AspNetCore.Components.SplitterResizedEventArgs 0%
Microsoft.FluentUI.AspNetCore.Components.StandardLuminanceExtensions 0% 0%
Microsoft.FluentUI.AspNetCore.Components.StaticAssetServiceConfiguration 0% 0%
Microsoft.FluentUI.AspNetCore.Components.TabChangeEventArgs 0%
Microsoft.FluentUI.AspNetCore.Components.TemplateColumn`1 83.3% 0%
Microsoft.FluentUI.AspNetCore.Components.TimeAgoOptions 92.3%
Microsoft.FluentUI.AspNetCore.Components.ToastInstance 0% 0%
Microsoft.FluentUI.AspNetCore.Components.ToastParameters 0%
Microsoft.FluentUI.AspNetCore.Components.ToastParameters`1 0%
Microsoft.FluentUI.AspNetCore.Components.ToastResult 0% 0%
Microsoft.FluentUI.AspNetCore.Components.ToastService 0% 0%
Microsoft.FluentUI.AspNetCore.Components.TreeChangeEventArgs 100%
Microsoft.FluentUI.AspNetCore.Components.TreeViewItem 100%
Microsoft.FluentUI.AspNetCore.Components.TreeViewItemExpandedEventArgs 100%
Microsoft.FluentUI.AspNetCore.Components.UploadedFileDetails 0%
Microsoft.FluentUI.AspNetCore.Components.Utilities.CssBuilder 100% 100%
Microsoft.FluentUI.AspNetCore.Components.Utilities.InlineStyleBuilder 96.4% 87.5%
Microsoft.FluentUI.AspNetCore.Components.Utilities.InternalDebounce.Debounc
eAction
52.3% 18.7%
Microsoft.FluentUI.AspNetCore.Components.Utilities.InternalDebounce.Debounc
eTask
0% 0%
Microsoft.FluentUI.AspNetCore.Components.Utilities.InternalDebounce.Dispatc
herTimerExtensions
82.9% 68.7%
Microsoft.FluentUI.AspNetCore.Components.Utilities.JSModule 0% 0%
Microsoft.FluentUI.AspNetCore.Components.Utilities.RangeOf`1 96.7% 94.4%
Microsoft.FluentUI.AspNetCore.Components.Utilities.Splitter 82.8% 81.8%
Microsoft.FluentUI.AspNetCore.Components.Utilities.StyleBuilder 100% 91.6%
Microsoft.FluentUI.AspNetCore.Components.ZIndex 100%
System.Text.RegularExpressions.Generated 76.6% 51.4%

Co-authored-by: vnbaaij <1761079+vnbaaij@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Jun 15, 2025

@copilot with the suggested changes, can we remove the hash calculation on the items in the DataGrid (which was added in v4.12.0)?

Yes, with the IsFixed parameter we can optimize the hash calculation further. I've updated the implementation to completely skip hash computation when IsFixed=true, eliminating unnecessary CPU cycles for static datasets while preserving the hash calculation for dynamic datasets (IsFixed=false) to maintain backward compatibility. Commit 42b5eca

Warning

Firewall rules blocked me from connecting to one or more addresses

I tried to connect to the following addresses, but was blocked by firewall rules:

  • 7tjvsblobprodcus341.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj --no-restore (dns block)
    • Triggering command: dotnet test tests/Core/Microsoft.FluentUI.AspNetCore.Components.Tests.csproj -f net8.0 --filter FluentDataGridIsFixedTests --verbosity normal (dns block)
  • c78vsblobprodcus322.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj --no-restore (dns block)
    • Triggering command: dotnet test tests/Core/Microsoft.FluentUI.AspNetCore.Components.Tests.csproj -f net8.0 --filter FluentDataGridIsFixedTests --verbosity normal (dns block)
  • d0svsblobprodcus381.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj --no-restore (dns block)
    • Triggering command: dotnet test tests/Core/Microsoft.FluentUI.AspNetCore.Components.Tests.csproj -f net8.0 --filter FluentDataGridIsFixedTests --verbosity normal (dns block)
  • jd4vsblobprodcus366.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj --no-restore (dns block)
    • Triggering command: dotnet test tests/Core/Microsoft.FluentUI.AspNetCore.Components.Tests.csproj -f net8.0 --filter FluentDataGridIsFixedTests --verbosity normal (dns block)
  • l49vsblobprodcus358.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj --no-restore (dns block)
    • Triggering command: dotnet test tests/Core/Microsoft.FluentUI.AspNetCore.Components.Tests.csproj -f net8.0 --filter FluentDataGridIsFixedTests --verbosity normal (dns block)
  • nn8vsblobprodcus340.vsblob.vsassets.io
    • Triggering command: dotnet restore src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj (dns block)
    • Triggering command: dotnet test tests/Core/Microsoft.FluentUI.AspNetCore.Components.Tests.csproj -f net8.0 --filter FluentDataGridIsFixedTests --verbosity normal (dns block)
  • uy6vsblobprodcus34.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj --no-restore (dns block)
    • Triggering command: dotnet test tests/Core/Microsoft.FluentUI.AspNetCore.Components.Tests.csproj -f net8.0 --filter FluentDataGridIsFixedTests --verbosity normal (dns block)
  • vb4vsblobprodcus33.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj --no-restore (dns block)
    • Triggering command: dotnet test tests/Core/Microsoft.FluentUI.AspNetCore.Components.Tests.csproj -f net8.0 --filter FluentDataGridIsFixedTests --verbosity normal (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot finished work on behalf of vnbaaij June 15, 2025 12:41
@vnbaaij
Copy link
Collaborator

vnbaaij commented Jun 15, 2025

@copilot with the suggested changes, remove the hash calculation and comparisons completely. Only use the IsFixed parameter to determine if the refresh should be executed

…parameter

Co-authored-by: vnbaaij <1761079+vnbaaij@users.noreply.github.com>
Copy link
Contributor Author

Copilot AI commented Jun 15, 2025

@copilot with the suggested changes, remove the hash calculation and comparisons completely. Only use the IsFixed parameter to determine if the refresh should be executed

I've removed the hash calculation and comparisons completely as requested. The refresh logic now uses only the IsFixed parameter to determine if refresh should be executed. This simplifies the implementation significantly while maintaining all the performance benefits. The changes include removing the ComputeItemsHash method, _lastAssignedItemsHashCode field, and all hash-based change detection logic. Commit 07a7395

Warning

Firewall rules blocked me from connecting to one or more addresses

I tried to connect to the following addresses, but was blocked by firewall rules:

  • 7tjvsblobprodcus341.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj (dns block)
  • c78vsblobprodcus322.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj (dns block)
  • d0svsblobprodcus381.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj (dns block)
  • jd4vsblobprodcus366.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj (dns block)
  • l49vsblobprodcus358.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj (dns block)
  • nn8vsblobprodcus340.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj (dns block)
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj -f net8.0 (dns block)
  • uy6vsblobprodcus34.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj (dns block)
  • vb4vsblobprodcus33.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot finished work on behalf of vnbaaij June 15, 2025 13:48
@vnbaaij vnbaaij changed the title feat: Add IsFixed parameter to FluentDataGrid for static datasets [DataGrid] Add IsFixed parameter Jun 16, 2025
vnbaaij and others added 2 commits June 16, 2025 10:54
Copy link
Contributor Author

Copilot AI commented Jun 16, 2025

Just as a heads up, I was blocked by some firewall rules while working on your feedback. Expand below for details.

Warning

Firewall rules blocked me from connecting to one or more addresses

I tried to connect to the following addresses, but was blocked by firewall rules:

  • 7tjvsblobprodcus341.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj --verbosity minimal (dns block)
  • c78vsblobprodcus322.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj --verbosity minimal (dns block)
  • d0svsblobprodcus381.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj --verbosity minimal (dns block)
  • jd4vsblobprodcus366.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj --verbosity minimal (dns block)
  • l49vsblobprodcus358.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj --verbosity minimal (dns block)
  • nn8vsblobprodcus340.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj --verbosity minimal (dns block)
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj -f net8.0 --verbosity minimal (dns block)
  • uy6vsblobprodcus34.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj --verbosity minimal (dns block)
  • vb4vsblobprodcus33.vsblob.vsassets.io
    • Triggering command: dotnet build src/Core/Microsoft.FluentUI.AspNetCore.Components.csproj --verbosity minimal (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Copilot finished work on behalf of vnbaaij June 16, 2025 08:57
@vnbaaij vnbaaij marked this pull request as ready for review June 16, 2025 09:36
@vnbaaij vnbaaij requested a review from dvoituron as a code owner June 16, 2025 09:36
@vnbaaij vnbaaij enabled auto-merge (squash) June 16, 2025 10:34
@vnbaaij vnbaaij self-requested a review June 16, 2025 10:34
@vnbaaij vnbaaij requested a review from dvoituron June 16, 2025 12:10
@vnbaaij vnbaaij disabled auto-merge June 16, 2025 15:10
@vnbaaij vnbaaij enabled auto-merge (squash) June 16, 2025 15:11
@vnbaaij vnbaaij disabled auto-merge June 16, 2025 20:43
@vnbaaij vnbaaij requested a review from dvoituron June 16, 2025 20:43
@vnbaaij vnbaaij enabled auto-merge (squash) June 17, 2025 06:19
@vnbaaij vnbaaij self-requested a review June 17, 2025 07:07
@vnbaaij vnbaaij disabled auto-merge June 17, 2025 07:08
@vnbaaij vnbaaij closed this Jun 17, 2025
@vnbaaij vnbaaij deleted the copilot/fix-3920 branch June 17, 2025 07:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Error loading sessions

Retrying...

Successfully merging this pull request may close these issues.

feat: Add IsFixed parameter to DataGrid 4.12.0 Bug on FluentDataGrid
3 participants