From 62264e651c563cf69bdb1e7137fbe3465dd270be Mon Sep 17 00:00:00 2001 From: svetlanamikheeva Date: Thu, 5 Feb 2026 13:30:30 +0400 Subject: [PATCH 1/7] the first draft --- .../Components/Pages/Index.razor | 25 ++-- README.md | 138 +++++------------- images/auto-fit-grid-columns.png | Bin 0 -> 39032 bytes 3 files changed, 48 insertions(+), 115 deletions(-) create mode 100644 images/auto-fit-grid-columns.png diff --git a/CS/DxGrid.AutoFit/Components/Pages/Index.razor b/CS/DxGrid.AutoFit/Components/Pages/Index.razor index 6387c62..8521bd0 100644 --- a/CS/DxGrid.AutoFit/Components/Pages/Index.razor +++ b/CS/DxGrid.AutoFit/Components/Pages/Index.razor @@ -21,23 +21,19 @@ @code { IGrid Grid { get; set; } - private List people { get; set; } + List FixedWidthColumnCaptions = new List { "ID", "First Name", + "Last Name", "Honorific", "Occupation" }; - protected override void OnAfterRender(bool firstRender) - { - if (firstRender) - { + protected override void OnAfterRender(bool firstRender) { + if (firstRender) { Grid.BeginUpdate(); - foreach (var column in Grid.GetColumns()) - { - if (column.Caption == "Email" || column.Caption == "Address" || column.Caption == "Description") - { - column.Width = "0px"; - } - else - { + foreach (var column in Grid.GetColumns()) { + if (FixedWidthColumnCaptions.Contains(column.Caption)) { column.MinWidth = 100; + } + else { + column.Width = "0px"; } } Grid.EndUpdate(); @@ -46,8 +42,7 @@ } } - protected override void OnInitialized() - { + protected override void OnInitialized() { people = PersonDataService.GetPeople(); } } \ No newline at end of file diff --git a/README.md b/README.md index 75c2f2c..7ba31f9 100644 --- a/README.md +++ b/README.md @@ -3,115 +3,45 @@ [![](https://img.shields.io/badge/📖_How_to_use_DevExpress_Examples-e9f6fc?style=flat-square)](https://docs.devexpress.com/GeneralInformation/403183) [![](https://img.shields.io/badge/💬_Leave_Feedback-feecdd?style=flat-square)](#does-this-example-address-your-development-requirementsobjectives) -# DxGrid - How to implement the AutoFit feature for grids with different column widths +# Blazor Grid – How to Auto-Fit Columns to Content and Available Space -This example illustrates how to use the [AutoFitColumnWidths()](https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxGrid.AutoFitColumnWidths) for grids that have columns with varying widths such that no columns will be truncated. -image -image +This example implements a "smart" layout for the [DevExpress Blazor Grid](https://docs.devexpress.devx/Blazor/403143/components/grid) component. This layout adjusts to different desktop screen sizes on page render: +* Cell content is fully visible (word trimming/wrapping is disabled). +* Columns automatically fill all available screen space. + +![Blazor Grid – How to Auto-Fit Columns to Content and Available Space](images/auto-fit-grid-columns.png) ## Implementation Details -1. Add DxGrid and bind it to data that contains properties of predictable length (e.g. ID, First Name, Honorific) and unpredictable length (e.g. Email, Address): - ```razor - - - - - - - - - - - - - -@code { - IGrid Grid { get; set; } - private List people { get; set; } - - protected override void OnInitialized() - { - people = PersonDataService.GetPeople(); - } -} - ``` - ```csharp -public class Person -{ - public int Id { get; set; } - public string FirstName { get; set; } - public string LastName { get; set; } - public string Honorific { get; set; } - public string Email { get; set; } - public string Address { get; set; } - public string Occupation { get; set; } - public string Description { get; set; } -} -``` -```csharp -public class PersonDataService : IPersonDataService -{ - public List GetPeople() - { - return new List() { - new Person { Id = 1, FirstName = "Alice", LastName = "Johnson", Honorific = "Ms.", Email = "alice.johnson@example.com", Address = "123 Maple Street, Springfield", Occupation = "Engineer", Description = "Enjoys solving complex problems and creating elegant solutions." }, - new Person { Id = 2, FirstName = "Bob", LastName = "Smith", Honorific = "Mr.", Email = "bob.smith@example.com", Address = "456 Oak Avenue, Rivertown", Occupation = "Teacher", Description = "Passionate about education and lifelong learning." }, - new Person { Id = 3, FirstName = "Catherine", LastName = "Lee", Honorific = "Dr.", Email = "catherine.lee@example.com", Address = "789 Pine Road, Lakeside", Occupation = "Physician", Description = "Dedicated to patient care and medical research." }, - new Person { Id = 4, FirstName = "David", LastName = "Martinez", Honorific = "Mr.", Email = "david.martinez@example.com", Address = "321 Birch Lane, Hillcrest", Occupation = "Architect", Description = "Designs sustainable and innovative buildings." }, - new Person { Id = 5, FirstName = "Ella", LastName = "Brown", Honorific = "Mrs.", Email = "ella.brown@example.com", Address = "654 Cedar Court, Brookfield", Occupation = "Marketing", Description = "Creative thinker with a knack for brand strategy." }, - new Person { Id = 6, FirstName = "Frank", LastName = "Wilson", Honorific = "Mr.", Email = "frank.wilson@example.com", Address = "987 Walnut Drive, Greenfield", Occupation = "Chef", Description = "Loves experimenting with flavors and cuisines." }, - new Person { Id = 7, FirstName = "Grace", LastName = "Taylor", Honorific = "Ms.", Email = "grace.taylor@example.com", Address = "159 Elm Street, Fairview", Occupation = "Designer", Description = "Passionate about visual storytelling and design." }, - new Person { Id = 8, FirstName = "Henry", LastName = "Clark", Honorific = "Mr.", Email = "henry.clark@example.com", Address = "753 Willow Way, Meadowbrook", Occupation = "Lawyer", Description = "Focused on justice and advocacy for clients." }, - new Person { Id = 9, FirstName = "Isabella", LastName = "Davis", Honorific = "Ms.", Email = "isabella.davis@example.com", Address = "852 Cherry Boulevard, Sunnyside", Occupation = "Journalist", Description = "Enjoys uncovering stories and sharing truth." }, - new Person { Id = 10, FirstName = "Jack", LastName = "Miller", Honorific = "Mr.", Email = "jack.miller@example.com", Address = "951 Poplar Street, Crestwood", Occupation = "Entrepreneur", Description = "Driven by innovation and building new ventures." } - }; - } -} -``` -2. In OnAfterRender, call [Grid.BeginUpdate()](https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxGrid.BeginUpdate) and loop through each column using [Grid.GetColumns()](https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxGrid.GetColumns): -```csharp -protected override void OnAfterRender(bool firstRender) -{ - if (firstRender) - { - Grid.BeginUpdate(); - foreach (var column in Grid.GetColumns()) -``` -3. For columns that have unpredictable length, set the column [Width](https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxGridColumn.Width) to `0px`. For columns that have a predictable length, set the column [MinWidth](https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxGridColumn.MinWidth) to a value that will not truncate the text in the columns (in this case, `100px`): -```csharp -Grid.BeginUpdate(); -foreach (var column in Grid.GetColumns()) -{ - if (column.Caption == "Email" || column.Caption == "Address" || column.Caption == "Description") - { - column.Width = "0px"; - } - else - { - column.MinWidth = 100; - } -} -``` -4. After updating the Width or MinWidth of each column, call [Grid.EndUpdate()](https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxGrid.EndUpdate) and [Grid.AutoFitColumnWidths()](https://docs.devexpress.com/Blazor/DevExpress.Blazor.DxGrid.AutoFitColumnWidths): + +1. Bind our Blazor Grid to a data source and populate the component with columns. + +2. Use the [Grid.TextWrapEnabled](https://docs.devexpress.devx/Blazor/DevExpress.Blazor.DxGrid.TextWrapEnabled) property to disable word wrapping. + +3. Identify columns with fixed content width (for instance, ID, Date, Name). + +4. For these columns, assign maximum content length to [MinWidth](https://docs.devexpress.devx/Blazor/DevExpress.Blazor.DxGridColumn.MinWidth) and leave the [Width](https://docs.devexpress.devx/Blazor/DevExpress.Blazor.DxGridColumn.Width) property unspecified. This configuration ensures that a column never shrinks below the specified limit but can stretch on wide screens. + +5. For remaining columns, set [Width](https://docs.devexpress.devx/Blazor/DevExpress.Blazor.DxGridColumn.Width) to `0px`. + +6. Call the [AutoFitColumnWidths](https://docs.devexpress.devx/Blazor/DevExpress.Blazor.DxGrid.AutoFitColumnWidths) method to adjust zero-width columns to content and stretch fixed-width columns. + ```csharp -protected override void OnAfterRender(bool firstRender) -{ - if (firstRender) - { +IGrid Grid { get; set; } +List FixedWidthColumnCaptions = new List { "ID", "First Name", + "Last Name", "Honorific", "Occupation" }; + +protected override void OnAfterRender(bool firstRender) { + if (firstRender) { Grid.BeginUpdate(); - foreach (var column in Grid.GetColumns()) - { - if (column.Caption == "Email" || column.Caption == "Address" || column.Caption == "Description") - { - column.Width = "0px"; - } - else - { + foreach (var column in Grid.GetColumns()) { + if (FixedWidthColumnCaptions.Contains(column.Caption)) { column.MinWidth = 100; + } + else { + column.Width = "0px"; } } Grid.EndUpdate(); - Grid.AutoFitColumnWidths(); } } @@ -123,6 +53,14 @@ protected override void OnAfterRender(bool firstRender) - [Person.cs](https://github.com/DevExpress-Examples/draft-DxGrid-AutoFit-Example/blob/25.1.7%2B/CS/DxGrid.AutoFit/Models/Person.cs) - [PersonDataService.cs](https://github.com/DevExpress-Examples/draft-DxGrid-AutoFit-Example/blob/25.1.7%2B/CS/DxGrid.AutoFit/Services/PersonDataService.cs) +## Documentation + +- [Blazor Grid – Columns](https://docs.devexpress.devx/Blazor/404479/components/grid/columns/columns) + +## More Examples + +- [Blazor Grid - Responsive Layout Demo](https://demos.devexpress.com/blazor/LayoutBreakpoint#ResponsiveLayout) + ## Does this example address your development requirements/objectives? diff --git a/images/auto-fit-grid-columns.png b/images/auto-fit-grid-columns.png new file mode 100644 index 0000000000000000000000000000000000000000..c2361ad469a850ae933abcade2f0631096ddf9ba GIT binary patch literal 39032 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 L{F!2X$B2Ie8$-so literal 0 HcmV?d00001 From 892f9a23d2f85b2e88eb6de8c03137dcd9061b5d Mon Sep 17 00:00:00 2001 From: DevExpressExampleBot Date: Thu, 5 Feb 2026 13:32:56 +0400 Subject: [PATCH 2/7] README auto update [skip ci] --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 7ba31f9..cb6241a 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,4 @@ -![](https://img.shields.io/endpoint?url=https://codecentral.devexpress.com/api/v1/VersionRange/1109763278/25.1.7%2B) [![](https://img.shields.io/badge/📖_How_to_use_DevExpress_Examples-e9f6fc?style=flat-square)](https://docs.devexpress.com/GeneralInformation/403183) [![](https://img.shields.io/badge/💬_Leave_Feedback-feecdd?style=flat-square)](#does-this-example-address-your-development-requirementsobjectives) From 15f7e5aec114d0553218dcb21c3615e11fc99cc5 Mon Sep 17 00:00:00 2001 From: svetlanamikheeva Date: Thu, 5 Feb 2026 13:34:48 +0400 Subject: [PATCH 3/7] small fix --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7ba31f9..bfa80a3 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ protected override void OnAfterRender(bool firstRender) { ## More Examples -- [Blazor Grid - Responsive Layout Demo](https://demos.devexpress.com/blazor/LayoutBreakpoint#ResponsiveLayout) +- [Blazor Grid – Responsive Layout Demo](https://demos.devexpress.com/blazor/LayoutBreakpoint#ResponsiveLayout) ## Does this example address your development requirements/objectives? From 7a387073384401c42393fc202075167198f26032 Mon Sep 17 00:00:00 2001 From: svetlanamikheeva Date: Thu, 5 Feb 2026 15:39:59 +0400 Subject: [PATCH 4/7] some changes --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 26847d5..f9454ec 100644 --- a/README.md +++ b/README.md @@ -4,9 +4,10 @@ # Blazor Grid – How to Auto-Fit Columns to Content and Available Space -This example implements a "smart" layout for the [DevExpress Blazor Grid](https://docs.devexpress.devx/Blazor/403143/components/grid) component. This layout adjusts to different desktop screen sizes on page render: +This example implements a "smart" layout for the [DevExpress Blazor Grid](https://docs.devexpress.devx/Blazor/403143/components/grid) component. On page render, this layout adjusts to different desktop screen sizes: + +* Columns fill all available space. * Cell content is fully visible (word trimming/wrapping is disabled). -* Columns automatically fill all available screen space. ![Blazor Grid – How to Auto-Fit Columns to Content and Available Space](images/auto-fit-grid-columns.png) @@ -18,7 +19,7 @@ This example implements a "smart" layout for the [DevExpress Blazor Grid](https: 3. Identify columns with fixed content width (for instance, ID, Date, Name). -4. For these columns, assign maximum content length to [MinWidth](https://docs.devexpress.devx/Blazor/DevExpress.Blazor.DxGridColumn.MinWidth) and leave the [Width](https://docs.devexpress.devx/Blazor/DevExpress.Blazor.DxGridColumn.Width) property unspecified. This configuration ensures that a column never shrinks below the specified limit but can stretch on wide screens. +4. For these columns, assign maximum content length to [MinWidth](https://docs.devexpress.devx/Blazor/DevExpress.Blazor.DxGridColumn.MinWidth) and leave the [Width](https://docs.devexpress.devx/Blazor/DevExpress.Blazor.DxGridColumn.Width) property unset. This configuration ensures that a column never shrinks below the specified limit but can stretch on wide screens. 5. For remaining columns, set [Width](https://docs.devexpress.devx/Blazor/DevExpress.Blazor.DxGridColumn.Width) to `0px`. From 4b85a99842f229e676b8dbaa97fa541edb9bea8f Mon Sep 17 00:00:00 2001 From: Svetlana Mikheeva <80316217+SvetlanaMikheeva@users.noreply.github.com> Date: Fri, 6 Feb 2026 16:27:25 +0400 Subject: [PATCH 5/7] Apply suggestions from code review Co-authored-by: Elena Khamlyuk <80813840+khamlyuk@users.noreply.github.com> --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index f9454ec..b582a78 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,12 @@ [![](https://img.shields.io/badge/📖_How_to_use_DevExpress_Examples-e9f6fc?style=flat-square)](https://docs.devexpress.com/GeneralInformation/403183) [![](https://img.shields.io/badge/💬_Leave_Feedback-feecdd?style=flat-square)](#does-this-example-address-your-development-requirementsobjectives) -# Blazor Grid – How to Auto-Fit Columns to Content and Available Space +# Blazor Grid – How to Fit Columns to Content and Available Space -This example implements a "smart" layout for the [DevExpress Blazor Grid](https://docs.devexpress.devx/Blazor/403143/components/grid) component. On page render, this layout adjusts to different desktop screen sizes: +This example implements a column layout for the [DevExpress Blazor Grid](https://docs.devexpress.devx/Blazor/403143/components/grid) component that adapts to different desktop screen sizes as follows: -* Columns fill all available space. -* Cell content is fully visible (word trimming/wrapping is disabled). +* Columns occupy all available space +* Cell content is fully visible (word trimming/wrapping is disabled) ![Blazor Grid – How to Auto-Fit Columns to Content and Available Space](images/auto-fit-grid-columns.png) From 3ea3bb1971966cd43be2dbd118b156b2c199c7ee Mon Sep 17 00:00:00 2001 From: svetlanamikheeva Date: Fri, 6 Feb 2026 16:32:57 +0400 Subject: [PATCH 6/7] apply a suggestion --- README.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index b582a78..d2e7c49 100644 --- a/README.md +++ b/README.md @@ -17,13 +17,11 @@ This example implements a column layout for the [DevExpress Blazor Grid](https:/ 2. Use the [Grid.TextWrapEnabled](https://docs.devexpress.devx/Blazor/DevExpress.Blazor.DxGrid.TextWrapEnabled) property to disable word wrapping. -3. Identify columns with fixed content width (for instance, ID, Date, Name). +3. Identify columns with fixed content width (for instance, ID, Date, Name). For these columns, assign maximum content length to [MinWidth](https://docs.devexpress.devx/Blazor/DevExpress.Blazor.DxGridColumn.MinWidth) and leave the [Width](https://docs.devexpress.devx/Blazor/DevExpress.Blazor.DxGridColumn.Width) property unset. This configuration ensures that a column never shrinks below the specified limit but can stretch on wide screens. -4. For these columns, assign maximum content length to [MinWidth](https://docs.devexpress.devx/Blazor/DevExpress.Blazor.DxGridColumn.MinWidth) and leave the [Width](https://docs.devexpress.devx/Blazor/DevExpress.Blazor.DxGridColumn.Width) property unset. This configuration ensures that a column never shrinks below the specified limit but can stretch on wide screens. +4. For remaining columns, set [Width](https://docs.devexpress.devx/Blazor/DevExpress.Blazor.DxGridColumn.Width) to `0px`. -5. For remaining columns, set [Width](https://docs.devexpress.devx/Blazor/DevExpress.Blazor.DxGridColumn.Width) to `0px`. - -6. Call the [AutoFitColumnWidths](https://docs.devexpress.devx/Blazor/DevExpress.Blazor.DxGrid.AutoFitColumnWidths) method to adjust zero-width columns to content and stretch fixed-width columns. +5. Call the [AutoFitColumnWidths](https://docs.devexpress.devx/Blazor/DevExpress.Blazor.DxGrid.AutoFitColumnWidths) method to adjust zero-width columns to content and stretch fixed-width columns. ```csharp IGrid Grid { get; set; } From 94875f8138c4faaef65d0ad75630402ab6a399ed Mon Sep 17 00:00:00 2001 From: Svetlana Mikheeva <80316217+SvetlanaMikheeva@users.noreply.github.com> Date: Wed, 11 Feb 2026 11:51:12 +0400 Subject: [PATCH 7/7] Improve README clarity and formatting --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index d2e7c49..fe36371 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,10 @@ # Blazor Grid – How to Fit Columns to Content and Available Space -This example implements a column layout for the [DevExpress Blazor Grid](https://docs.devexpress.devx/Blazor/403143/components/grid) component that adapts to different desktop screen sizes as follows: +This example implements a [DevExpress Blazor Grid](https://docs.devexpress.devx/Blazor/403143/components/grid) column layout that adapts to different desktop screen sizes as follows: -* Columns occupy all available space -* Cell content is fully visible (word trimming/wrapping is disabled) +* Columns occupy available space +* Cell content is always visible (word trimming/wrapping is disabled) ![Blazor Grid – How to Auto-Fit Columns to Content and Available Space](images/auto-fit-grid-columns.png) @@ -17,7 +17,7 @@ This example implements a column layout for the [DevExpress Blazor Grid](https:/ 2. Use the [Grid.TextWrapEnabled](https://docs.devexpress.devx/Blazor/DevExpress.Blazor.DxGrid.TextWrapEnabled) property to disable word wrapping. -3. Identify columns with fixed content width (for instance, ID, Date, Name). For these columns, assign maximum content length to [MinWidth](https://docs.devexpress.devx/Blazor/DevExpress.Blazor.DxGridColumn.MinWidth) and leave the [Width](https://docs.devexpress.devx/Blazor/DevExpress.Blazor.DxGridColumn.Width) property unset. This configuration ensures that a column never shrinks below the specified limit but can stretch on wide screens. +3. Identify columns with fixed content width (for instance, ID, Date, Name). For "fixed content width" columns, assign maximum content length to [MinWidth](https://docs.devexpress.devx/Blazor/DevExpress.Blazor.DxGridColumn.MinWidth) ([Width](https://docs.devexpress.devx/Blazor/DevExpress.Blazor.DxGridColumn.Width) property must not be set). This configuration ensures that a column does not shrink below a specified limit but can stretch on wide screens. 4. For remaining columns, set [Width](https://docs.devexpress.devx/Blazor/DevExpress.Blazor.DxGridColumn.Width) to `0px`.