From ef9f41acfefef98f676a14baabc65ed26dc31940 Mon Sep 17 00:00:00 2001 From: Dimo Dimov <961014+dimodi@users.noreply.github.com> Date: Tue, 7 Jan 2025 13:16:34 +0200 Subject: [PATCH 1/6] docs(common): Fix broken REPL examples (#2641) * docs(common): Fix broken REPL examples * docs(map): Deactivate non-running REPL * chore(common): skip repls and fix samples * chore(common): fix snippets and skip repls * chore(common): skip repls * chore(common): fix snippets * Update components/fileselect/events.md Co-authored-by: Tsvetomir Hristov <106250052+Tsvetomir-Hr@users.noreply.github.com> * Update components/fileselect/events.md Co-authored-by: Tsvetomir Hristov <106250052+Tsvetomir-Hr@users.noreply.github.com> * Update components/stockchart/labels-template-and-format.md Co-authored-by: Tsvetomir Hristov <106250052+Tsvetomir-Hr@users.noreply.github.com> * Update components/stockchart/labels-template-and-format.md Co-authored-by: Tsvetomir Hristov <106250052+Tsvetomir-Hr@users.noreply.github.com> * Update components/stockchart/labels-template-and-format.md Co-authored-by: Tsvetomir Hristov <106250052+Tsvetomir-Hr@users.noreply.github.com> --------- Co-authored-by: Nadezhda Tacheva Co-authored-by: Nadezhda Tacheva <73842592+ntacheva@users.noreply.github.com> Co-authored-by: Tsvetomir Hristov <106250052+Tsvetomir-Hr@users.noreply.github.com> --- components/fileselect/events.md | 129 ++++++++---------- .../grid/templates/images/row-template.png | Bin 29878 -> 0 bytes components/grid/templates/row.md | 17 +-- components/map/layers/marker.md | 3 + components/spreadsheet/tools.md | 12 +- .../stockchart/labels-template-and-format.md | 40 +++--- components/treeview/overview.md | 1 + globalization/rtl-support.md | 1 + ...imationcontainer-close-on-outside-click.md | 9 +- .../common-catch-all-exceptions-globally.md | 4 + ...ommon-kb-render-fragment-parameter-null.md | 3 + ...-breaks-datasourcerequest-serialization.md | 7 +- knowledge-base/common-struct-error.md | 6 +- knowledge-base/dropdown-kb-bind-to-enum.md | 4 +- .../dropdowns-readonly-struct-error.md | 3 +- .../editor-convert-to-plain-text.md | 1 + .../grid-aggregates-and-datatable.md | 1 + knowledge-base/grid-center-checkbox-column.md | 4 +- .../grid-conditional-cell-background.md | 15 +- .../grid-csv-export-change-field-delimiter.md | 1 + knowledge-base/grid-expand-button-tooltip.md | 2 + .../grid-one-expanded-detail-template.md | 2 +- knowledge-base/grid-static-group.md | 2 + .../grid-virtualization-many-records.md | 1 + .../inputs-open-programmatically.md | 13 +- knowledge-base/menu-authorize-view.md | 1 + knowledge-base/pdfviewer-sign-pdfs.md | 1 + ...nable-checkbox-selection-only-edit-mode.md | 1 + knowledge-base/typescript-exports-error.md | 7 + knowledge-base/upload-preview-image.md | 2 + upgrade/breaking-changes/2-0-0.md | 13 +- 31 files changed, 178 insertions(+), 128 deletions(-) delete mode 100644 components/grid/templates/images/row-template.png diff --git a/components/fileselect/events.md b/components/fileselect/events.md index d49f3cf1bf..c7647fb501 100644 --- a/components/fileselect/events.md +++ b/components/fileselect/events.md @@ -39,34 +39,46 @@ Property | Type | Description ## OnSelect -The `OnSelect` fires when one or more files have been selected. The selection of files is achieved either through the **Select files** button or by dropping the files anywhere in the component. +The `OnSelect` fires when one or more files have been selected. The selection of files is achieved either through the **Select Files** button or by dropping the files anywhere in the component. The event handler receives a [`FileSelectEventArgs` object](#fileselectfileinfo), which contains a list of `FileInfo` objects that allow the processing of the files. ->caption Handling the `OnSelect` event of the FileSelect +See the [example below](#example). -````RAZOR -@*Handle the OnSelect event of the FileSelect to access the selected files and upload them*@ +## OnRemove + +The `OnRemove` fires when a file has been removed from the list of selected files either by clicking the **x** icon or by pressing the `Del` key. + +The event handler receives a [`FileSelectEventArgs` object](#fileselectfileinfo). As the FileSelect component allows deleting one item at a time, the collection contains only one `FileSelectFileInfo` object (the deleted one). -@using System.IO -@using Microsoft.AspNetCore.Hosting +## Example + +>caption Handling the `OnSelect` and `OnRemove` events of the FileSelect + +````RAZOR @using System.Threading -@using Telerik.Blazor.Components.FileSelect -@inject IWebHostEnvironment HostingEnvironment +@*This code works only in Blazor Server apps.*@ +@*@using Microsoft.AspNetCore.Hosting*@ +@*@inject IWebHostEnvironment HostingEnvironment*@ -
- - -
- Expected files: JPG, PNG, GIF -
+@* Avoid namespace conflict with SvgIcons.File *@ +@using IONS = System.IO + + +
+ Expected files: @string.Join(", ", AllowedExtensions)
+ + + @code { - public List AllowedExtensions { get; set; } = new List() { ".jpg", ".png", ".gif" }; - public Dictionary Tokens { get; set; } = new Dictionary(); + private readonly List AllowedExtensions = new() { ".jpg", ".png", ".gif" }; + + private Dictionary Tokens { get; set; } = new(); private async Task HandleFiles(FileSelectEventArgs args) { @@ -74,67 +86,38 @@ The event handler receives a [`FileSelectEventArgs` object](#fileselectfileinfo) { if (!file.InvalidExtension) { - // save to local file system - await UploadFile(file); - // or read file in-memory - //await ReadFile(file); + // Read file in-memory. + await ReadFile(file); + + // OR + + // Save to local file system. + // This works only in server apps and the Upload component may be a better choice. + //await UploadFile(file); } } } - private async Task UploadFile(FileSelectFileInfo file) - { - // This code will work in Blazor Server apps. - // Saving files on the user device is not allowed in WebAssembly apps. - Tokens.Add(file.Id, new CancellationTokenSource()); - var path = Path.Combine(HostingEnvironment?.WebRootPath, file.Name); - await using FileStream fs = new FileStream(path, FileMode.Create); - await file.Stream.CopyToAsync(fs, Tokens[file.Id].Token); - } - private async Task ReadFile(FileSelectFileInfo file) { Tokens.Add(file.Id, new CancellationTokenSource()); - var byteArray = new byte[file.Size]; - await using MemoryStream ms = new MemoryStream(byteArray); + byte[] byteArray = new byte[file.Size]; + await using IONS.MemoryStream ms = new(byteArray); await file.Stream.CopyToAsync(ms, Tokens[file.Id].Token); } -} -```` + private async Task UploadFile(FileSelectFileInfo file) + { + // This code works only in Blazor Server apps. + // Saving files on the user device is not allowed in WebAssembly apps. -## OnRemove - -The `OnRemove` fires when a file has been removed from the list of selected files either by clicking the **x** icon or by pressing the `Del` key. - -The event handler receives a [`FileSelectEventArgs` object](#fileselectfileinfo). As the FileSelect component allows deleting one item at a time, the collection contains only one `FileSelectFileInfo` object (the deleted one). - ->caption Handling the `OnRemove` event of the FileSelect - -````RAZOR -@*Handle the OnRemove event of the FileSelect to access and delete the uploaded files*@ - -@using System.IO -@using Microsoft.AspNetCore.Hosting -@using System.Threading -@using Telerik.Blazor.Components.FileSelect - -@inject IWebHostEnvironment HostingEnvironment - -
- - -
- Expected files: JPG, PNG, GIF -
-
- -@code { - public List AllowedExtensions { get; set; } = new List() { ".jpg", ".png", ".gif" }; - public Dictionary Tokens { get; set; } = new Dictionary(); + //Tokens.Add(file.Id, new CancellationTokenSource()); + //string path = Path.Combine(HostingEnvironment.WebRootPath, file.Name); + //await using FileStream fs = new FileStream(path, FileMode.Create); + //await file.Stream.CopyToAsync(fs, Tokens[file.Id].Token); + } - private async Task HandleRemoveFiles(FileSelectEventArgs args) + private async Task RemoveFiles(FileSelectEventArgs args) { foreach (var file in args.Files) { @@ -144,19 +127,23 @@ The event handler receives a [`FileSelectEventArgs` object](#fileselectfileinfo) await Task.Delay(1); - var path = Path.Combine(HostingEnvironment?.WebRootPath, file.Name); + // This code works only in Blazor Server apps. + // Saving files on the user device is not allowed in WebAssembly apps. - // Remove the file from the file system - File.Delete(path); - } + //string path = Path.Combine(HostingEnvironment.WebRootPath, file.Name); + //if (IONS.File.Exists(path)) + //{ + // // Remove the file from the file system + // IONS.File.Delete(path); + //} + } } } ```` @[template](/_contentTemplates/common/general-info.md#event-callback-can-be-async) - ## See Also * [Live Demo: Blazor FileSelect Events](https://demos.telerik.com/blazor-ui/fileselect/events) diff --git a/components/grid/templates/images/row-template.png b/components/grid/templates/images/row-template.png deleted file mode 100644 index 839c8b1be4da994f7bc268d53eaab696131daa03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 29878 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 - employee photo + E @employee.ID @employee.Name @@ -50,23 +50,18 @@ Render the entire row with your own code and logic } public IEnumerable MyData = Enumerable.Range(1, 50).Select(x => new SampleData - { - ID = x, - Name = "name " + x, - HireDate = DateTime.Now.AddDays(-x) - }); + { + ID = x, + Name = "name " + x, + HireDate = DateTime.Now.AddDays(-x) + }); } ```` ->caption The result from the code snippet above - -![Blazor Grid Row Template](images/row-template.png) - ## Using Components in Grid Row Templates @[template](/_contentTemplates/grid/common-link.md#using-components-in-templates) - ## See Also * [Live Demo: Grid Templates](https://demos.telerik.com/blazor-ui/grid/templates) diff --git a/components/map/layers/marker.md b/components/map/layers/marker.md index e41bbd3236..e38882c5fa 100644 --- a/components/map/layers/marker.md +++ b/components/map/layers/marker.md @@ -90,6 +90,9 @@ The following example uses two Marker layers with different templates. One rende >caption Using Map marker template + +
+ ````RAZOR diff --git a/components/spreadsheet/tools.md b/components/spreadsheet/tools.md index ed735fe7c4..8e2f42bb99 100644 --- a/components/spreadsheet/tools.md +++ b/components/spreadsheet/tools.md @@ -98,7 +98,8 @@ The example below shows how to: @using Telerik.Blazor.Resources @using Telerik.Blazor.Services -@inject ITelerikStringLocalizer Localizer +@* Needed to find the built-in Home tool by its localized title if the application is using more than one language *@ +@* @inject ITelerikStringLocalizer Localizer *@ @@ -117,10 +118,13 @@ The example below shows how to: fileToolSetItem.Title = "Custom File Label"; } - // Find the built-in Home tool set item by its localized title. - // You can hard-code the title string (for example, "Home") if the application is using just one language. + // Find the built-in Home tool set item. + // This example uses hard-coded title string ("Home") but you may use the tool's localized title if the application is using more than one language. + // SpreadsheetToolSetItem? homeToolSetItem = DefaultToolsWithCustomizations.Items + // .FirstOrDefault(x => x.Title == Localizer[nameof(Messages.Spreadsheet_ToolBar_HomeMenu)]); + SpreadsheetToolSetItem? homeToolSetItem = DefaultToolsWithCustomizations.Items - .FirstOrDefault(x => x.Title == Localizer[nameof(Messages.Spreadsheet_ToolBar_HomeMenu)]); + .FirstOrDefault(x => x.Title == "Home"); var fontFamilyTool = homeToolSetItem?.Tools.FirstOrDefault(x => x is SpreadsheetFontFamilyTool) as SpreadsheetFontFamilyTool; diff --git a/components/stockchart/labels-template-and-format.md b/components/stockchart/labels-template-and-format.md index e3db3d076d..1cd652de4d 100644 --- a/components/stockchart/labels-template-and-format.md +++ b/components/stockchart/labels-template-and-format.md @@ -28,13 +28,14 @@ You can use the `Format` parameter to apply standard [numeric format strings](ht Standard number format strings and rotate the labels of the Category Axis + Height="450px" + DateField="@nameof(StockDataPoint.Date)"> - - + + + @@ -46,23 +47,28 @@ Standard number format strings and rotate the labels of the Category Axis + Name="Product 1" + Data="@StockChartProduct1Data" + OpenField="@nameof(StockDataPoint.Open)" + CloseField="@nameof(StockDataPoint.Close)" + HighField="@nameof(StockDataPoint.High)" + LowField="@nameof(StockDataPoint.Low)"> - + + + + + + + Name="Product 1" + Data="@StockChartProduct1Data" + Field="@(nameof(StockDataPoint.High))" + CategoryField="@(nameof(StockDataPoint.Date))"> @@ -175,7 +181,9 @@ Label templates - + + + `(string index)` | gets the corresponding `TItem` of the destination TreeView from the passed [`DestinationIndex`](slug://grid-drag-drop-overview#event-arguments) | +
````RAZOR diff --git a/globalization/rtl-support.md b/globalization/rtl-support.md index 66a0cdee17..493cc693b4 100644 --- a/globalization/rtl-support.md +++ b/globalization/rtl-support.md @@ -20,6 +20,7 @@ Right-to-left support is configured at the root level so it affects all UI for B To enable right-to-left direction of the components in your application, set the `EnableRtl` parameter of the [`TelerikRootComponent`](slug://rootcomponent-overview) to `true`. +
````TelerikLayout.razor @Body diff --git a/knowledge-base/animationcontainer-close-on-outside-click.md b/knowledge-base/animationcontainer-close-on-outside-click.md index 5120ab15cb..8f1650d832 100644 --- a/knowledge-base/animationcontainer-close-on-outside-click.md +++ b/knowledge-base/animationcontainer-close-on-outside-click.md @@ -36,8 +36,11 @@ To achieve the desired scenario: 1. If the target is outside, [call a .NET method from the JavaScript code](https://learn.microsoft.com/en-us/aspnet/core/blazor/javascript-interoperability/call-dotnet-from-javascript) that will close the AnimationContainer. 1. When closing the AnimationContainer from JavaScript, [detach](https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener) the `click` handler from step 2. +> Replace the `Index` type of the `DotNetObjectReference` in the example below with the type of the component that hosts this code. + >caption Close the AnimationContainer upon an outside click +
````RAZOR @inject IJSRuntime js @@ -50,7 +53,8 @@ To achieve the desired scenario: @* suppress-error allows script tags in Razor files. Move this script to a separate file *@ - + // @code { private TelerikAnimationContainer TAC { get; set; } private bool TACOpen { get; set; } + //Replace the Index type with the type of the component that hosts this code private DotNetObjectReference? DotNetRef; private async Task ShowTAC() diff --git a/knowledge-base/common-catch-all-exceptions-globally.md b/knowledge-base/common-catch-all-exceptions-globally.md index 372944203f..45d577f392 100644 --- a/knowledge-base/common-catch-all-exceptions-globally.md +++ b/knowledge-base/common-catch-all-exceptions-globally.md @@ -43,6 +43,7 @@ Consider the following application layout setup: >caption TelerikLayout.razor +
````RAZOR @inherits LayoutComponentBase @@ -53,6 +54,7 @@ Consider the following application layout setup: >caption MainLayout.razor +
````RAZOR @layout TelerikLayout @inherits LayoutComponentBase @@ -78,6 +80,7 @@ To handle this, wrap the `ErrorBoundary` component around the `caption TelerikLayout.razor +
````RAZOR @inherits LayoutComponentBase @@ -92,6 +95,7 @@ If the application is using only one layout file, it should look like this: >caption MainLayout.razor +
````RAZOR @inherits LayoutComponentBase diff --git a/knowledge-base/common-kb-render-fragment-parameter-null.md b/knowledge-base/common-kb-render-fragment-parameter-null.md index e8a7ddf6c9..5770bf3418 100644 --- a/knowledge-base/common-kb-render-fragment-parameter-null.md +++ b/knowledge-base/common-kb-render-fragment-parameter-null.md @@ -51,6 +51,7 @@ The following sample used as a component will cause exceptions: >caption RenderFragment elements used as properties cause exceptions +
````RAZOR typeparam TItem @typeparam TValue @@ -78,6 +79,7 @@ typeparam TItem >caption Simple usage of the problematic component that causes an error +
````RAZOR @@ -155,6 +157,7 @@ The solution is to implement checks in the custom component so that you can rend >caption How to consume that component - like usual +
````RAZOR @selectedValue diff --git a/knowledge-base/common-newtonsoft-breaks-datasourcerequest-serialization.md b/knowledge-base/common-newtonsoft-breaks-datasourcerequest-serialization.md index c867089f22..29b6295c5f 100644 --- a/knowledge-base/common-newtonsoft-breaks-datasourcerequest-serialization.md +++ b/knowledge-base/common-newtonsoft-breaks-datasourcerequest-serialization.md @@ -39,6 +39,7 @@ Now, when I
````RAZOR //something like @@ -75,7 +76,8 @@ Use explicit System.Text.Json serialization when needed: * to serialize the DataSourceRequest - make it explicit in the WASM app service: -````C#.skip-repl +
+````C# public async Task> GetForecastListAsync(DataSourceRequest gridRequest) { HttpResponseMessage response = await Http.PostAsJsonAsync( @@ -87,7 +89,8 @@ public async Task> GetForecastListAsync(DataSource * when deserializing it - don't let the framework deserialize with the registered serialized (Newtonsoft) but take it as a string in the action and deserialize explicitly there with System.Text.Json: -````C#.skip-repl +
+````C# [HttpPost] public async Task> Post([FromBody] string gridRequestAsString) { diff --git a/knowledge-base/common-struct-error.md b/knowledge-base/common-struct-error.md index 7f867d6a12..c854fb48fc 100644 --- a/knowledge-base/common-struct-error.md +++ b/knowledge-base/common-struct-error.md @@ -24,12 +24,15 @@ res_type: kb When using a data-bound component, the application gets a null exception, and the component does not work. When running the Telerik Blazor application the application gets an error similar to the following: -````C#.skip-repl +
+````C# ArgumentNullException: Value cannot be null. (Parameter 'source') System.Linq.ThrowHelper.ThrowArgumentNullException(ExceptionArgument argument) ```` To reproduce the problem, you can use the following code sample: + +
````RAZOR @@ -83,7 +86,6 @@ The cause for this null exception is the binding of Telerik UI for Blazor compon The solution is to always bind the component to a `class` model, not a `struct`. For more information, see [Data Binding Overview](slug://common-features-data-binding-overview#how-to-provide-data).
- ````CS public class Product { diff --git a/knowledge-base/dropdown-kb-bind-to-enum.md b/knowledge-base/dropdown-kb-bind-to-enum.md index 5ff5b43743..011a16b33e 100644 --- a/knowledge-base/dropdown-kb-bind-to-enum.md +++ b/knowledge-base/dropdown-kb-bind-to-enum.md @@ -61,7 +61,7 @@ Here are examples of both. @* for a combo box, make sure that custom values and clearing are not available unless you are explicitly OK with that *@ + ShowClearButton="false" AllowCustom="false" Filterable="true"> @code { @@ -104,7 +104,7 @@ You will see blank space above the combobox until you select something.
+ ShowClearButton="false" AllowCustom="false" Filterable="true" Placeholder="Select an option"> @code { diff --git a/knowledge-base/dropdowns-readonly-struct-error.md b/knowledge-base/dropdowns-readonly-struct-error.md index 99b624869c..13b2f1586d 100644 --- a/knowledge-base/dropdowns-readonly-struct-error.md +++ b/knowledge-base/dropdowns-readonly-struct-error.md @@ -34,6 +34,7 @@ Telerik.Blazor.Components.TelerikComboBox.b ## Steps to Reproduce +
````RAZOR Selected value: @selectedValue
@@ -70,7 +71,7 @@ There are two approaches to avoiding this error: * When setting the `Data` of the dropdown, make it a collection of anonymous objects, for example: - **Razor** +
````RAZOR.skip-repl @* See the Select in the Data parameter *@ diff --git a/knowledge-base/editor-convert-to-plain-text.md b/knowledge-base/editor-convert-to-plain-text.md index b802e5ff60..e211cbd495 100644 --- a/knowledge-base/editor-convert-to-plain-text.md +++ b/knowledge-base/editor-convert-to-plain-text.md @@ -45,6 +45,7 @@ To export to another format, use the corresponding namespace and format provider >caption Obtain the Editor HTML value as plain text +
````RAZOR @*TxtFormatProvider*@ @using Telerik.Windows.Documents.Flow.FormatProviders.Txt; diff --git a/knowledge-base/grid-aggregates-and-datatable.md b/knowledge-base/grid-aggregates-and-datatable.md index 5992a58c31..d15b7ed852 100644 --- a/knowledge-base/grid-aggregates-and-datatable.md +++ b/knowledge-base/grid-aggregates-and-datatable.md @@ -43,6 +43,7 @@ I have a TelerikGrid with a [DataTable binding](https://demos.telerik.com/blazor Attempting to use built-in aggregates with the templates that need to extract their values will throw an exception for the aggregated field, for example `Salary` in this snippet (it is the first one declared). +
````RAZOR @using System.Data @using Telerik.DataSource.Extensions diff --git a/knowledge-base/grid-center-checkbox-column.md b/knowledge-base/grid-center-checkbox-column.md index 78816c536c..e5f6a9dd09 100644 --- a/knowledge-base/grid-center-checkbox-column.md +++ b/knowledge-base/grid-center-checkbox-column.md @@ -32,13 +32,14 @@ How to center the selection checkboxes in the GridCheckboxColumn? There are a few alternative ways to center the checkboxes in the GridCheckboxColumn or the TreeListCheckboxColumn. * The easiest option is to set a smaller column width: - +
````RAZOR ```` * Use CSS, which centers the content of the first Grid/TreeList column, no matter what that column is. +
````RAZOR @@ -52,6 +53,7 @@ There are a few alternative ways to center the checkboxes in the GridCheckboxCol * Use the `OnCellRender` event of the [Grid](slug://grid-column-events) or [TreeList](slug://treelist-column-events) to render a custom CSS class for the checkbox column table cells. Then, apply a `text-align:center` style for this class. You will need [CSS specificity](https://css-tricks.com/specifics-on-css-specificity/), which is higher than **0, 0, 1, 1** (one class and one element). +
````RAZOR diff --git a/knowledge-base/grid-conditional-cell-background.md b/knowledge-base/grid-conditional-cell-background.md index 1af82b8e23..5a82da6ffb 100644 --- a/knowledge-base/grid-conditional-cell-background.md +++ b/knowledge-base/grid-conditional-cell-background.md @@ -135,8 +135,7 @@ You can fully control the row rendering through a [row template](slug://grid-tem // to style the entire row, you can use the same class for all cells, or their style attribute // to style individual cells - either use their style attribute, or apply a conditional class only to them - - employee photo + @currRowData.Name @@ -162,7 +161,7 @@ You can fully control the row rendering through a [row template](slug://grid-tem string GetConditionalCellClass(SampleData rowData) { - if(rowData.ID % 3 == 0) + if (rowData.ID % 3 == 0) { return "yellow-cell-bg"; } @@ -177,11 +176,11 @@ You can fully control the row rendering through a [row template](slug://grid-tem } public IEnumerable MyData = Enumerable.Range(1, 50).Select(x => new SampleData - { - ID = x, - Name = "name " + x, - HireDate = DateTime.Now.AddDays(-x) - }); + { + ID = x, + Name = "name " + x, + HireDate = DateTime.Now.AddDays(-x) + }); } ```` diff --git a/knowledge-base/grid-csv-export-change-field-delimiter.md b/knowledge-base/grid-csv-export-change-field-delimiter.md index 3ba654c697..3eef68d8ad 100644 --- a/knowledge-base/grid-csv-export-change-field-delimiter.md +++ b/knowledge-base/grid-csv-export-change-field-delimiter.md @@ -48,6 +48,7 @@ To change the field delimiter, do the following: 1. Pass that `MemoryStream` to the `args.Stream` of the `GridAfterCsvExportEventArgs`, so that the modifications can be saved to the actual exported file. +
````RAZOR @*Customize the field delimiter of the exported CSV file*@ diff --git a/knowledge-base/grid-expand-button-tooltip.md b/knowledge-base/grid-expand-button-tooltip.md index af8b156f94..4cde2a14a0 100644 --- a/knowledge-base/grid-expand-button-tooltip.md +++ b/knowledge-base/grid-expand-button-tooltip.md @@ -89,6 +89,8 @@ The example below shows one way to do that, and to distinguish a particular grid { // using try-catch to prevent JSInterop calls at too early stage // ensure the hierarchy expand icons have the desired tooltip after the grid re-renderes with new data + // ensure the HTML is rendered in the browser + await Task.Delay(100); await _js.InvokeVoidAsync("setGridExpandButtonTitles", ".titles-on-expand-buttons", "Expand Details"); } catch (InvalidOperationException e) { } diff --git a/knowledge-base/grid-one-expanded-detail-template.md b/knowledge-base/grid-one-expanded-detail-template.md index 8404f556b4..bda1d780b9 100644 --- a/knowledge-base/grid-one-expanded-detail-template.md +++ b/knowledge-base/grid-one-expanded-detail-template.md @@ -68,7 +68,7 @@ You can use the [grid state](slug://grid-state) to make sure only one item is ex state.ExpandedItems = new List { currItem }; // Note: SetState() will call OnRead, so you may want to // consider raising flags and caching data if you want to reduce requests for remote data - await Grid.SetState(state); + await Grid.SetStateAsync(state); } async Task OnRowClickHandler(GridRowClickEventArgs args) diff --git a/knowledge-base/grid-static-group.md b/knowledge-base/grid-static-group.md index 468be4d7c9..4646c55a70 100644 --- a/knowledge-base/grid-static-group.md +++ b/knowledge-base/grid-static-group.md @@ -143,6 +143,7 @@ Examples of both follow below, see the code comments for details. The key thing is to set `Visible=false`, the other settings are to ensure it cannot be shown, resized, edited, moved or otherwise interacted with. Hiding it from the column chooser will also prevent the user from showing it on their own, the other settings are to showcase you can disable them, and to limit the options in case your other state modifications require that you show it at some point. You can tweak this as necessary. +
````RAZOR @@ -151,6 +152,7 @@ The key thing is to set `Visible=false`, the other settings are to ensure it can >caption Sample CSS rules to hide the group header and/or the [x] buttons on group indicators +
````RAZOR