Thinking Out Loud
  • Using Azure to Store and Load DevExpress Reports Across All Supported Platforms

    In this blog post we'll describe how you can store DevExpress Reports on Azure. As you'll soon discover, you can use this approach to create a shared report repository and make it available via simple Open/Save report commands. 

    If you are currently using DevExpress Reports for .NET, you already know that we offer Report Viewers and Designers for ASP.NET, WinForms and WPF. The benefit of the implementation described herein is that regardless of target platform (Desktop or Web clients), end-users will have access to all the reports you store on Azure.

    Those of you with no interest in storing reports on Azure might still find this example quite useful - as it's an excellent way to store your Report Gallery (predefined elements/reports) and share it with users.

    Report Storage on Azure

    Regardless of the usage scenario, our implementation is straightforward and based on the following:

    • The API used to manage Azure storage provided by the "WindowsAzure.Storage" NuGet package.
    • The storage extension engine in our Reporting platform.

    I'll explain the basics in this article, but if you’re ready to get started and want to skip the explanation, download the sample published in our Knowledge Base.

    Setting Up Azure Access

    If you don't already have an Azure account, you'll want to get one setup using the following link:  

    https://docs.microsoft.com/en-us/azure/storage/storage-create-storage-account

    Once you've obtained login credentials, we recommend that you add them to app.config, as shown below. You’ll then transmit the connection string to method calls that register your custom extensions.

    <appSettings>
      <add key="StorageConnectionString" 
     value="DefaultEndpointsProtocol=https;AccountName=ACCOUNT;AccountKey=KEY" />
    </appSettings>
    

    Create a Shared Azure Storage for Reports

    Let’s start with the extension that creates a common Azure storage for reports accessed through Open/Save UI commands. First, you'll need to create a ReportStorageWebExtension descendant and implement methods that cover basic actions such as display the report list, obtain a specific report, save a report to storage. Here’s your class stub with comments.

     
    public class MyReportStorageWebExtension : 
          DevExpress.XtraReports.Web.Extensions.ReportStorageWebExtension { 
        // use Microsoft Azure API 
      readonly Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer container; 
      public MyReportStorageWebExtension(string storageAccountConnectionString) { 
          // initialize your storage using the connection string 
      } 
     
      public override Dictionary GetUrls() { 
          // retrieve report collection 
      } 
      
      public override byte[] GetData(string url) { 
          // obtain a report identified by its URL 
      } 
      
      public override bool CanSetData(string url) { 
          // can a report be updated? 
      } 
      
      public override void SetData(XtraReport report, string url) { 
          // update the report 
      } 
      
      public override string SetNewData(XtraReport report, string defaultUrl) { 
          // save a new report 
      } 
    } 
    

    You'll then register this newly created extension so that it takes effect. In our ASP.NET sample, you see a call to a static method in the Application_Start() method in Global.asax.cs. In WinForms, put it inside the Main() method.

    ReportStorageWebExtension.RegisterExtensionGlobal(
       new MyReportStorageWebExtension(
          ConfigurationManager.AppSettings["StorageConnectionString"]
       )
    ); 
    

    Create a Shared Azure Storage for the Report Gallery

    The report Gallery is one of the Tool Windows you’ll find in the End-User Report Designer. It lists report templates, re-usable blocks with a few controls grouped together, or commonly used styles you can apply to elements.

    If you want all these to be stored in the same centralized Azure storage, the procedure is mostly the same. This time, you need a ReportGalleryExtension class descendant.

    class CloudReportGalleryExtension :
           ReportGalleryExtension { 
        // use Microsoft Azure API 
        readonly Microsoft.WindowsAzure.Storage.Blob.CloudBlobContainer container; 
        public CloudReportGalleryExtension(string connectionString){ 
            // initialize storage container 
        } 
        public override void SaveGallery(Gallery gallery) { 
            // save gallery 
        } 
      
        public override bool TryLoadGallery(out Gallery gallery) { 
            // check if a gallery can be loaded 
        } 
      
        CloudBlockBlob LoadBlob() { 
            // load gallery contents 
        } 
    } 
    

    Use the following to register the class in the system:

    ReportGalleryExtension.RegisterExtensionGlobal(
       ConfigurationManager.AppSettings["StorageConnectionString"]
    ); 
    

    Try Our Sample

    As mentioned, we've published a complete sample demonstrating implementation details. The downloadable solution contains both an ASP.NET and WinForms application. If you have your Azure Storage account set up, update the connection string settings in the project and run it to see how it works.

    Please remember, while we chose to showcase Azure storage in this sample, our extension model allows you to implement any kind of cloud or non-cloud storage provided that you have the necessary API.

  • Pricing Changes to the DevExpress WinForms Subscription

    A moment ago, I posted a message regarding changes to our ASP.NET Subscription. If you're using our WinForms product line, you can expect a similar change once we release v17.1.

    Before I summarize changes to pricing, I want to state that these changes will not affect active WinForms subscribers. If you own an active WinForms Subscription, you will have the right to renew it upon expiration at $399.99.

    With that said, we do expect to increase pricing for our WinForms Subscription once we launch v17.1. Pricing for new licenses will be as follows:

    1st Year Subscription Cost: $999.99
    Renewal Subscription Cost: $449.99

    Again, if you own an active WinForms Subscription, this price increase will not impact you. As a courtesy, should your organization require additional WinForms licenses between now and May 31, 2017, you can purchase licenses at our old price point of $899.99.

    Upgrade Your Subscription to DevExpress Universal

    Just like our ASP.NET Subscribers, we're doing our best to make it easy for you and your team to upgrade your existing WinForms Subscription to DevExpress Universal...

    If you’ve considered upgrading your WinForms Subscription to DevExpress Universal in the past, but have hesitated due to pricing concerns, I have some good news for you. Based on your organization’s purchase and licensing history, I've instructed our Client Services Team to offer preferential pricing to those wishing to acquire our Universal Subscription by May 31, 2017. If this option is of interest, please do contact us so we can put together the best possible offer for your company. 

    We are here and ready to help - please contact us with any questions. DevExpress Client Services can be reached via email at clientservices@devexpress.com or by phone at +1 (818) 844 3383.

  • Upcoming Changes to the DevExpress ASP.NET Subscription

    We are days away from the official release of v17.1. As part of this update, we've made a series of changes to our product SKUs...one involves our Universal Subscription and the following describes changes we'll make to our ASP.NET Subscription.

    Before I start, let me emphatically state the following: If you are an active ASP.NET Subscriber, you will not experience a price increase. Your renewal costs will remain the same. If you are happy with our ASP.NET Subscription, you can continue to renew it at the price point you've come to expect from DevExpress - $399.99.

    You may be asking yourself what will change if renewal pricing will not....Well, here is a summary of what you can expect once we ship v17.1.

    New ASP.NET Bootstrap Controls and MVC Wrappers

    If you own an active ASP.NET Subscription at the time of official launch (v17.1), you’ll automatically receive our new ASP.NET Bootstrap Controls and HTML5 MVC Wrappers (wrappers around our DevExtreme UI widgets), free of charge. Whether you choose to use these new product lines is entirely up to you of course...but as long as you maintain/renew your ASP.NET subscription, we'll make them available to you. And once again, ASP.NET Subscription renewal costs will remain the same for existing (active) subscribers. 

    The New DevExpress ASP.NET Subscription will include DevExtreme

    For those of you considering a move to client-side web development, you’ll be happy to know that with v17.1, we’ll update our ASP.NET Subscription’s product mix to include DevExtreme – our HTML5-JavaScript UI widget library.

    Since this is a new addition to the subscription and since it adds substantial value to the product, we’ll increase the price of our "new" ASP.NET Subscription to $999.99. Needless to say, existing customers will not be left out in the cold... 
    If you’d like to get your hands on DevExtreme (HTML5-JavaScript widgets), you can upgrade your existing ASP.NET Subscription to our "new" ASP.NET Subscription for only $100.00.  When you upgrade, your subscription’s renewal date will not be modified but the renewal price will be increased from $399.99 to $449.99.

    This last point is important - the $100 upgrade will give you immediate access to DevExtreme. If you renewal date is X, it will remain X and once your subscription expires, you will be prompted to renew at the new price point of $449.99 (as all of you know, renewals are entirely voluntary and do not affect product use rights to tools you've licensed in the past). 

    Upgrade Your Subscription to DevExpress Universal

    If you’ve considered upgrading your ASP.NET Subscription to DevExpress Universal in the past, but have hesitated due to pricing concerns, I have some good news for you. Based on your organization’s purchase and licensing history, I've instructed our Client Services Team to offer preferential pricing to those wishing to acquire our Universal Subscription by May 31, 2017. If this option is of interest, please do contact us so we can put together the best possible offer for your company. 

    We are here and ready to help - please do call us should you have any questions about our ASP.NET Subscription in the post v17.1 world. DevExpress Client Services can be reached via email at clientservices@devexpress.com or by phone at +1 (818) 844 3383.




  • WinForms and WPF Diagram Control - Pan Tool and More (Coming soon in v17.1)

    Our upcoming release will include two new features for both our WinForms and WPF Diagram Controls.

    Pan Tool

    As you can see in the animation below, the Diagram's new Pan Tool allows you and your end-users to move or "pan" a diagram in any direction.

    Display or Hide Subordinate Shapes

    Whether constructing workflows, organization charts or anything in between, this new feature should help improve app usability and overall presentation/organization of complex diagrams.

    This short animation helps demonstrate some of the options available to you, including the ability to control the collapse button's alignment and its position.

  • ASP.NET Spreadsheet - Cell Comments, Max Row and Column Count and More (Coming soon in v17.1)

    We've got a few exciting new features to announce in the upcoming release of our ASP.NET and MVC Spreadsheet - these include support for cell comments, max row/max column count and the ability to customize the Spreadsheet's context menu.

    Worksheet Comments - Annotations

    As you would expect, this new feature allows you and your users to annotate ASP.NET and MVC Worksheets. Comments are displayed within a floating box that is anchored to a cell. You can add new comments, edit, hide or delete existing comments, move and resize the comment box as necessary.

    ASP.NET & MVC Spreadsheet - Worksheet Comments

    New comments can be inserted or existing comments modified via the following methods:
    • Ribbon UI - by using the commands located within the Comments group of the Review tab.
    • Context (Popup) Menu
    Additionally, users can resize a comment box or move it to a new location by using the comment's sizing handles. 

    Max Row - Max Column Count

    With this release, you can specify the maximum number of rows and columns displayed within our ASP.NET & MVC Spreadsheet Control.

    ASP.NET MVC Spreadsheet Max Row/Max Column Count

    To control row/column visibility, simply use our new WorksheetDisplayArea.SetSize method.

    Context (Popup) Menu Customization

    With this release, you can handle a new client-side event and customize our ASP.NET Spreadsheet's context menu (insert new menu items, remove or disable existing items). Event parameters allow you to identify the worksheet element (a cell, row or column header, chart or picture) for which the context menu is invoked and prevent the menu from being displayed.

    Should you have any questions on any of these features, please comment below - we'll be happy to follow up.

     
  • ASP.NET Rich Text Editor - Floating Objects (Coming soon in v17.1)

    The upcoming release of our ASP.NET Rich Text Editor will include support for Floating Objects. With this feature, your end-users can insert pictures and text boxes within their documents with ease.


    ASP.NET Rich Text Editor - Word Processing Floating Objects

    As you might expect, our ASP.NET WebForms and ASP.NET MVC Rich Text Editor allows end-users to freely position, scale and rotate floating objects. Whether used for images or as a text box, users can modify the object's characteristics via an integrated context (popup) menu or a Ribbon context tab. A built-in Floating Object dialog window is also available for customization.
     
    ASP.NET Rich Text Editor - Floating Object Layout
    And yes, our ASP.NET Rich Text Editor ships with a comprehensive client API so you can manage floating objects programmatically.

    We'd love to hear your thoughts on this new feature and learn more about how you're using our Rich Text Editor within your ASP.NET or MVC web app.

  • WinForms TreeList - Improved Performance and API (Coming soon in v17.1)

    I wanted to share some of the performance and API improvements we've made to the DevExpress WinForms TreeList Control in our v17.1 development cycle. If you're not familiar with this product, you can think of it as a treeview and listview hybrid...The component is designed to display self-referenced hierarchies and render it as a traditional tree or a grid.

    Before I begin, let me offer the following...If you're evaluating this product and would like to test it against competing products, we'd be more than happy to provide the sample project used to generate these test results. I think you'll be pleasantly surprised as to how fast our WinForms TreeList executes the functions listed below.

    Though we are not finished with all the optimizations we hope to introduce this year, I want to assure you that our goal is to improve the TreeList to such a degree that it's on par with our WinForms Grid from a performance perspective.

    Performance

    The following table describes the performance improvements shipping inside v17.1.

    Time (ms) DevExpress TreeList v16.2 DevExpress TreeList v17.1 DevExpress WinForms Grid
    Sorting by one or more columns
    Flat list 116 47 14
    Self-referenced hierarchy 58 30 n/a
    Filtering by simple or complex criteria
    Flat list 46 31 12
    Self-referenced hierarchy 52 36 n/a
    Searching (against a single column/against all columns)
    Flat list 116/444 98/321 92/173
    Self-referenced hierarchy 119/457 100/332 n/a
    Loading from data source (10k/100k records)
    Flat list 36/650 34/466 5/10
    Bound hierarchy 81/2005 79/1703 n/a
    Unbound hierarchy 854/minutes 103/4182 n/a

    API

    In this release, we've updated the Tree List's API so that it is more consistent and in-line with our WinForms Grid. These changes address common data operations such as obtaining and setting cell values, selection, sorting and filtering, formatting and hit testing. Our new API also includes a number of tree-specific features including a LINQ-friendly node iterator:

    treeList.NodesIterator.Do(node =>
    {
        if((State)node["State"] == State.Inactive))
            node.Expanded = false;
    });
    int count = treeList1.NodesIterator.Visible
       .Where(node => (decimal)node["Discount"] > 0).Count();
    

    By extending the Tree List's API, we've been able to improve the product's core functionality and expect to evolve it further in coming release cycles. For instance, the filter related API changes introduced in v17.1 allowed us to incorporate Excel-inspired Filtering and the Auto-Filter Row....and helped improve core capabilities such as the availability of predefined filters when using Excel-inspired filter dropdowns.

    WinForms TreeList Filtering

    As always, we welcome your comments and feedback. Tell us how you're currently using our WinForms TreeList Control.

  • WPF Data Grid - Merged Grouped Columns and Extended Live Update Support (Coming soon in v17.1)

    I recently published a brief description of merged column support for our WinForms Grid. Many of you have asked about its availability in our WPF Data Grid. The good news (as you've probably surmised by the title of this blog post) is that the DevExpress WPF Grid v17.1 will ship with merged grouped column support. To best illustrate the possible usage scenarios for this new feature, take a moment to review the following animation.

    As you can see, merged groups allow you to present information in a more compact and in many instances, a more relevant manner. Users can efficiently explore trends within their data without the need to scroll long hierarchies.

    In addition to merged grouped columns, v17.1 will improve the manner in which record state is rendered when displaying "live data." With a new Conditional Formatting trigger condition and animation effects that execute whenever a cell's value changes, we believe those of you who must display real-time information to end-users will find this new feature of particular value.

    Finally, we've added a number of minor features based on great feedback from our loyal users. These include:

    • Support for multi-cell selection in master-detail mode.
    • Availability of a SortFieldName property for individuals columns, allowing you to specify a different field for sort operations.
    • Ability to save/restore a layout with autogenerated bands.
    • Ability to load a Grid without a focused row.
    • Simplified method to display custom Grid Cell Tooltips.

    We are here to helps, so should you have any questions on any of these new features, feel free to reach out to us.



  • DevExpress Report Server with Full Dashboard Support (Coming soon in v17.1)

    Last week, I described the changes we've made to our Report Server platform - specifically, the ability to create and distribute dashboards (in addition to standard reports). If you've not reviewed that post, you can do so here.

    Before I describe this new capability further, let me restate an important point so as not to confuse anyone - if you are looking to incorporate client-side Reporting and/or Dashboards (be it desktop or web-based) and wish to distribute your solutions royalty-free, this post will not apply to you. If, however, you are seeking a report distribution platform for your enterprise, then DevExpress Report Server is definitely a product you should consider.

    At present, DevExpress Report Server is bundled within our Universal Subscription and is available for purchase on a standalone basis. The product uses a Client Access License (CAL) model. If you own an active Universal Subscription, you are granted 5 CALs and you can purchase additional CALs as necessary. As I mentioned in my previous post, once we release v17.1, we'll be removing DevExpress Report Server from our Universal SKU. When we do, it will be available for purchase only on a standalone basis. And yes, if you already own an active Universal Subscription at the time of v17.1 launch, you will retain your licensing rights to DevExpress Report Server. 

    Those of you who do not own the Universal Subscription and are interested in locking in access to Report Server should contact our Client Services Team (clientservices@devexpress.com) in the next couple of weeks. We'll be more than happy to arrange an upgrade path from your current subscription to DevExpress Universal at the lowest possible cost. 

    DevExpress Report Server with Dashboard Support

    In contrast to static reports, Dashboards give you the power to create dynamic decision support systems. With Dashboards, you can deliver customizable solutions designed to communicate metrics and identify trends within any organization. Though Dashboards will never replace a traditional printed report, they can give users a new way to appreciate strengths or weaknesses and anticipate opportunities or threats within their business.

    DevExpress Report Server with Dashboard Support

    All the capabilities you've come to expect from our Report Server were extended to support DevExpress Dashboard. From editing and viewing a Dashboard, to scheduling and versioning, dashboard generation and its subsequent distribution is managed in the same exact way as its static report counterpart.

    You may be asking yourself how is a Dashboard generated from within Report Server different than Dashboards integrated within a traditional desktop or web-based app. The simple answer is that there is no difference...you can create Report Server based Dashboards with the same Visualization elements you've come to expect from its client-side equivalent. These include:

    • Grids
    • Pivot Tables
    • Charts 
    • Maps
    • TreeMaps
    • Gauges
    • Cards
    • Data-bound Text and Image Fields

    You also have access to the same interactive features -- including master filtering with a variety of supported filter elements (from combo box to visual range selector) and drill down functionality for elements such as the Grid, Charts, Pivot Grid and Maps. And finally, a broad range of analytical tools to maximize readability and data relevance (Conditional Formatting, Coloring, etc).

    These similarities notwithstanding, Report Server is different than a custom built client-side solution in that the work to  simplify the management and distribution of static reports/dashboards has already been completed for you. If your organization is swimming in reports and wants to streamline, control, and maintain them more efficiently, the Report Server is a legitimate option vs a custom, in-house solution.

    DevExpress Report Server with Dashboard Support

    We'll discuss Report Server in more detail in our Launch Webinar on May 19th. If this product is of interest, be sure to register your spot today. Until then, feel free to share your thoughts below...

    On a quick side note for those already using DevExpress Report Server .... Among the new features we'll also ship in v17.1 is the ability to filter Report Server data using account-related information (User Name, User Groups, Domain Name, etc.). As you'd expect, this new feature allows you to restrict the data displayed within a report or dashboard for specific users or groups.

    DevExpress Report Server with Dashboard Support

  • Tips & Tricks - WinForms Data Grid Custom Footer Checkbox

    Came across a great question/request on the DevExpress Support Forum and wanted to share it with those of you using our WinForms Data Grid.


    To summarize, Jude wanted to position a checkbox with the Grid's footer. Though I've never personally considered using the footer for record select operations, it's definitely an option.... 
    As you'll discover when reading the support ticket, this capability is not available out-of-the-box BUT it's easy to implement with just a bit of custom draw.

    New Feature?

    My question to  all of you is whether we should incorporate this capability within the grid - do you see yourself using the footer in this manner or do you feel the footer should remain dedicated to summary computations.   
1
2 3 4 5 6 7 8 9 10
LIVE CHAT

Chat is one of the many ways you can contact members of the DevExpress Team.
We are available Monday-Friday between 7:30am and 4:30pm Pacific Time.

If you need additional product information, write to us at info@devexpress.com or call us at +1 (818) 844-3383

FOLLOW US

DevExpress engineers feature-complete Presentation Controls, IDE Productivity Tools, Business Application Frameworks, and Reporting Systems for Visual Studio, along with high-performance HTML JS Mobile Frameworks for developers targeting iOS, Android and Windows Phone. Whether using WPF, ASP.NET, WinForms, HTML5 or Windows 10, DevExpress tools help you build and deliver your best in the shortest time possible.

Copyright © 1998-2017 Developer Express Inc.
All trademarks or registered trademarks are property of their respective owners