Quantcast
Channel: ASP.NET Team Blog
Viewing all 372 articles
Browse latest View live

Legacy SharePoint Integration Information Is No Longer Available on DevExpress.com

$
0
0

We deprecated our legacy SharePoint integration demos and related help documents for our v21.2 release. These resources no longer reflect our SharePoint strategy and SharePoint development best practices.

SharePoint Support: Legacy Strategy

The DevExpress ASP.NET Subscription introduced SharePoint support in 2008. Over the intervening years, we maintained and upgraded our controls to work with SharePoint 2013 and 2016. Regardless of SharePoint version, we offered two ways to integrate DevExpress control into a SharePoint portal.

  • You could write code and integrate any DevExpress ASP.NET Control within a SharePoint page.
  • You could use a codeless method to enhance a SharePoint portal: replace all list and memo editors with DevExpress counterparts.
SharePoint Support: ASP.NET Web Forms Controls and Web Parts

The second method focuses on list and memo editors for a reason. These UI elements had limited capabilities for older versions of SharePoint. Users often wanted to replace all default widgets with advanced versions. Our integrated installer allowed you to do that. You could integrate DevExpress Grid View and Html Editor into all your SharePoint Portal pages without code.

SharePoint Support: Current Strategy

SharePoint 2019 and SharePoint Online changed our strategy in the following ways:

  • SharePoint's integration mechanism changed. We decided that the best way to adjust is to focus on a more modern technology. You can now integrate any DevExtreme JavaScript Widget into SharePoint portal pages. We no longer support ASP.NET Web Forms Control integration.
  • We found that the functionality of standard list and memo widgets now satisfies most users. We no longer support the integration feature that replaced standard widgets with DevExpress counterparts across all pages in a SharePoint portal.
SharePoint Support: JavaScript Widgets

Please review the following resources for up-to-date information on our JavaScript widgets and integration strategies for SharePoint portals.

If you have questions on this change or require further assistance, please submit a ticket via the DevExpress Support Center. We will be happy to follow-up.


Grid for Blazor - Standard and Popup Edit Forms (v21.2)

$
0
0

As you may know, our most recent major update - v21.2 – introduced new data editing and validation features for our new DevExpress Blazor Grid component(CTP). Should you have any questions/comments about these new features, please post a comment below or create a new support ticket.

New Blazor Edit Forms

Our Blazor Grid supports two new edit modes: Standard and Popup Edit Forms.

DevExpress Blazor Grid - Edit Form

Use the Edit Mode option to switch between available modes:

Online Demo

New Blazor Command Column

To enable data editing, add a DxGridCommandColumn to your Grid's Razor markup. This column displays the New, Edit, and Delete buttons:

<DxGrid Data="DataSource" ...><Columns><DxGridCommandColumn />
    @*...*@</Columns></DxGrid>

The NewButtonVisible, EditButtonVisible, and DeleteButtonVisible options allow you to hide the default command buttons. If you want to implement custom buttons, use the CellDisplayTemplate.

Customizing Edit Form

Currently, our Blazor Grid requires that you create a custom edit form. The EditFormTemplate allows you to create edit forms using standard or DevExpress data editors. I recommend that you use our Form Layout component within the Edit Form to generate form layouts with ease:

<DxGrid ...>
  ...<Columns><DxGridCommandColumn />
    @*...*@</Columns><EditFormTemplate Context="editFormContext">
    @{
      var employee = (Employee)editFormContext.EditModel;
    }<DxFormLayout><DxFormLayoutItem Caption="First Name:"><DxTextBox @bind-Text="@employee.FirstName" /></DxFormLayoutItem><DxFormLayoutItem Caption="Last Name:"><DxTextBox @bind-Text="@employee.LastName" /></DxFormLayoutItem></DxFormLayout></EditFormTemplate></DxGrid>

Edit Model and Data Item

Our Blazor Grid will create an internal Edit Model based on your data item's class when a user edits data. The Grid uses .NET value equality comparison to compare data Items by default. If your data source includes a key field or multiple keys, assign them to the KeyFieldName or KeyFieldNames property to disable .NET value comparison and instead allow the grid to compare data objects using keys.

You can access the Edit Model in the CustomizeEditModel event handler to update its values. The following code initializes values when a new row is being edited:

async Task Grid_CustomizeEditModel(GridCustomizeEditModelEventArgs e) {
  if (e.IsNew) {
    var editModel = (Employee)e.EditModel;
    editModel.HireDate = DateTime.Today;
  }
}

This event also allows you to create a custom Edit Model instead of an automatically created object.

Validate Data

If you assign data annotation attributes to the Edit Model properties, our Blazor Grid automatically validates associated values. Add Blazor's ValidationMessage component to display validation errors for data editors separately or ValidationSummary to summarize validation error messages.

<DxGrid ...>
  ...<Columns><DxGridCommandColumn />
    @*...*@</Columns><EditFormTemplate Context="editFormContext">
    @{
      var employee = (Employee)editFormContext.EditModel;
    }<DxFormLayout><DxFormLayoutItem Caption="First Name:"><DxTextBox @bind-Text="@employee.FirstName" /></DxFormLayoutItem><DxFormLayoutItem Caption="Last Name:"><DxTextBox @bind-Text="@employee.LastName" /></DxFormLayoutItem><DxFormLayoutItem ColSpanMd="12"><ValidationSummary /></DxFormLayoutItem></DxFormLayout></EditFormTemplate></DxGrid>
Note: Since our Grid supports Blazor's Validator components, you can easily implement custom validation scenarios.

Save Changes

Before saving changes, you can handle the following events to validate user input, access permissions-related info, and post changes to the underlying data source:

  1. The Grid raises its EditModelSaving event after a user has submitted the edit form and data validation has passed.
  2. The DataItemDeleting event is triggered after the user has confirmed the delete operation.
  3. The DataItem property returns your data object.
  4. The EditModel properties contain updated values.

Perform any additional checks, if necessary, and update your data source in these event handlers. Finally, be sure to re-bind the Grid with the updated data source to refresh displayed data:

async Task OnEditModelSaving(GridEditModelSavingEventArgs e) {
  var editModel = (Employee)e.EditModel;
  var dataItem = e.IsNew ? new Employee() : NorthwindContext.Employees.Find(editModel.EmployeeId);

  if (dataItem != null) {
    dataItem.FirstName = editModel.FirstName;
    dataItem.LastName = editModel.LastName;
    if (e.IsNew)
        await NorthwindContext.AddAsync(dataItem);
    await NorthwindContext.SaveChangesAsync();

    // Reload the entire Grid.
    GridDataSource = await NorthwindContext.Employees.ToListAsync();
  }
}

async Task OnDataItemDeleting(GridDataItemDeletingEventArgs e) {
  var dataItem = NorthwindContext.Employees.Find((e.DataItem as Employee).EmployeeId);

  if (dataItem != null) {
    NorthwindContext.Remove(dataItem);
    await NorthwindContext.SaveChangesAsync();

    // Reload the entire Grid.
    GridDataSource = await NorthwindContext.Employees.ToListAsync();
  }
}

Blazor Rich Text Editor - Localization and Text Customization Enhancements (v21.2)

$
0
0

As you may know, we released a preview version of our Rich Edit Blazor component last July. We are happy to announce the official release of the DevExpress Rich Text Editor for Blazor in our v21.2 release cycle.

For those unfamiliar with this product, the DevExpress Blazor Rich Text Edit component allows you to quickly incorporate Microsoft Word-inspired text editing functionality for web apps targeting the Blazor platform.

Blazor Rich Text and Word Document Editor

Our Blazor Rich Text Editor/Word Processing component includes all features announced with the EAP version and the following new capabilities:

Localization

As you may know, DevExpress Blazor components ship with localizable resources for UI elements (such as button captions, menu items, error messages, and dialog boxes). You can now also localize our Blazor Rich Text Editor for specific languages and locales.

DevExpress Blazor - Localization

To localize your Blazor application, please follow the instructions outlined in the following help topic: Blazor Localization

Context Menu

Our Rich Text Editor for Blazor ships with a built-in context/popup menu (able to display both single and multi-level menu items). As you would expect, this context/popup menu allows users to quickly access word-processing-related functions/operations.

The menu itself displays contextually relevant options when a user right-clicks on a given document element.

Blazor rich text editor image context menu

New Blazor Word Processing API

v21.2 includes the following new Rich Text Editor API members:

  • ReadOnly - specifies whether users can edit a document.
  • Modified - indicates if the current document includes unsaved changes.
  • DocumentFormat - allows you to set a base format for storing document content. Specify this option so that you can open and save document formats other than OpenXml.
  • DocumentLoaded - this event fires after the control has successfully created or opened a document.
  • DocumentContentChanging - use this event to edit the document before saving it.
  • SaveDocumentAsync - this asynchronous method saves the document and raises the DocumentContentChanged event once saved.
  • GotFocus - fires after the Rich Text Editor receives focus.
  • LostFocus - triggers after the Rich Text Editor loses focus.

New Dialogs

v21.1.5 introduced the Table and Hyperlink dialogs. In v21.2, we added the following UI dialogs to help users edit documents within our Blazor Rich Text Editor:

  • Font - includes all available font settings: name, style, size, color, and more.

Blazor rich text editor font customization dialog

  • Paragraph - displays paragraph settings, including options for "Indents and Spacing" and "Line and Page Breaks".
  • Bookmark - allows a user to configure, insert and delete document bookmarks.
  • Tabs - users can add, remove, and customize settings for document tab stops.
  • Insert Cells - allows a user to insert a group of cells into a table.
  • Delete Cells - can be used to delete a selected group of table cells.
  • Split Table Cells - allows a user to split table cells.
  • Find and Replace - can be used to find and optionally replace small text blocks within the document.

Blazor rich text editor search and replace

  • Page Setup - contains page settings such as paper size, page margins, and layout options.

Blazor rich text editor page size settings

  • Alert - a special dialog used to display notifications and errors to end-users.

Try these new UI dialogs now: Online Demo.

Your Feedback Matters

As always, we welcome your feedback. Please let us know what you think of our Blazor Rich Text Edit control by leaving a comment below or creating a support ticket. We'll be happy to follow up.

Blazor Scheduler - New Templates, Cell Customization, Adaptivity, and more (available in v21.2)

$
0
0

As you may already know, our most recent release (v21.2) includes several enhancements for the DevExpress Blazor Scheduler component. In this post, I'll summarize these new features and briefly describe their use.

As you may already know, our most recent release (v21.2) includes several enhancements for the DevExpress Blazor Scheduler component. In this post, I'll summarize these new features and briefly describe their use.

Templates

With v21.2, we added three new templates that allow you customize the appearance of our Blazor Scheduler:

  1. Resource Header Template
  2. Date Header Template
  3. Time Cell Template

These flexible templates allow you to add simple HTML elements (such as images) or other Blazor components.

1. Resource Header Template

You can use the new ResourceHeaderCellTemplate to customize our Blazor Scheduler's resource header area. Here's an example that uses ResourceHeaderCellTemplate to display an employee's profile image and name into the resource header region:

blazor-scheduler-resource-header-customization

Demo | Documentation

2. Date Header Template

A new DateHeaderCellTemplate will be of help when you need to display additional content in the date header cell region or if simply you want to change the header's default date format:

blazor-scheduler-set-custom-date-cell-format

Demo | Documentation

3. Time Cell Template

Use the new TimeCellTemplate to customize our Blazor Scheduler's time cells. For example, you can use this template to display the total number of appointments by day within the component's footer area:

blazor-scheduler-time-cell-template

Demo | Documentation

Responsive Layout Enhancements

Our Blazor Scheduler component's Day, Week, and Work Week Views now have compact date headers. These Views also adapt date headers and the time ruler depending on screen size.

blazor-scheduler-mobie-friendly-responsive-layout

In addition, all Scheduler Views can hide appointment captions (when space limits the component's ability to display the caption in full).

Cell Customization API

Our new HtmlCellDecoration event allows you to customize the appearance of Scheduler cells.

blazor-scheduler-cell-appearance-customization

Use this new API for scenarios such as highlighting cells within a specific interval for a specific resource, assigning different colors to different date header cells, highlighting the all-day area, etc.

The HtmlCellDecoration event also provides several data arguments to assign CSS classes and inline styles for cell customization:

PropertyDescription
CellTypeSpecifies the Scheduler cell's type.
CssClassSpecifies the name of a CSS class applied to the Scheduler cell.
IntervalsSpecifies the interval(s) to which the Scheduler cell belongs.
ResourcesSpecifies resources associated with the Scheduler cell.
StyleSpecifies the name of an HTML style attribute applied to the cell.

Other API Enhancements

The DevExpress Scheduler for Blazor (v21.1) also includes these following API enhancements:

  • All Blazor Scheduler Views now include a SnapToCellsMode property. With this property, you can enable/disable the snapping of appointments to time cells or enable automatic snapping (based on appointment time intervals). By default, appointments stretch to the nearest cell borders. You can change this behavior so that an appointment's width is proportional to its duration (SnapToCellsMode= SchedulerSnapToCellsMode.Never):

blazor-scheduler-set-appointment-duration-time

  • The AppointmentFormShowing event's arguments now include a Title property. Use it to change the Appointment Form title.

Your Feedback Matters

As always, we welcome your thoughts/feedback/suggestion. Please comment below or create a new DevExpress Support Center ticket to share feedback with us.

Happy Holidays and a Happy New Year!

ASP.NET Web Forms and MVC - Internet Explorer support questions

$
0
0

Our ASP.NET Web Forms and MVC components still support Internet Explorer 9+. Last versions of Internet Explorer have security risks and a lack of modern CSS approaches and JavaScript features. Development both for advanced and feature-poor browsers requires additional resources to find effective solutions for complex fixes and implement new functionality.

The public browser traffic analysis shows that Internet Explorer continues to lose popularity when compared to modern browsers. For instance, the graphic below illustrates that Edge has displaced Internet Explorer over recent years. 

Of course, we understand (and appreciate) that many of our customers are still working on projects started in the first decade of this century - when Internet Explorer was a major player in the browser space. Our main goal is to help you address your business needs in the most efficient manner possible and to that end, we need your feedback on a few key questions. Please take a minute to share Internet Explorer related feedback with us.

Blazor Components - 2022 Survey

$
0
0

We hope you had a happy and healthy holiday season.

We’ve nearly completed our 2022 Blazor Roadmap. Here’s a brief overview for our upcoming development plans (a blog post will be published shortly):

  • Release our new Blazor Grid (with essential features)
  • Deliver upgraded Blazor Editors
  • Develop new Blazor Layout components
  • Add more features to existing Blazor controls

In short, we’re focusing on highly requested features. However, there are two recent issues that may consume our resources and delay our product deliverables. To help us finalize and publish our Blazor roadmap, we need your feedback on the following:

1. AoT Compilation & Trimming

As you may already know, Microsoft released Visual Studio 2022 and .NET 6 on November 8th, 2021.

DevExpress Blazor components support these products with our latest minor release (v21.2.4).

Limitations

Currently, our Blazor components do not support the following .NET 6 enhancements for Blazor Web Assembly applications:

We recently discovered that AOT-compiled applications raise runtime exceptions. However, if AOT is disabled, the Web Assembly apps work without issues. If you encounter this issue, I recommend disabling AOT by removing the RunAOTCompilation option or setting it to false in your .csproj file:

<PropertyGroup>
  ...<RunAOTCompilation>false</RunAOTCompilation></PropertyGroup>

We are actively working on this complex issue both internally and with the Microsoft Blazor team. The main challenge is that the new AOT compiler lacks an effective way to debug the compiled assembly or map it to its source code.

We will continue to look for a solution, however, this unexpected task may delay our Blazor plans. Please fill out the survey below and tell us how important these recent features are for your Blazor projects.

2. Bootstrap Native Render

Our Blazor components render their HTML using Bootstrap which offers several advantages:

  • Out-of-the box integration with Bootstrap themes supplied by Bootsrap contributors and third-party developers
  • Application-level adaptivity
  • Consistent look-and-feel across browsers and devices

The inherent advantage of using Bootstrap for constructing web user interfaces is that it allows for developing responsive layouts and provides your web application production-quality visual design from the start.

Limitations

However, we've found several component-specific issues: Bootstrap UI/UX is missing several key UI elements and features (e.g. hover state, bottom or side tabs, popup footers), the focus on data editor only highlights the text field instead of the entire component, read-only state is not supported, and Bootstrap themes have large/wide paddings that is great for mobile/touch screen devices but waste space on desktop layouts.

Rest assured, we've implemented custom (non-Bootstrap) code in our themes to overcome these annoyances and support the common features you've come to expect from our components. Therefore, our components may differ from classic Bootstrap – as our themes must support more component features.

We need your feedback to determine whether native Bootstrap rendering is important within your Blazor application.

Survey

Please help us prioritize our 2022 objectives by completing out this survey:

Blazor Navigation and Layout - Menu Data Binding, Context Menu Templates, and new Tabs Scroll Modes (v21.2)

$
0
0

As you may already know, our most recent release (v21.2) includes a series of enhancements for the following DevExpress Blazor layout components: Blazor Menu, Blazor Context Menu, and Blazor Tab control.

Menu Data Binding

Our Blazor Menu control can be bound to both hierarchical or flat data. To incorporate the DevExpress Blazor Menu control in your next Blazor app, assign your data source to the component's Data property, add a DxMenuDataMapping item to the DataMappings collection, and map item properties (text, icon, and so on) to data source fields.

Additional settings are driven by data type.

Binding to Hierarchical Data

To bind the Menu component to hierarchical data and obtain the child item collection from the corresponding data source field, specify the DxMenuDataMapping.Children property.

You can define item hierarchy levels by using different item collections types. To specify different mappings for different hierarchy levels, add multiple DxMenuDataMapping items and specify the Level property for each instance.

<DxMenu Data="@Data"><DataMappings><DxMenuDataMapping Text="CategoryName" Children="Products"/><DxMenuDataMapping Level="1" Text="ProductName"/></DataMappings></DxMenu>

@code {
  public IEnumerable<ProductCategory> Data => new List<ProductCategory>() {
    new ProductCategory() { CategoryName = "Bikes", Products = {
        new Product { ProductName = "Mountain Bikes" },
        new Product { ProductName = "Road Bikes" }
      }
    },
    new ProductCategory() { CategoryName = "Clothing", Products = {
        new Product { ProductName = "Bib-Shorts" },
        new Product { ProductName = "Caps" },
        new Product { ProductName = "Gloves" }
      }
    } ,
  ...
  };
  public class ProductCategory {
    public string CategoryName { get; set; }
    public List<Product> Products { get; } = new List<Product>();
  }
  public class Product {
    public string ProductName { get; set; }
  }
}

Binding to Flat Data

To bind the Menu component to flat data (wherein parent-child relationships are defined by specific item properties), simply set the following property values:

<DxMenu Data="@Data"><DataMappings><DxMenuDataMapping Key="ID"
      ParentKey="CategoryID"
      Text="Name" /></DataMappings></DxMenu>

@code {
  public IEnumerable<ProductDataItem> Data => new List<ProductDataItem>() {
    new ProductDataItem() { ID = 0, Name = "Bikes" },
    new ProductDataItem() { ID = 1, Name = "Mountain Bikes", CategoryID = 0 },
    new ProductDataItem() { ID = 2, Name = "Road Bikes", CategoryID = 0 },
    new ProductDataItem() { ID = 3, Name = " Clothing" },
    new ProductDataItem() { ID = 4, Name = "Bib-Shorts", CategoryID = 3 },
    new ProductDataItem() { ID = 5, Name = "Caps", CategoryID = 3 },
    new ProductDataItem() { ID = 6, Name = "Gloves", CategoryID = 3 },
    ...
  };

Our Blazor Menu includes a single class ProductDataItem - whose objects encapsulate category and product data. Note that this class includes an additional property (Category ID - used to map products to a corresponding category):

  public class ProductDataItem {
    public object ID { get; set; }
    public object CategoryID { get; set; }
    public string Name { get; set; }
  }
}

Binding to Observable Collection

The DevExpress Blazor Menu component automatically re-renders items if its data source uses a collection that implements the INotifyCollectionChanged interface. For example, when you add/remove an item, or clear the child item collection, a data change notification is sent to the menu component by the INotifyCollectionChanged interface.

Demo | Documentation

Context Menu Templates

Our Blazor Context Menu allows you to modify the layout and appearance of its items and submenus. You can use the following new properties to specify both common and individual item templates:

The following code demonstrates how to create copy/cut/paste UI menu items using the templates:

<DxContextMenu @ref="@ContextMenu" Data=@commands ItemClick="@OnItemClick"><DataMappings><DxContextMenuDataMapping Text="Name" IconCssClass="IconCssClass" BeginGroup="BeginGroup" /></DataMappings><ItemTemplate><div class="d-flex px-2 py-1"><span class="mr-1 @context.IconCssClass"></span>
      @context.Text<span class="ml-auto">@(((MenuCommand)context.DataItem).Shortcut)</span></div></ItemTemplate></DxContextMenu>

The following code demonstrates how menu item data objects are created:

List<MenuCommand> commands = new List<MenuCommand> {
  new MenuCommand() { Name = "Copy", IconCssClass = "menu-icon-copy menu-icon", Shortcut = "Ctrl+C" },
  new MenuCommand() { Name = "Cut", IconCssClass = "menu-icon-cut menu-icon", Shortcut = "Ctrl+X" },
  new MenuCommand() { Name = "Paste", IconCssClass = "menu-icon-paste menu-icon", Shortcut = "Ctrl+V" },
  new MenuCommand() { Name = "Select All", IconCssClass = "menu-icon-selectall menu-icon", Shortcut = "Ctrl+A", BeginGroup = true }
};

blazor-context-menu-templates

Demo | Documentation

Tabs Scroll modes

In previous versions, tabs were moved to a new line when they extend beyond a container's width. With our most recent release (v21.2), our Tabs component for Blazor allows you to specify whether to display overflowing tabs and how the user can navigate to them via the new DxTabs.ScrollMode property:

  • Swipe - The container only displays tabs that fit the container's width. To navigate to other tabs, users can scroll the container via our scrolling mechanisms based on device type: hover the container, hold Shift and scroll the mouse wheel on desktop devices or swipe to the left or right within the container on mobile and tablet devices.
  • NavButtons - The container only displays tabs that fit the container's width. Users can click the left or right navigation button to scroll the container and navigate to other tabs. Navigation via the scrolling mechanisms mentioned above is also supported.
  • Auto - Scroll mode adapts to device type. Mobile and tablet devices use Swipe mode. Desktop devices use NavButtons mode.
  • NoScroll - Users cannot scroll tabs. Tabs are moved to a new line when they extend beyond a container's width.

For example, the code below sets scroll mode to Auto :

<DxTabs ScrollMode='TabsScrollMode.Auto'>...</DxTabs>

In this instance, tab navigation buttons appear on desktop devices when space prohibits the display of all tabs:

blazor-tabs-scroll

Swipe scrolling is also enabled for mobile and tablet devices:

blazor-tabs-scroll-mobile

Demo | Documentation

Blazor UI – 2022 Roadmap

$
0
0
The information contained within this Roadmap details our current/projected development plans. Please note that this information is being shared for INFORMATIONAL PURPOSES ONLY and does not represent a binding commitment on the part of Developer Express Inc. This roadmap and the features/products listed within it are subject to change. You should not rely or use this information to help make a purchase decision about Developer Express Inc products.

The Blazor UI Roadmap outlined below includes development priorities for 2022. We will revise our plans for the second half of 2022 and include new features based on your feedback once we release v22.1 in May.

New Components

Accordion (v22.1)

In Development

Our Blazor Accordion component will allow you to display collapsible panels and help visualize information within a limited amount of page space. You will be able to use the DevExpress Accordion component for navigation purposes and to organize items into groups. Its built-in search engine will allow end-users to locate required items among all elements.

Flyout (v22.1)

In Development

This Blazor contextual popup UI element can be used to display hints, warnings, or additional information.

Window (v22.1)

Not Yet Started

This popup non-modal Window for Blazor will allow you to introduce a resizable/draggable popup UI to your Blazor-powered application.

Spreadsheet (v22.2)

Not Yet Started

In the second half of 2022, we plan to release a Spreadsheet control for Blazor. As you might expect, it will be an Excel-inspired control that will allow you to incorporate spreadsheet functionality into a Blazor Server application. With our Blazor Spreadsheet’s UI and API, you will be able to create, edit and save spreadsheet documents as needs dictate.

Sidebar (v22.2)

Not Yet Started

With our new Sidebar component, you’ll be able to add a sidebar alongside the primary display region of your app and display relevant information or navigation options for end users.

Splitter (v22.2)

Not Yet Started

Our Splitter UI for Blazor will allow you to better organize web page layout by dividing it across multiple resizable content panes.

File Manager (v22.2)

In Development

We're creating a new Blazor File Manager component to manage a remote file systems using standard file management operations.

Grid

We will officially release our Grid for Blazor in our v21.2.6 release cycle (March 2022). This year, you may expect the following features:

Server Mode Data Binding (v21.2)

In Development

Server mode will allow you to execute data operations against millions of records in seconds.

Master/Detail View (v21.2)

In Development

Collapsible detail row will allow you to display additional information for parent rows.

Preview Row (v21.2)

In Development

Our Blazor Data Grid’s Preview row will allow you to incorporate additional information for quick preview by your end-users.

Row and Cell HTML Decoration (v21.2)

Available in v21.2.4

Our Blazor Grid’s API will allow you to change the appearance of rows and cells.

Column Resizing (v21.2)

In Development

We will ship two resize modes and allow your end-users to resize Blazor Grid columns.

Column Chooser (v21.2)

In Development

Our Blazor Column Chooser UI will allow users to manage column position and visibility at runtime.

Automatic Data Refresh (v21.2)

In Development

If a data source implements IBindingList, INotifyCollectionChanged, or INotifyPropertyChanged interfaces, our Blazor Grid will automatically track data source changes and refresh displayed data when necessary. 

Column Visibility API (v21.2)

In Development

We will ship an updated engine to manage column visibility in code.

Inline Row Editing (v22.1)

Not Yet Started

We will add a new edit mode to edit an entire data row simultaneously.

Save and Restore a Layout (v22.1)

Not Yet Started

With our updated Blazor Grid API, you will be able to save a grid’s layout (e.g., column position, size, visibility, sort order and direction, applied filters, grouped columns, etc).

Summary Item Visibility API (v22.1) 

Not Yet Started

We will implement an API to manage summary item visibility in code.

Data Editors

Common Enhancements (v22.1 & v22.2)

To leverage the capabilities of our next-gen Blazor Data Grid, improve component performance and resolve known issue , we will replace several data editors and upgrade the remainder throughout our v22.1 and v22.2 release cycles.

New Editors (v22.1)

In Development

Text Input

A generic text editor for Blazor. Our Text input will allow you to automatically transform end-user input into a typed non-string value.

Toggle Button

Toggle button will allow you to include two-state (pressed/released, on/off) buttons to your Blazor application.

Password Box

This editor will allow your end-users to enter passwords safely.

Drop Down

The drop-down window for this text editor can include any content. The component API will allow you to synchronize drop-down content operations with the text field itself.

Custom Text Editor Buttons (v22.1)

In Development

Our Blazor text editors will have built-in action buttons that allow users to open a drop-down menu, increase/decrease/nullify values, and perform other actions. 

Masked Input Enhancements (v22.1)

In Development

We will extend the capabilities of our Blazor Masked Input component with the following mask types:

  • DateTimeOffset

  • TimeSpan

  • DateOnly

  • TimeOnly

We will also introduce a new way to generate masks. You will be able to track editor text changes via events, and alter resulting text based on custom logic.

Validation Enhancements (v22.1)

In Development

We will add a new validation API to our editors. This API will offer more control over data validation.

Charts

Runtime Series Label Customization (v22.1)

Not Yet Started

We will extend Chart API to allow you to format series label text based on a condition at runtime.

Export (v22.1)

In Development

You will be able to call a new Export method to export a chart to the following formats:

  • PNG
  • PDF
  • JPEG
  • GIF

Data Binding for Multi-Value Series (v22.1)

Not Yet Started

We will add new properties used to define separate value data members for series with multiple values:

  • Financial Series - new OpenValueField, HighValueField, LowValueField, CloseValueField properties
  • Range Series - new Value1Field and Value2Field properties

Palette Customization (v22.2)

Not Yet Started

We expect to add an ability to set a palette for a chart - a set of colors used to paint series in multi-series charts or pie chart sectors. A separate palette will allow you to color charts regardless of the theme set for the application.

Reports

.NET 7 Support for non-Windows Platforms (v22.1 & v22.2)

Blazor Server
In Development

As you may already know, System.Drawing.Common was deprecated for non-Windows operating systems in .NET 6 and higher. See the help topic from .NET documentation for more information: System.Drawing.Common only supported on Windows.

This breaking change affects those using DevExpress Reports on Linux and macOS (we use System.Drawing.Common to measure document text and render graphic objects including shapes, pictures, and charts). To address rendering-related issues on non-Windows operating systems, we will work on our own cross-platform rendering engine based on the SkiaSharp library throughout this year.

In this release cycle (v22.1), we will update our internal API to use our new cross-platform implementation for all System.Drawing classes not supported in .NET 6 and higher (Image, Bitmap, Font, Pen, Brush, etc.).

Once complete, we'll refine our public API and implement its cross-platform counterparts for use on non-Windows platforms. After completion, you will need to replace System.Drawing object calls with custom DevExpress counterparts to maintain continuity for apps that target .NET 7 (if they are deployed to Linux-based servers). This part of our transition will likely finish by year end (v22.2).

Parameters - Server-Side Filtering for Cascading Parameters (v22.1)

In Development

We expect to offer a new feature for nested parameters that display dynamic lists of values. If a user changes the value of a parent report parameter, you can run a parametrized SqlDataSource query or invoke a stored procedure to update the list of values for the child report parameter. This functionality will be also available for MongoDbDataSource and EFDataSource.

Cross-Tab Enhancements (v22.1)

In Development

We're going to expand the Cross-Tab capabilities for end-users and address the following requests:

  • Calculate custom totals and grand totals with expressions
  • Calculate distinct count summary
  • Conditionally hide rows and colums based on neighbor cell values
  • Apply Html-inspired formatting to cross-tab cells

Also, if time permits, we hope to introduce the ability to prevent cells, row/column groups from being split across page breaks (KeepTogether functionality).

Web Report Designer - Federation Data Source (v22.1)

In Development

The Web Report Designer Data Source Wizard will include a new option to create combined (federated) queries from different data sources. Your end-users will be able to create all supported query types: joins, unions and transforms.

Blazor WebAssembly (ASP.NET Core Hosted) Reporting Components (v22.1)

Blazor WebAssembly (ASP.NET Core Hosted)
Not Yet Started

We'll introduce a set of components for Blazor WebAssembly and ASP.NET Core backend. We expect to use our JavaScript-based Blazor Server Reporting Components as a base and offer a wrapper compatible with this technology. Our next step is to offer similar capabilities for our Blazor Native Report Viewer.

Rich Text Editor

Mail Merge (v22.1)

In Development

We will introduce mail merge support to our Blazor Rich Text Editor in our v22.1 release cycle. The mail merge implementation will allow you to bind the control to an external data source, preview dynamic content, and execute the final merge operations.

Ribbon Customization (v22.1)

In Development

We expect to incorporate Ribbon UI customizations in our v22.1 release cycle. Through customization, you will be able to hide, modify default ribbon items, and add custom items to the Rich Text Editor’s default UI ribbon.

Navigation and Layout

Form Layout  Enhancements (v22.1 & v22.2)

In Development

  • Collapsible groups will allow you to expand and collapse Form Layout groups using UI elements and in code.

  • New group header icon API will allow you to easily add custom icons to a form layout group header. 

Not Yet Started

  • Compact size mode will reduce margins and paddings (to free up space on a page). 

TreeView - Search (v22.1)

Not Yet Started

We will add a search UI to our TreeView for Blazor. New settings will allow you to customize the control’s UI and search behaviors. Additionally, we will introduce an ability to search and filter nodes in code.

Your Feedback Matters


Blazor - New Grid (Official Release)

$
0
0

I'm happy to announce the official release of DevExpress Grid for Blazor. Our most recent release (v21.2.6) includes several key Grid enhancements that I'll briefly describe in this post.

Migration Guide and Maintenance Mode

We recommend using the new Grid for Blazor instead of the previous component (Data Grid). Our team has created a detailed migration guide document that will help you: Migrate from Data Grid to Grid.

Our previous grid component is now in maintenance support mode. Therefore, we do not plan to add new features or capabilities to this component. However, our support team will address any issues you may encounter with it.

Server Mode Data Source

Our Blazor Grid now supports Server Mode data binding. Use this mode when working with large data collections in Server-based applications. Server mode allows you to quickly execute data operations against millions of records, typically within a few seconds. The following code demonstrates how to bind DevExpress Grid for Blazor to a large data source in Server mode.

<DxGrid Data="InstantFeedbackSource"><Columns><DxGridDataColumn FieldName="ShipName" /><DxGridDataColumn FieldName="ShipCity" />
    @*...*@</Columns></DxGrid>

@code {
  EntityInstantFeedbackSource InstantFeedbackSource { get; set; }
  NorthwindContext Northwind { get; set; }

  protected override void OnInitialized() {
    Northwind = NorthwindContextFactory.CreateDbContext();
    InstantFeedbackSource = new EntityInstantFeedbackSource(e => {
      e.KeyExpression = "OrderId";
      e.QueryableSource = Northwind.Orders;
    });
  }

  public void Dispose() {
    InstantFeedbackSource?.Dispose();
    Northwind?.Dispose();
  }
}

Demo | Documentation

Support for Observable Data Collections

You can bind the Blazor Grid to a data collection that implements the INotifyCollectionChanged or IBindingList interface. This collection notifies the Grid about relevant changes (when items are added or removed, when the entire collection is refreshed, etc.). The Grid will update its data automatically to reflect appropriate changes.

<DxGrid Data="@WeatherForecastData"><Columns>
  @*...*@</Columns></DxGrid>

@code {
  ObservableCollection<WeatherForecast> WeatherForecastData { get; set; }
  // ...
}

Demo | Documentation

Master-Detail View

Our Blazor Grid component allows you to create hierarchical layouts of any complexity and depth. For example, you can use a nested grid to visualize a master-detail relationship between two data tables or to display preview sections under each grid data row across all columns.

The following code demonstrates how to create two grids with Masted-Detail relationship. Start by creating a Master Grid :

<DxGrid @ref="Grid" Data="MasterGridData" AutoCollapseDetailRow="true"><Columns><DxGridDataColumn FieldName="ContactName" SortIndex="0" /><DxGridDataColumn FieldName="CompanyName" /><DxGridDataColumn FieldName="Country" /><DxGridDataColumn FieldName="City" /></Columns><DetailRowTemplate><Grid_MasterDetail_NestedGrid_DetailContent Customer="(Customer)context.DataItem" /></DetailRowTemplate></DxGrid>
@code {
  IGrid Grid { get; set; }
  object MasterGridData { get; set; }

  protected override async Task OnInitializedAsync() {
    MasterGridData = await NwindDataService.GetCustomersAsync();
  }
  protected override void OnAfterRender(bool firstRender) {
    if(firstRender) {
        Grid.ExpandDetailRow(0);
    }
  }
}

Note that the Master Grid includes a DetailRowTemplate which contains a custom Blazor Grid_MasterDetail_NestedGrid_DetailContent component. This component encapsulates a Phone data field and additional Detailed Grid :

<div class="mb-2">
    Contact Phone: @Customer.Phone</div><DxGrid Data="DetailGridData"
        PageSize="5"
        AutoExpandAllGroupRows="true"><Columns><DxGridDataColumn FieldName="OrderId" DisplayFormat="d" GroupIndex="0" /><DxGridDataColumn FieldName="ProductName" Width="40%" /><DxGridDataColumn FieldName="UnitPrice" DisplayFormat="c" /><DxGridDataColumn FieldName="Quantity" /><DxGridDataColumn FieldName="Discount" DisplayFormat="p0" /><DxGridDataColumn FieldName="ExtendedPrice" DisplayFormat="c" /></Columns><GroupSummary><DxGridSummaryItem SummaryType="GridSummaryItemType.Sum"
                       FieldName="ExtendedPrice"
                       FooterColumnName="ExtendedPrice" /></GroupSummary></DxGrid>

@code {
  [Parameter]
  public Customer Customer { get; set; }
  object DetailGridData { get; set; }
  protected override async Task OnInitializedAsync() {
    var invoices = await NwindDataService.GetInvoicesAsync();
    DetailGridData = invoices
      .Where(i => i.CustomerId == Customer.CustomerId)
      .ToArray();
  }
}

Blazor-master-detail-data-grid

Demo | Documentation

Row Preview

The Grid now allows you to show preview sections for data rows. These sections can display any content, including tables, values from data source fields, custom text, etc. Add the required content to the DetailRowTemplate and set the DetailRowDisplayMode equal to GridDetailRowDisplayMode.Always. This setting allows the Blazor Grid to expand the detailed rows without an end-user accidentally collapsing them.

<DxGrid Data="GridData"
        DetailRowDisplayMode="GridDetailRowDisplayMode.Always"><Columns>
      @* ... *@</Columns><DetailRowTemplate>
    @{
      var employee = (Employee)context.DataItem;<text>@employee.Notes</text>
    }</DetailRowTemplate></DxGrid>

Demo | Documentation

Column Resize

The Grid now supports different resize modes for columns. Use the ColumnResizeMode property to specify whether and how users can resize Grid columns.

<DxGrid Data="@Data"
        ColumnResizeMode="GridColumnResizeMode.NextColumn"><Columns>
    @_..._@</Columns></DxGrid>

blazor-data-grid-column-resize

Demo | Documentation

Column Visibility and Column Chooser

We implemented an API to manage column visibility in code. Use the new Visible and VisibleIndex properties to manage column visibility and order.

The Grid also allows users to display, hide, and reorder columns with its integrated Column Chooser. You can invoke the Column Chooser from any area of the Razor page that contains our Grid.

<DxButton Text="Column Chooser"
          RenderStyle="ButtonRenderStyle.Secondary"
          CssClass="column-chooser-button"
          Click="OnClick" /><DxGrid Data="@Data" @ref="Grid"><Columns><DxGridDataColumn FieldName="Country" /><DxGridDataColumn FieldName="Phone" Visible="false" />
    @*...*@</Columns></DxGrid>

@code {
  // ...
  DxGrid Grid { get; set; }
  void OnClick() {
    Grid.ShowColumnChooser(".column-chooser-button");
  }
}

blazor-data-grid-column-visibility-and-column-chooser

Demo | Documentation

Grid in DevExpress Project Templates

DevExpress project templates for Blazor now include the Grid component. Use these templates to save time by quickly creating a fully-functional Blazor application that contains our Grid component pre-configured and ready-to-use

ASP.NET WebForms and MVC - End of Support for Internet Explorer (v22.1)

$
0
0

Earlier this year, we asked if Internet Explorer was still important for your applications. Thank you for answering our survey.

About 95% of you responded that you do not need Internet Explorer support in your application(s) or you plan to stop supporting it in a year.

After analyzing your feedback, we have come to the decision to end support for Internet Explorer with the next major update (v22.1) of the following products:

  • ASP.NET Web Forms
  • ASP.NET MVC Extensions
  • ASP.NET Web Forms controls for Bootstrap

We understand (and appreciate) that some of our customers may still need to support Internet Explorer, so we recommend that you use v21.2 as long as necessary. However, we strongly recommend you consider Microsoft's advice: Move users to Microsoft Edge from Internet Explorer.

Blazor - End of Support for .NET 5

$
0
0

As you may already know, the Microsoft .NET team has announced the end of life support for the .NET 5 framework:

.NET 5.0 will reach end of support on May 10, 2022. After the .NET May updates, Microsoft will no longer provide servicing updates, including security fixes or technical support, for .NET 5.0. You'll need to update the version of .NET you're using to a supported version (.NET 6.0) before this date in order to continue to receive updates. -Rahul Bhandari (MSFT)

Accordingly, DevExpress Blazor UI Components v22.1+ will no longer support .NET 5. If you are targeting Blazor and wish to use our newest Blazor components, we ask that you upgrade your projects to .NET 6 (DevExpress has supported .NET 6 since v21.2). If you cannot upgrade to .NET 6, you can continue to use v21.2 in your .NET 5 Blazor projects.

By moving to .NET 6, we've leveraged important framework features, including:

  • custom elements - used throughout our Blazor component lineup (Data Grid, Popup, DropDown, and Flyout)
  • custom event arguments - used to create C# event handlers for JavaScript events without JSInterop

Update your application

To upgrade your application to .NET 6, I recommend the steps outlined in these Microsoft resources:

.NET 7

As you may know, Microsoft will likely release .NET 7 later this year.

While .NET 7 is currently in preview mode, we are actively testing our components with the upcoming framework and are engaged with the Microsoft Blazor team. Of course, once .NET 7 is officially released, we will publish an official support announcement and a compatible release build.

If you're testing .NET 7 previews for 'AoT Compilation' or 'Link Trim Mode' features, please refer to this blog post for information on limitations.

Survey

Please help us prioritize our 2022 objectives by completing this survey:

Your Feedback Matters

As always, we welcome your feedback. Let us know what you think in the field below or submit a support ticket via the DevExpress Support Center if you need to discuss a specific business need.

Blazor: New CSS Location (Breaking Change in v22.1)

$
0
0

In our v22.1 release, we improved theme delivery with the new DevExpress.Blazor.Themes NuGet package. This package contains DevExpress Blazor themes and CSS styles used to apply Bootstrap themes to DevExpress controls.

By using a NuGet package:

  • you to avoid manually downloading CSS stylesheets from GitHub
  • you get simplified version control
  • minimize upgrade issues because the DevExpress themes package automatically updates with other DevExpress Blazor packages

The move to use of a NuGet package requires that we change the location of DevExpress CSS stylesheets.

Impact on Existing Apps

All Blazor applications that use DevExpress v22.1 controls will have to be updated to reference CSS stylesheets from the DevExpress.Blazor.Themes NuGet package. This change does not affect the appearance of DevExpress controls or theme customizations, only the stylesheet reference syntax.

Please note that you cannot use the Project Converter tool to update your Blazor apps for this upcoming change.

How to Update Existing Apps

Follow the steps below to update your application.

  1. Remove the link to the dx-blazor.css and dx-blazor.bs5.css stylesheets in the _Layout.cshtml file for Blazor Server apps or the index.html file in Blazor WebAssembly apps.
// For Bootstrap 5
@*<link href="_content/DevExpress.Blazor/dx-blazor.bs5.css" rel="stylesheet" />*@
// For Bootstrap 4
@*<link href="_content/DevExpress.Blazor/dx-blazor.css" rel="stylesheet" />*@
  1. Update the theme link in the same file.

    • If using a DevExpress theme, replace the old link to the stylesheet with the following:

      // For Bootstrap 5
      @*<link rel="stylesheet" href="css/bootstrap/<theme-name>.min.css" />*@<link href="_content/DevExpress.Blazor.Themes/<theme-name>.bs5.min.css" rel="stylesheet" />
      // For Bootstrap 4
      @*<link rel="stylesheet" href="css/bootstrap/<theme-name>.min.css" />*@<link href="_content/DevExpress.Blazor.Themes/<theme-name>.bs4.min.css" rel="stylesheet" />

      Note that words within a theme name are separated by a hyphen: office-white, blazing-berry, blazing-dark.

    • If using a Boostrap-based theme, add a link to the bootstrap-external stylesheet below your theme:

      <link rel="stylesheet" href="css/pulse/bootstrap.min.css" />
      // For Bootstrap 5<link href="_content/DevExpress.Blazor.Themes/bootstrap-external.bs5.min.css" rel="stylesheet" />
      // For Bootstrap 4<link href="_content/DevExpress.Blazor.Themes/bootstrap-external.bs4.min.css" rel="stylesheet" />
  2. If you use Bootstrap 5, specify your Bootstrap version explicitly in Program.cs.

builder.Services.AddDevExpressBlazor(configure => configure.BootstrapVersion = DevExpress.Blazor.BootstrapVersion.v5);

If you want to customize a DevExpress theme, refer to the following topic for more information: Themes.

Warning Message

If you don't upgrade your Blazor app theme to our new v22.1 NuGet package, your app will display the following warning message on the page:

Blazor Themes Message

Rest assured that once you update your app, this will no longer appear.

Future: No Bootstrap Native Render in v22.2

With our next major release, some of our components (Grid, Data Editors) will render their HTML using our own rendering engine instead of Bootstrap. The new rendering engine will help us deliver:

  • Improved performance with fewer JavaScript interop calls.
  • Consistent appearance across DevExpress Blazor controls.
  • Three different size modes with improved control spacing. New size modes will apply to all controls that use the new rendering engine and allow you to create "dense" interfaces with more relevant information on the screen.

If you develop apps that make use of the four DevExpress themes, you will only see changes in font size and margins/paddings for specific elements. However, if you are working with a Bootstrap-based theme, you should plan an upgrade path in advance. Once the new rendering engine ships, DevExpress controls that support it (Grid, Data Editors) will only take CSS variable values (colors, fonts) from your Bootstrap theme. Other theme settings (paddings & margins, colors defined in widgets, shadows, border thickness, rounded corners, pseudo-classes) will be ignored.

More Info to Come

As we get closer to v22.2, we will post more information and upgrade instructions for your apps. In the meantime, please submit any support questions via the DevExpress Support Center if you need to discuss a specific business need.

Your Feedback Matters

As always, we welcome your feedback.

Blazor - New Flyout Control (v22.1)

$
0
0

Our most recent release (v22.1) ships with a new Blazor Flyout control - a popup window with an arrow displayed next to its element. The DevExpress Blazor Flyout controls's base functionality mimics those found in our Blazor Popup and DropDown UI controls. While similar in some respects, the Flyout is more suitable for the following use cases:

  • Display additional information, such as hints or educational tips next to an element
  • Display a context popup window with actions next to an element
  • Display tooltips

Display Hints & Educational Tips with Flyout

You can use the Flyout to display hints in your Blazor-powered web application. For instance, you can highlight new functionality available in your Blazor app.

DevExpress Blazor Flyout - Hint

To add the Flyout to your application, you must add the necessary control markup, specify target position, and write code to manage component visibility.

<DxMenu><Items><DxMenuItem Text="SUPPORT" /><DxMenuItem Text="BLOGS" id="blog-item" /><DxMenuItem Text="ABOUT US" /><DxMenuItem Text="PRODUCTS" /><DxMenuItem Text="DEMOS" /><DxMenuItem Text="BUY" /></Items></DxMenu><DxFlyout
    IsOpen="true"
    PositionTarget="#blog-item"
    BodyText="Now you can subscribe to our blogs to get notifications about new posts and updates."
    Width="300px"></DxFlyout>

Our Blazor Flyout will appear at the most suitable position around the target element and will recalculate its position when the page is scrolled or resized. If needs dictate, you can specify an exact position, a list of allowed positions, or restrict control position with custom boundaries.

Contextual Popups with Complex Content

Another Flyout use case is to display the control as a context popup window with actions next to an element. For instance, you can display detailed information about an individual.

DevExpress Blazor Flyout - Contextual Popup

The Flyout window includes a header and a footer and you can populate these elements with text or implement custom templated content. Each element (header, body, and footer) is fully customizable with CSS rules.

<DxFlyout @bind-IsOpen=IsOpen
          PositionTarget=@($"#employee-{CurrentEmployee?.EmployeeId}")
          FooterVisible="true"
          FooterCssClass="custom-flyout-footer"
          Position=@(FlyoutPosition.BottomStart | FlyoutPosition.TopStart)><BodyTemplate><div class="custom-flyout-body"><EmployeeCard EmployeeInfo=@CurrentEmployee CustomDetails=true/></div></BodyTemplate><FooterTextTemplate><div class="w-100"><div class="custom-flyout-footer"><DxTextBox NullText="Send a message" CssClass="flex-grow-1"/><DxButton CssClass="popup-button" Text="Send" Click=@(()=> IsOpen = false)/></div></div></FooterTextTemplate></DxFlyout>

@code {
 bool IsOpen { get; set; } = false;.
}

Note: We use the DevExpress Blazor Flyout control for similar tasks within our Scheduler component (to help deliver consistent and predictable behaviors, position recalculation, etc within the Scheduler).

DevExpress Blazor Flyout - Scheduler Integration

Display Tooltips with Flyout

To incorporate tooltip functionality in your application, use the control's mouseover and mouseout event handlers.

DevExpress Blazor Flyout - Tooltips

<div class="d-flex align-items-center" style="padding-bottom: 2px"><span class="opacity-75 pe-1">Password</span><span id="position-target" @onmouseover=@(()=> IsOpen = true) @onmouseout=@(()=> IsOpen = false) class="p-warning" ></span></div><DxTextBox Password=true/><DxFlyout @bind-IsOpen=IsOpen
    Position="FlyoutPosition.Right"
    PositionTarget="#position-target"
    Width="200px"
    BodyText="@Text"/>

@code {
    string Text { get; set; } = "Password must contain at least 10 characters and include uppercase and lowercase letters, numbers, and special characters.";
    bool IsOpen { get; set; } = false;
}

To learn more about our Blazor Flyout control, please explore our online demos or review the following help topic.

Your Feedback Matters

We'd love to know what you think of our new Flyout control.

Blazor - New Accordion Control (v22.1)

$
0
0

As you may already know, v22.1 ships with a new Blazor Accordion component. Our Accordion control allows you to organize content within collapsible groups. These collapsible groups can be used to reveal/hide content via a mouse click.

Each Accordion group can include a title, icon, and expand\collapse button. The Accordion can expand one or more groups (at your discretion), position expand\collapse buttons for its groups and subgroups, and use templates to render custom content for both root and nested items.

Manage Navigation within your Blazor App

You can use our Blazor Accordion component to manage navigation paths within your Blazor-powered web app. The Accordion will allow you to introduce a flat or hierarchical navigation structure. To implement this in your app, assign a data source to the Data property, add a DxAccordionDataMapping instance to the DataMappings object (within the component's markup), and map item properties. Activate the ShowFilterPanel option to allow users to filter items:

DevExpressBlazorAccordion_Navigation

<DxAccordion Data=@DemoItems
    ShowFilterPanel="true"
    @ref="Accordion"><DataMappings><DxAccordionDataMapping CssClass="CssClass" Text="ItemName" Key="Id"
          ParentKey="ParentId" NavigateUrl="Url"></DxAccordionDataMapping></DataMappings></DxAccordion>

@code {
      public IEnumerable<DemoItem> DemoItems;
      @* ... *@
}

Create Custom Collapsible Content

You can organize custom content as a set of collapsible groups. Create a single group at the root level to hide specific content within the page or incorporate a set of multiple stacked cards (for instance, you can use stacked cards to create FAQ or registration form sections). The component also allows you to apply templates for content customization.

DevExpressBlazorAccordion_CustomContent

<DxAccordion ExpandMode="AccordionExpandMode.SingleOrNone"><Items><DxAccordionItem Text="What is Blazor?"><ContentTemplate><div class="p-2"><ul><li>Blazor runs C# code directly in the browser.</li><li>Blazor gives you access to .NET on the client side so you can
              re-use libraries and code from the server side.</li><li>Blazor works in all modern browsers and is built on open Web
              standards.</li></ul></div></ContentTemplate></DxAccordionItem>
      @* ... *@</Items></DxAccordion>

Your Feedback Counts

Please take a moment to respond to the following survey question. Your answers will help us understand your needs and refine future Accordion-related development plans.

Blazor TreeView - Node Filtering (v22.1)

$
0
0

Our most recent update ships with a new filter option for the DevExpress Blazor TreeView control. As you would expect, this filter option allows you to locate information displayed in tree nodes with ease.

Integrate Filtering into Your Blazor-powered App

To display our Blazor TreeView's filter panel, you must first set the ShowFilterPanel option. Our Blazor TreeView component will display matching nodes (including parent nodes) when your end user enters filter values. You can use the control's FilterString property to specify filter criteria within code. Use the FilterMode property to control filter options. You can limit the display to matching nodes, nodes with parents, or force the control to display the entire tree branch once a filter has been applied.

<DxTreeView ShowFilterPanel="true" FilterString="York">
  @* ... *@</DxTreeView>

BlazorTreeViewNodeFilterString

Filter operations begin with three input symbols. Use the FilterMinLength property to increase or decrease the required symbols.

Custom Filter

You can integrate custom filter logic to better address your business needs. When creating a custom filter, you'll need to implement a Boolean function that defines whether the search string meets a user's filter criteria. The following example shows how your app can search for values separated by a comma:

<DxTreeView CustomFilter=@CustomFilter>
  @* ... *@</DxTreeView>

static IEnumerable<string> SplitByComma(string value) => value
  .Split(',', StringSplitOptions.TrimEntries |
    StringSplitOptions.RemoveEmptyEntries);
bool CustomFilter(ITreeViewNodeInfo info) {
  return SplitByComma(info.FilterInfo.Value)
    .Any(word => info.Text.Contains(word,
      StringComparison.InvariantCultureIgnoreCase));
}

BlazorTreeViewNodeCustomFilter

Refer to our GitHub repository for complete source code: Blazor TreeView - How to implement custom filter

Your Feedback Matters

Help us improve the capabilities of the DevExpress Blazor TreeView control. Please take a moment to answer the following questions:


Web Forms & MVC Data Grid — Multiple Cell Selection (v22.1)

$
0
0

Our most recent update introduced multi cell selection support to the DevExpress Web Forms and MVC Grid View, Vertical Grid, and Tree List controls. This new feature allows users to select a cell range by hovering the mouse over the control - then copying the range (and pasting it into grid cells, external controls, or Microsoft Excel).

To enable multi cell selection in your DevExpress-powered WebForms or MVC app, set edit mode to Batch and the EnableMultipleCellSelection property to true.

<dx:ASPxGridView ID="Grid" runat="server" DataSourceID="DemoDataSource"  KeyFieldName="ProductID">
    <SettingsEditing Mode="Batch">
        <BatchEditSettings EnableMultipleCellSelection="true" />
    </SettingsEditing>
</dx:ASPxGridView>

Available Interactions

This new feature allows users to select values as they would in Microsoft Excel. Specifically, multi-select allows users to:

  • Select multiple cells via a pointing device or the keyboard.

  • Use our built-in context menu and shortcuts (Ctrl+C, Ctrl+V) to copy/paste cell values.

  • Copy and paste selected cells in the same grid, or in a spreadsheet document.

  • Copy values and paste them in all selected cells.

Cell Selection API

The following API allows you to integrate cell selection within your WebForms and/or MVC app:

  • The SelectCell method selects a cell.
  • The UnselectCell method deselects a cell.
  • The GetSelectedCells method obtains information about the selected cells.
  • The CellSelectionChanging event fires when a user selects or deselects a cell.

To explore this feature in greater detail, navigate to the following online demo: Multiple Cell Selection

Your Feedback Matters

Do you find the multi cell selection features useful in your application and helpful for your end users? Which other customization capabilities for the DevExpress ASP.NET Data Grid do you want to see in the future?

Blazor Grid — Inline Row Editing (v22.1)

$
0
0

As you may already know, the DevExpress Blazor Grid (v22.1) ships with inline row editing support. In this post, I’ll summarize all 3 edit modes and describe how to introduce inline row editing within your Blazor-powered app.

Different Edit Modes

In previous versions of our Blazor Grid, you could select one of the following data edit modes:

  • EditForm— The Grid displays a standard edit form instead for the target row.

    blazor-grid-inline-edit-form
  • PopuEditForm— The Grid displays an edit form within a pop-up window.

    blazor-grid-popup-edit-form

You now have access to one more edit mode option — EditRow. If enabled, once the Edit button is clicked inside a grid row, all row values can be modified dynamically within grid cells. This option allows users to edit data directly within the grid (no need to open an edit form with multiple editors). The benefits of inline data editing include a more compact view. Users can also visually associate edits with specific grid columns.

Interactive Inline Row Editing Demo

Activate the New EditRow Mode

To activate this new mode, set the EditMode property to EditRow. Once set, you will need to specify the edit template used for row cells in one of two ways:

<DxGrid EditMode="GridEditMode.EditRow" ...>
  <DataColumnCellEditTemplate>
    @{
      var employee = (EditableEmployee)context.EditModel;
      switch (context.DataColumn.FieldName) {
        case "FirstName":
          <DxTextBox @bind-Text="@employee.FirstName"></DxTextBox>
          break;
        case "LastName":
          <DxTextBox @bind-Text="@employee.LastName"></DxTextBox>
          break;
        case "Title":
          <DxTextBox @bind-Text="@employee.Title"></DxTextBox>
          break;
        case "HireDate":
          <DxDateEdit @bind-Date="@employee.HireDate"></DxDateEdit>
          break;
      }
    }
  </DataColumnCellEditTemplate>
...
</DxGrid>
  • Use the CellEditTemplate to define an individual edit cell template for a column.
<DxGridDataColumn FieldName="FirstName">
  <CellEditTemplate>
    @{
       var employee = (EditableEmployee)context.EditModel;
     }
     <DxTextBox @bind-Text="@employee.FirstName"></DxTextBox>
  </CellEditTemplate>
</DxGridDataColumn>

Input Validation

Our Blazor Grid's new EditRow mode supports data validation. The Grid's built-in validation engine is based on DataAnnotationValidator. The Grid verifies input data for fields with data annotation attributes. When a user enters invalid data into a cell and navigates away (or attempts to save the edited row), DataAnnotationValidator marks an editor with an invalid value (using a red outline).

If you wish to display additional information about validation errors, you can obtain the validation message from the EditContext property. For example, the code below displays an error icon with a tooltip next to an invalid editor:

...
  <CellEditTemplate>
    @{
      var employee = (EditableEmployee)context.EditModel;
      var message = GetValidationMessage(context.EditContext);
    }
    <div class="d-flex align-items-center">
      <DxTextBox @bind-Text="@employee.FirstName" CssClass="w-100"></DxTextBox>
      @if(!string.IsNullOrWhiteSpace(message)) {
        <div class="grid-validation-message bg-danger" title="@message"></div>
      }
    </div>
  </CellEditTemplate>
...

Reusing Cell Templates

Once you configure data editors for your columns and specified validation error logic, you may wish to reuse your code in other Grids within your Blazor app. Those of you familiar with WPF know that cell templates there can be stored and reused as resources. In Blazor, the best way to reuse the UI is to create components (https://docs.microsoft.com/en-us/dotnet/architecture/blazor-for-web-forms-developers/components).

For Inline Editing, you can create components that implement the following functionality:

  • Define a common UI for the display of validation errors.

  • Create a component used as a cell editor by multiple columns of the same type (e.g., a currency editor).

  • Create a component used as a "fallback cell editor" if no other editor is defined for a column.

We prepared the following GitHub example to demonstrate this approach with Inline editing: Blazor Grid — Inline Editing and Cell Edit Templates.

Your Feedback Counts

Please take a moment to respond to the following survey question.

Blazor Grid — Upcoming Features (v22.2)

$
0
0

In this blog post, I'll summarize new Blazor Grid features we expect to deliver in our next major update (v22.2) this fall. Please feel free to share your feedback via the inline survey questions below.

The information contained within this blog post details our current/projected development plans. Please note that this information is being shared for INFORMATIONAL PURPOSES ONLY and does not represent a binding commitment on the part of Developer Express Inc. This blog post and the features/products listed within it are subject to change. You should not rely or use this information to help make a purchase decision about Developer Express Inc products.

Export to Excel

Data export is a frequently requested Blazor Grid feature. We expect to add data aware export functionality in our next major release (export to XLS, XLSX, and CSV file formats). Exported documents will retain the following grid data shaping features:

  • Data Grouping — allows end users to collapse/expand groups within a worksheet.
  • Data Sorting and Filtering — allows end users to display relevant data in a desired order.
  • Total and Group Summaries — allows end users to modify/change formulas.
blazor-grid-excel-export

You can take a look at our WebForms demo for Excel Data Aware Export to see this feature in action. Our Blazor Grid’s export engine will offer similar capabilities.

Search Panel

The DevExpress Blazor Grid will ship with a new, built-in Search Panel. As you might expect, the Search box will allow users to search against text displayed within any visible grid cell, filter out rows that don't match the search string, and highlight search results.

blazor-grid-search-panel

Our Blazor Grid will ship with an API designed to limit search to specific columns, get/set the current search string, and configure search box visibility.

New Render & Size Mode Support

The DevExpress Blazor Grid will switch from Bootstrap to its own rendering engine. The new rendering engine will help us deliver a consistent appearance across DevExpress Blazor controls.

With this new rendering engine, our Grid will support three different size modes with improved control spacing.

blazor-grid-size-mode

New size modes will apply to all controls that use the new rendering engine (Grid, Editors, Layout components) and allow you to create "dense" interfaces with more relevant information on the screen.

In addition to size modes, we expect to add a frequently requested feature. With our next major release, our Blazor Grid can be set to a fixed height regardless of how many rows displayed within it.

blazor-grid-fixed-height
Important Note. If you develop apps that make use of the four DevExpress themes, you will only see changes in font size and margins/paddings for specific elements. However, if you are working with a Bootstrap-based theme, you should plan an upgrade path in advance. Once the new rendering engine ships, DevExpress controls that support it (Grid, Data Editors) will only take CSS variable values (colors, fonts) from your Bootstrap theme. Other theme settings (paddings & margins, colors defined in widgets, shadows, border thickness, rounded corners, pseudo-classes) will be ignored.

Filter Rows by Display Text

Our Blazor Grid will ship with a setting that enables filtering by display text for specific columns in the filter row. Displayed text can be supplied using the following methods:

Filtering by display text is especially useful for lookup columns that store IDs and retrieve their values from a separate table.

Focused Row

The DevExpress Blazor Grid will highlight the focused (current) row and expose an API to get/set the focused row or its index (it will also get notifications when the focused row changes).

This feature will simplify certain usage scenarios:

  • where external actions need to apply to the current row
  • when an app displays a detail pane next to the Grid)
blazor-grid-focused-row

Select All

At present, the checkbox in the column header only selects rows on the current page, and also ignores rows within collapsed groups. Our next major update will introduce a new selection mode. When used, the column header checkbox will select rows across all pages, in both expanded and collapsed groups, as long as they meet currently applied filter criteria.

Filter Expression API

We will implement an API to get/set the filter expression applied to the Blazor Grid and get notified when this filter expression changes. This will make it easier to implement an external filtering UI tailored to specific usage scenarios.

blazor-grid-filter-api

ASP.NET Web Forms and MVC — New Office 365 Dark Theme (v22.1)

$
0
0

As you may already know, our most recent major update (v22.1) includes a new Office 365 Dark Theme for DevExpress ASP.NET Controls.

aspnet-office365-dark-theme

Many companies like Google, YouTube, Facebook, Twitter, and Reddit have recognized the benefits of dark themes, and have introduced a dark mode feature within their apps. Emma Lunn from Forbes believes that dark themes can:

  • Potentially reduce eye strain and dry eyes in low-light conditions
  • Use less energy so your phone battery will last longer
  • Some experts say dark mode can help people with light sensitivity or visual impairment
  • There will be less 'blue light' emitted from your phone - which can keep you awake if you use your device before you go to bed

How To Use New Theme

At design time, you can set the Theme Name attribute to the theme name in the Web.config file’s themes configuration section:

<devExpress>
     <themes enableThemesAssembly="true" styleSheetTheme="" theme="Office365Dark"/>
     ...
</devExpress>

At runtime, set the ASPxWebControl.GlobalTheme property to the theme name:

protected void Application_PreRequestHandlerExecute(object sender, EventArgs e) {
     DevExpress.Web.ASPxWebControl.GlobalTheme = "Office365Dark";
}

Unlike other themes, Office365Dark can automatically change a page's background color. This theme affects the background color of a web page when you apply the theme to:

  • A specific page (the DevExpress or ASP.NET mechanism).

  • The entire website (the DevExpress or ASP.NET mechanism). Note that the theme does not affect pages without DevExpress controls.

You can define a page's background color for the Office365Dark theme. To do this, use the following example of a CSS selector combination:

.dxTheme-Office365Dark > body {
    background-color: white;
}

Demo

Test out the new Dark theme by visiting any of our ASP.NET Control demos, click the settings icon at the top right, and select the "Office 365 Dark" option:

aspnet-office365-dark-theme-change-theme-demos

Try it now on this demo DevExpress ASP GridView — Large Database (Server Mode).

Your Feedback Matters

We'd love to know what you think of our new Office 365 Dark theme.

Blazor Data Editors — Upcoming Features (v22.2)

$
0
0

In a previous post, I shared new Blazor Grid features we expect to deliver in our v22.2 release cycle. Today, I'll describe our v22.2 plans regarding Blazor Data Editors. Please feel free to share your feedback via the inline survey questions below.

The information contained within this blog post details our current/projected development plans. Please note that this information is being shared for INFORMATIONAL PURPOSES ONLY and does not represent a binding commitment on the part of Developer Express Inc. This blog post and the features/products listed within it are subject to change. You should not rely or use this information to help make a purchase decision about Developer Express Inc products.

New Render & Size Mode Enhancements

DevExpress Grid, Data Editors, Layout, and Navigation components will switch from Bootstrap to our own rendering engine. The new rendering engine will help us deliver:

  • Improved performance with fewer JavaScript interop calls.
  • Consistent appearance across DevExpress Blazor controls.

In addition, we expect to significantly improve our Size Modes. New size modes will apply to all controls that use the new rendering engine (Grid, Data Editors, Layout, and Navigation components) and allow you to create "dense" interfaces with more relevant information on the screen.

blazor-editor-size-mode

Important Note. If you develop apps that make use of the four DevExpress themes, you will only see changes in font size and margins/paddings for specific elements. However, if you are working with a Bootstrap-based theme, you should plan an upgrade path in advance. Once the new rendering engine ships, DevExpress controls that support it (Grid, Data Editors, Layout, and Navigation components) will only take CSS variable values (colors, fonts) from your Bootstrap theme. Other theme settings (paddings & margins, colors defined in widgets, shadows, border thickness, rounded corners, pseudo-classes) will be ignored.

Masked Input Enhancements

We will rewrite our Blazor Mask Engine to avoid JSInterop calls, improve performance & stability, and fix longstanding usability issues.

In addition, DevExpress Blazor Data Editors will support the following mask types:

  • DateTimeOffset
  • TimeSpan

Command Buttons

Our Blazor text editors will ship with an API to specify custom command buttons displayed within the edit box. You will also be able to hide or customize built-in command buttons (such as the one that opens a dropdown).

blazor-editor-custom-buttons

Date Picker — Highlight Special Dates

We will implement an API to highlight specific dates (such as holidays) in the Date Picker's dropdown:

@using Data
<DxDatePicker T="DateTime">
    <DayCellTemplate>
        <a class="@GetCssClassNames(context)">@context.Day.ToString()</a>
    </DayCellTemplate>
</DxDatePicker>
@code {
    CalendarData data = new CalendarData();
    string GetCssClassNames(DateTime date) {
        return data.Holidays.Exists(d => date.Date == d.Date) ? "text-danger" : string.Empty;
    }
}
blazor-date-picker-special-dates

ComboBox & TagBox — Highlight First Match

DevExpress Blazor ComboBox and TagBox components will automatically highlight the first match after filtering. Once implemented/enabled, end-users can select values faster by typing a keyword and pressing Enter.

Viewing all 372 articles
Browse latest View live


Latest Images