This Blog


Favorite Posts


May 2007 - Posts

  • Looking into the crystal ball: Breaking changes for v2007.2

    The various development teams have now provided all of the breaking changes you can expect for DXperience v2007 vol. 2. (And yes, a corollary of this means we're getting reasonably close to beta test and thence to release.)

    Although there are a lot of breaking changes, they have been necessary in order to make the controls much easier to use or to effect some architectural changes to help prepare us for some new functionality later on in the year (of course, some of that functionality will be part of 2007.2, but I'll leave the new features for another post). I'm sure you'll agree that some of the changes promised here are for the better.

    Without further ado...

    ASP.NET Controls - CSS Support Changes

    In previous versions of our ASP.NET controls, we used inline styles as a primary way to customize their visual appearance. This meant that default appearances and Auto-Formats were applied using properties on each control, which were then converted into inline styles. The main benefit of this approach was the simplicity of customizing appearances. You didn't have to care about styles for each element in each state. If a border was shown around an element in hot-tracked state then this element's padding was automatically reduced by the border width when needed.

    Put simply, this customization simplicity had bad conflicts with CSS styles. If styles are set via CSS, it's nearly impossible to determine which settings are applied, hence an automatic style adjustment cannot be made. Previously, we chose simplicity over complete CSS support and that's why some appearance settings could be specified only via control properties.

    With the release of version 2007.2, we have decided to change how our ASP.NET controls work in favor of complete CSS support. This means that you will be able to customize every style aspect using cascading stylesheets. If you do so, you are completely responsible for providing all settings for all element states because we disable automatic adjustments if either border size or padding isn't specified explicitly. But note that automatic adjustments will still work if you set styles via control properties.

    So if you upgrade your existing applications to DXperience v2007 vol. 2, you can expect control behavior changes under certain conditions. Since we have changed the default appearances to cascading style-sheets, this may lead to disabling automatic style adjustments. In these instances, you will need to manually update styles to provide the proper sizes, paddings and border styles to elements.


    XtraEditors Library - New List Box Controls

    In version 2007.2, we have completely re-designed the following controls from the XtraEditors Library: ListBoxControl, ImageListBoxControl and CheckListBoxControl. All these controls had the same base engine which, to put it mildly, had become quite hard to support. Some deep-down architectural problems made it hard to fix issues and implement new functionality. There was no way to overcome these problems, apart from rewriting the controls.

    Though the public interfaces have remained unchanged, a lot of changes have been made to internal functions. If you rely on these functions, you will most likely need to update your code to avoid errors and unexpected behavior.


    XtraBars Suite - Tab Access in RibbonControl

    Previously, you could access all ribbon tabs via the RibbonControl.Pages property. This has changed with the introduction of context-sensitive tabs.

    Pages will not belong to the RibbonControl anymore. Instead, we've introduced some intermediate objects called categories. A Ribbon will always have at least one default category. This category will contain pages whose visiblity doesn't depend on the current context. To display context-sensitive tabs, you will need to create additional categories.

    Now here's what may change. If you previously wanted to do something with all pages in a Ribbon, you would use the RibbonControl.Pages property to access them. In 2007.2 this property will now return only pages from the default category, that is, all pages that are not sensitive to context. In turn this means that if you don't use context-sensitive tabs, your code will still work. Otherwise, you must take into account that the Pages property won't return all the pages anymore. If you need to traverse through each and every page within a RibbonControl, you will need to traverse all categories in it.


    XtraCharts Suite

    • The PaletteName property of the ChartControl, WebChartControl and XRChart classes doesn't accept empty strings anymore. If an empty string is assigned to this property, an exception is raised. This means that an empty string value is now treated in the same manner as an incorrect palette name.
    • The previous point also applies to the AppearanceName property.
    • The SeriesLabel class is now inherited from the SeriesLabelBase class. Two base classes - SimpleSeriesLabel and ConnectorSeriesLabel - have been united into a single SeriesLabelBase class.
    • If a series is bound to data and its datasource is populated, series points will be available via the Points property. Previously, the Points collection would be empty if an external data source is used.
    • The same applies to series created automatically when using the SeriesTemplate property. If the bound data source has been populated these series will be available via the Series property.
    • Runtime hot-tracking and selection behavior for automatically created series has been changed. Now it's possible to select a single series, while in previous versions all auto-created series were selected together.

    XtraPrinting Library and XtraReports Suite

    In v2007.2 we've greatly redesigned the XtraReports core, and some of these major changes may break your code.

    For example, we've unified an internal "brick" representation of XtraPrinting and XtraReports. Now all report controls (all XRControl class descendants) render themselves using native XtraPrinting bricks, while in previous versions every report control rendered itself using control-specific bricks.

    Also, we've radically changed our Page Builder, and this also may cause some of your code to function differently from previous versions.

    These changes allow us to achieve many important goals, including the following:
    • Documents created with XtraReports now can be scaled within the Print Control, just like other XtraPrinting documents.
    • XtraPrinting and XtraReports documents are exported using the same unified and more reliable procedure.
    • Pages of several XtraReports and XtraPrinting documents can now be merged into a single document. You can print such combined documents, show them within a Print Control, or even export to any supported format.
    • It's now easier to create a custom report control. You don't need to override numerous protected methods so that your custom control can be exported to various formats. Now you need to override only two basic methods to create a correct representation of your custom control using XtraPrinting bricks - and this control will be successfully exported to all available formats. See the XtraReports documentation for more information on creating custom report controls.
    • It's now possible to search text in the PrintControl which displays an XtraPrinting library document. In previous versions it was possible with XtraReports documents only.
    • HTML export has been significantly improved. Less code is now generated, the HTML page looks more like the original printed page and memory consumption has been reduced.
    • In the future, we're planning to implement the possibility to save Print Preview to a document, and also to edit a report directly in Print Preview. All this can be implemented much more easily now we've unified XtraPrinting and XtraReports brick technologies.
    Following are the list of breaking changes we had to make to achieve the above goals. Some changes are really minor and to be honest we are not really sure that anyone used our controls in such a way that would lead their code to break because of these changes. Some changes might be very painful (for example, a new way to create custom report controls) - but unfortunately we can't move forward without these changes.

    XtraPrinting Library

    • If the ImageBrick.SizeMode property is set to AutoSize, the effect is the same as setting it to Normal.
    • When an ImageBrick is exported to HTML, an empty space between picture and border is not included into the resulting document.
    • The borders and background of a LineBrick are now visible.
    • The CustomBrick.ShowFromNewPage method has been removed. Use the Document.ShowFromNewPage(Brick brick) method instead.
    • The BookmarkNode.Nodes property's type has been changed to IBookmarkNodeCollection.
    • The date-time format for PageInfoBrick should now be set to "{0:d}" instead of "d" (like with the XRPageInfo control in XtraReports).
    • The ViewData class was removed. This control's members could be mainly used when creating custom report controls. Now there's a completely new much easier procedure that doesn't require you to use this class.
    XtraReports Suite
    • The custom control creation procedure has been significanlty simplified. At the same time, custom controls created with previous DXperience versions will not compile and work. Unfortunately, you will need to re-write all custom controls. Note that this will become much easier.
    • The ControlViewData class isn't inherited from ViewData anymore.
    • Classes responsible for managing shapes and bar codes have been moved from the XtraReports Suite to the XtraPrinting Library. At the same time, non-abstract Shape and BarCodeGenerator classes are still available in XtraReports, but marked as obsolete. This means that old code will still work but to avoid compilation warnings, simply re-serialize your reports.
    • BarCodeGenerator classes don't support the IXRSerializable interface (except for obsolete classes in XtraReports).
    • XRBarCodeGeneratorBase, XRUPCEGeneratorBase, XRUPCSupplementalNGeneratorBase are moved to DevExpress.XtraPrinting.BarCode namespace and renamed to BarCodeGeneratorBase, UPCEGeneratorBase, UPCSupplementalNGeneratorBase.
    • All classes that implement searching in the Print Control have been moved from XtraReports to XtraPrinting, and are now located in the XtraPrinting.Native.Navigation namespace.
    • XRPictureBox now doesn't clone its image when a report needs to render boxes with the same images in them. If the image is disposed, an exception is raised.
    • XRPageInfo control now draws its Format property value if its PageInfo property is set to None (like with PageInfoBrick in the XtraPrinting Library).
    • The HtmlItemCreated event now fires for each empty area inside an XRPanel.

  • Better late than never: CodeRush and Refactor! Pro 2.2.2 Revealed

    There was a knock on the door late at night a week or so ago, but when I opened it I saw nothing but flurries of snow whisking into the porch light and away into the darkness and an envelope propped up against the door jamb. No one was around. I ripped open the envelope and there it was: the new features in CodeRush and Refactor! Pro. No longer were they a Stealth Release, the envelope was proof I could talk about them. And then I went to Montréal and forgot all about it...

    Until Mark and Dustin sent the boys round and they wouldn't leave until this got posted. Sorry guys.



    So with no further ado, let's start with DXCore:

    • Support for Visual Studio Orcas beta 1 has been added. This support is considered experimental until Orcas is formally released and of course we'll be providing updates in step with further Orcas beta releases. Note though we are aware that the plug-in wizards are broken in Orcas and we are working on fixing this issue.
    • The performance of the C# parser has been improved by approximately 30% and it now has support for C# 3.0. We'll see how this affects Refactor! Pro in particular in a moment.
    • The About Box dialog has changed slightly: we've added buttons to open the plug-in and user settings directories on the current machine. If one of these buttons is clicked while the Shift key is held down, the About Box dialog will be automatically closed.
    • A few changes to the Linked Identifiers support: Visual Studio Intellisense can now be used within linked identifiers; we've corrected the painting of linked identifiers when word wrapping is enabled; and we've corrected the painting of text fields when word wrapping is enabled.
    • For those people keen on writing DXCore plug-ins, there are two new contexts, Project\IsWPF and File\IsWPF, and there's a new CodeRush.Synchronization service for synchronizing code on Visual Studio's UI thread.



    Moving on to CodeRush itself now:

    • We've added Camel Case Filtering. This is Mark's, er, "celebrated" Camel Humping support, that is, we added a new filter to QuickNav and Recent Files dialogs that matches against uppercase letters in identifiers.
    • The 'f' templates for declaring a field have been deprecated due to conflicts with the for-loop templates. You should use the 'v' templates to declare fields.
    • After some discussions on the forums and internally, we did a lot of work in improving the context-checking for many single-letter templates to ensure that they don't expand unexpectedly.
    • Most graphics templates are now WPF-aware.
    • There's a new template set for declaring constants using the 'q' mnemonic (for example 'qi' declares an Int32 constant).
    • There's a new template set for declaring readonly fields using the 'o' mnemonic (for example 'oi' declares an Int32 readonly int field).
    • There are new WPF templates for dependency properties, attached properties, routed commands and routed events. For more information on these, see the Graphics\WPF folder in the Editor\Templates options page. Slowly but surely our WPF work leaks out...
    • To support our eXpress Persistent Objects product (XPO), there are some new templates and type mnemonics specifically for XPO.

    Refactor! Pro

    And now let's see what's happened to Refactor! Pro and our aim to hit 100, er, sorry, 125 refactorings by the end of the year. First of all, we'll look at the fully supported features, and then the Early Experience ones.

    • Change Tag: changes a <sometag></sometag> pair in an aspx file to a user-specified tag. This is most useful I find for changing a div to a span or vice versa, or maybe an em to/from a strong.
    • Collapse Getter: collapses simple getter code onto a single line. By "simple" here we mean that the getter code consists of a single line return statement, such as returning the value of the backing store. The final outcome is a single line like this:
        get { return fooField; }
    • Collapse Setter: collapses simple setter code onto a single line. By "simple" here we mean that the setter code consists of a single line, such as setting the value of the backing store. The final outcome is a single line like this:
        set { fooField = value; }
    • Compress to Null Coalescing Operation: converts a ternary expression to an equivalent null coalescing operation. (C# 2.0+ only)
    In other words, something like this:
        int? someValue = null;
        int realValue = someValue.HasValue ? someValue.Value : -1;
        string someText;
        // code setting someText, or not
        MessageBox(someText != null ? someText : "<NULL>");

    is refactored in two steps to this:  
        int? someValue = null;
        int realValue = someValue ?? -1;
        string someText;
        // code setting someText, or not
        MessageBox(someText ?? "<NULL>");

    • Convert to HEX: converts a color to the equivalent hexadecimal representation. (ASP.NET only)
    • Convert to Named Color: converts a color to the equivalent named color representation. (ASP.NET only)
    • Convert to RGB: converts a color to the equivalent RGB representation. (ASP.NET only)
    • Decompose Parameter: replaces a single parameter with one or more new parameters, each standing in for a property access on the original parameter. This can help a method have a wider audience in that the original parameter no longer has to be constructed in order to call the method.
    • Expand Getter: expands single-line getter code onto multiple lines. The reverse of Collapse Getter.
    • Expand Null Coalescing Operation: converts a null coalescing operation to an equivalent ternary expression. (C# 2.0+ only) The reverse of Compress to Null Coalescing Operation.
    • Expand Setter: expands single-line setter code onto multiple lines. The reverse of Collapse Setter.
    • Extract to UserControl: creates a UserControl for the selected block including content and dependent code. (ASP.NET only)
    • Collapse Getter: collapses simple getter code onto a single line. By "simple" here we mean that the getter code consists of a single line return statement, such as returning the value of the backing store. The final outcome is a single line like this:

         get { return fooField; }

    • Introduce ForEach Action: replaces the contents of the List-iterating loop with an anonymous method, which is passed as the Action delegate to the List<T>.ForEach method. (C# 2.0+ only) This can seem a little bizarre at first. In essence it changes code like this:

          private static void GetCountStringsWithZ(string[] text) {
             char[] Zeds = new char[] {'z', 'Z'};
             int zCount = 0;
             foreach (string s in text) {
                if (s.IndexOfAny(Zeds) < 0)
             return zCount;

    into this:
          private static void GetCountStringsWithZ(string[] text) {
             char[] Zeds = new char[] {'z', 'Z'};
             int zCount = 0;
             Array.ForEach(text, delegate(string s) {
                if (s.IndexOfAny(Zeds) < 0)
             return zCount;
    which seems a little weird (unless you prefer this declarative form) until you see the Compress to Lambda Expression refactoring.
    • Introduce Setter Guard Clause: introduces a value changed check at the start of a property setter, exiting early if the value matches the backing store. In other words produces this kind of code:
       private string text;
       public string Text {
          get {...}
          set {
             if (value == text)
             text = value;
    • Line-up Arguments: moves arguments of a method call that are broken onto multiple lines up so they all exist on the same line.
    • Line-up Parameters: moves parameter declarations that are broken onto multiple lines up so they all exist on the same line.
    • Remove Private Setter: removes a private property setter that simply assigns a value to a field without any side-effects.
    • Remove Setter Guard Clause: removes the value changed check at the start of a property setter. The reverse of Introduce Setter Guard Clause.
    • Remove Tag: removes a tag pair while preserving the inner content. (ASP.NET only)

    And now the Early Experience refactorings. These can be enabled through the "Editor\Refactoring\Early Experience" options page.

    • Compress to Lambda Expression: converts an anonymous method to an equivalent lambda expression. (C# 3.0 only) Taking the above example for Introduce ForEach Action to the next step, we'll get:
          private static void GetCountStringsWithZ(string[] text) {
             char[] Zeds = new char[] {'z', 'Z'};
             int zCount = 0;
                s => if (s.IndexOfAny(Zeds) < 0) zCount++
             return zCount;

    • Convert to Auto-Implemented Property: removes the backing store and converts a property to an auto-implemented property. (C# 3.0 only) For those who haven't come across these before, auto-implemented properties are a bit of sugar candy from C# 3.0. The C# team noticed that declaring properties was too long-winded, even with a cool tool like CodeRush, so they added auto-implemented properties. Instead of writing
       private Fooness foo;
       public Fooness Foo {
          get { return foo; }
          set { foo = value; }
    with C# 3.0 you can write the abbvreviated form and the compiler will produce the same code as you would have written in earlier version of C# (albeit with a weird automatically generated backing store name):
       public Fooness Foo { get; set; }
    • Create Backing Store: converts an auto-implemented property to a conventional property with a backing store. (C# 3.0 only) The reverse of Convert to Auto-Implemented Property, but we'll do a better job of naming the backing store...
    • Encapsulate Downcast: changes the return type of a method to the type that all callers downcast to, removing all typecasting at the calling sites.
    • Extract String to Resource: extracts a string and puts it into a resource file. (Yesssss!)
    • Introduce Parameter Object: consolidates selected parameters into single object. The reverse of Decompose Parameter.
    • Promote to Parameter: removes all references to a field or local declaration from a method, replacing it with a parameter. Calling code is adjusted to pass in the field or expression of the local declaration as the argument for the new parameter.
    • Reduce Visibility: reduces the visibility of a method or property to match the highest calling visibility. Although you should always program to reduce the visible interface of your classes (making the class more of a black box), sometimes you are given code in which this principle was violated. This refactoring can help in shrinking the visible interface of a class.
  • Developer Express at DevTeach, Montréal

    Just to let you know, if you happen to be in the area, that Developer Express is a sponsor of DevTeach in Montréal, Québec, in Canada. Not only that but we have a booth as well.

    Due to a couple of problems along the way, it turns out that I'm the only representative of Developer Express here. So if you want to hear me mangle the French language or just see some cool demos of our latest stuff, including CodeRush and Refactor! Pro 2.2.2, drop by the booth and say hello. I'm here today and tomorrow.

    (For some reason, this trip has been fraught with issues. My luggage got lost en route yesterday, so if the airlines hadn't found it and delivered it by 4am this morning, you'd have been subjected to some very rumpled clothes. Sartorial inelegance or what? Plus my power supply was in the suitcase too, so luckily you won't be seeing me act out the refactorings in Refactor! Pro as a kind of deranged Marcel Marceau.)

  • Shhhh. Don't look now, but we have a new logo

    After some, er, interesting thoughts and ideas, many of which caused some vigorous discussion between ourselves, we've finally settled on a new logo for Developer Express. If you look in the top left corner of our web pages, including this Community site, you'll see it. We'll migrate it to our installs and other materials as and when we have the opportunity.

    The old logo was causing us some problems. For a start the text was in two complementary colors, yellow and blue, and we were finding that on certain marketing materials one or the other would blend into the background. After that issue, we were finding that the text with our name was too small, too timid. Because the text was such a small portion of the area of the logo, the eye would slide over the swoosh and miss out on the actual words.

    In essence we needed a bolder, more assertive design. Mike, our chief graphic designer, has done us proud. He's solved the complementary color problem by just concentrating on the blue, he's bumped up the size of the text so that it's the majority of the area of the logo (and updated it to a rather nice sans-serif block font at that), and to cap it all has incorporated a swoosh. It perfectly encapsulates the requirements we had of a new logo and neatly banishes the problems with the old. Well done, Mike.

    (As an aside, we'd almost settled on another logo that Mike had designed. Until, that is, someone noticed that it resembled rather too closely a well-known brand of prophylactics that also has a D and an X in their name. Even though our motto is all about improving the developer "experience", we decided it was a little too risqué.)

  • YASR (Yet Another Stealth Release)

    In case you weren't paying attention, we released version 2.2.2 of both CodeRush and Refactor! Pro this weekend.

    Lots of interesting additions and bug fixes, all of which will be published in full once we release the official announcement, but the big one for those who love to live on the edge: both CodeRush and Refactor! Pro 2.2.2 will install and work in Visual Studio Orcas beta 1. So you've no excuse not to download the latter now...

  • A not-so-funny thing happened on the way to the forum

    In my blog post last week about our new forums, I was both remarkably up-beat and singularly uninformative. Well, heck, I wrote the post at the beginning of the week when we were just about to switch to the new forums, but, because of one reason or another, we didn't. So, early on Friday morning, when we did switch over I just posted it with a huge sigh of relief without changing it.

    Why should I change it? Well, a couple of reasons I suppose. 

    The first was that on Friday morning the new forums were horribly unresponsive. Customers were reporting 10, 20, 30 second delays in opening up posts, in doing anything with the system at all. We were affected by this ourselves (nope, we don't have a hidden 100Gbit connection into the back of the server: it's hosted somewhere completely different from our offices): we use the newsgroups for internal communications between developers on a team. So all of a sudden the support team and I were looking at a meltdown, both between our developers and our customers. Yes, I know -- hindsight is wonderful -- we should have done more load testing, but we didn't and we were wrong.

    We immediately got in touch with our hosting company to get more bandwidth and to throw more hardware at the problem. Slowly throughout Friday the responsiveness of the system got better. At the moment, it's pretty snappy, but then again, it's Sunday evening and only people with no real life, like me, are online ;-). We shall see what tomorrow brings.

    The second reason for changing the original post is that I didn't know (or more likely Max told me but I promptly forgot) that the forum software (Community Server) supports NNTP. There was I holding a torch for the new forums and (sob) bye-bye newsgroups, when in reality you can have your cake and eat it too. You can use NNTP quite easily just as before in your newsgroup reader. This page shows you how.

    Now, due warning: I'm told that Forte Agent 4.2 has problems with this NNTP server, but I'm going off now to try it myself (yes, it's what I use -- I'm old-fashioned).

    So, my apologies for all the kerfuffle at the end of last week, but please give us a chance again with our new peer support system.

  • Developer Express products win more awards

    Suddenly it's raining awards...


    I am very pleased to announce that CodeRush has been selected as the winner of the Add-in category in the 2007 asp.netPRO Readers' Choice Awards.

    And not only that, but we're winners in other categories too. Ripping open the envelopes, lump in throat:

    - XtraCharts won the Charting & Graphics Tool category,

    - DXperience ASP.NET won the Component Set category,

    - ASPxGrid won the Grid category (and that's even before we reveal out newest version of an ASP.NET grid),

    - ASPxNavigation Suite won Navigation Control category, and finally

    - XtraReports won the Printing/Reporting Tool category.

    And if that weren't enough -- and believe me we're astounded and grateful for what the readers of asp.netPRO awarded us: many thanks to everyone who voted -- there was another of some import. DXperience ASP.NET was runner-up in the Product of the Year category.


    (Hey, Ray, can we have a bigger awards cabinet?)

  • Not mano a mano, but face to face

    Are you within 100 miles say of Colorado Springs, Colorado? Do you use any of Developer Express' products? Would you like to show me, the Chief Technology Officer of said Developer Express, your product or software, face to face, and then discuss how we can better respond to your needs and future plans with our products?

    Then wonder no more.

    I want to get out and about and see how our customers are using our products in real projects, see how they are incorporating our components into their products, what kinds of issues they're having to overcome, and I want to do this in the flesh rather than electronically. Of course, be aware that I'd like to blog about any visits set up in this fashion as well as use what I learned in our management meetings to influence what we do.

    So, since I live and work in north Colorado Springs, let's say that if you are working in Pueblo, Colorado Springs, Denver, Boulder, Longmont, Fort Collins, or any of the ski resorts :-), and you're using our products, email me at julianb@devexpress.com or phone me on +1 818 844 3383 ext. 206 (yes, I know it's a Los Angeles number; the wonders of VoIP don'tcha know) and let's see if we can't set something up


  • A funny thing happened on the way to the forum

    It's been a long time coming. No, really it has. You wouldn't believe it, being on the outside, but here on the inside our internal software team has been working hard in solving this, that, and several other kinds of problem. It's one reason why there haven't been any blog posts here for a little while: we've been holding off on them in case they got lost in the transfer.

    In case you didn't get the email (and believe me we're very careful these days about who we send them to), we launched our new forums this morning and have retired our old, original newsgroups.

    This effort is in response to a large number of our customers who have been asking for searching facilities on our peer support newsgroups. And not just our customers either: search in these days and times is all-pervasive, and we ourselves needed some ability to see what had been discussed before. And what better search engines than those that we don't have to purchase? That are available to all, the prime example being Google.

    So moving the peer support newsgroups to a web-based system makes a great deal of sense from that viewpoint.

    Another aspect to newsgroups is that, these days, many customers have moved away from that style of discussion forum. We didn't particularly want to use an aggregator (like Google Groups, for example) since they're generally read-only and so you could have two different places to go (one place to read and one place to post). Google Groups can be even more confusing: you can reply to a post in an aggregated newsgroup that's displayed in Google Groups, and it won't appear on the original newsgroup.

    Along with that move away from newsgroups, there's been a move towards newreaders and RSS to notify us of new information rather than us having to go look for it. I use FeedDemon and Newsgator for this, but there are many different applications that do this for us nowadays: Outlook 2007, Internet Explorer, Firefox, and so on. Newsgroups, being rather old-guard, don't have this support and so you are forced to regularly (and in person!) go to the newsgroups to see if there are any new posts.

    All in all, then, newsgroups seem to have had their day, especially where we're concerned.

    Over the past year, we've been blogging on a fairly regular basis using Community Server. It's worked extremely well for us: in fact, I don't recall it going down unexpectedly during this period (whereas our overall internet connection has gone down a couple pf times in that time).

    So, we've decided to use Community Server for the new forums that will replace our old newsgroups. It has some extremely good forum support with some nioce features (including a tree view of a thread, which is something I wish a lot of forum software would support). We've migrated over all of the posts in our newsgroups to the forums, and, even better, matched up those users we could identify to their logins on our main system. To ensure that no posts are lost in the transfer, and afterwards, we made the newsgroups read-only. From now on, all peer support posts will be made via the forums.

    Once Google spiders the new forum pages and indexes them, we'll all be able to search for information on our forums to much greater degree than we can at present, all by using the "site:community.devexpress.com" parameter.

    Anyway: enjoy!


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


DevExpress engineers feature-complete Presentation Controls, IDE Productivity Tools, Business Application Frameworks, and Reporting Systems for Visual Studio, Delphi, HTML5 or iOS & Android development. 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-2018 Developer Express Inc.
All trademarks or registered trademarks are property of their respective owners