<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.componentone.com/CS/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"><channel><title>C1 Community</title><link>http://blogs.componentone.com/CS/blogs/</link><description>ComponentOne Community is a free source for developers and help authors to collaborate and communicate.</description><dc:language>en-US</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>Become an Expert Part 5: Generating Reports</title><link>http://blogs.componentone.com/CS/blogs/windev/archive/2010/03/08/BecomeAnExpertPart5.aspx</link><pubDate>Mon, 08 Mar 2010 15:02:00 GMT</pubDate><guid isPermaLink="false">6ffc9ae0-0270-4839-b826-46696419445e:229757</guid><dc:creator>C1_GregL</dc:creator><slash:comments>0</slash:comments><description>&lt;h2&gt;Part 5 Overview&lt;/h2&gt;
&lt;p&gt;This is the fifth part in the six-part &amp;quot;Become an Expert&amp;quot; series. In this part we will add a report generation feature to the Sales Management Application. This feature will be implemented simply by using the &lt;strong&gt;C1Report&lt;/strong&gt; control, which is part of &lt;a href="http://www.componentone.com/SuperProducts/StudioWinForms/"&gt;ComponentOne Studio for WinForms&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In the previous posts we used the &lt;strong&gt;C1FlexGrid&lt;/strong&gt; and &lt;strong&gt;C1Chart&lt;/strong&gt; controls to visualize our data. Now, we will add a reporting feature which is essential to this type of application. We will use the print feature of each control and the &lt;strong&gt;C1PdfDocument&lt;/strong&gt; component as well. For the reporting we will utilize various features of the rich &lt;strong&gt;C1Report&lt;/strong&gt; component, and we&amp;#39;ll show how to print preview and actually print the report using the &lt;strong&gt;C1PrintPreviewControl&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;Final Result&lt;/h2&gt;
&lt;p&gt;Here is a preview of the final result. When we click the &amp;quot;Report&amp;quot; button on the main form, we will open a print preview window.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/4375.application3.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/4375.application3.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;From the print preview screen you can display file output or directly print the document.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/1663.reportPreview.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/1663.reportPreview.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So, let&amp;#39;s add this reporting feature to our application.&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Design a report with C1Report control&lt;/h2&gt;
&lt;p&gt;The first step is to generate a report definition file (xml) that will define the layout and structure of our report. We will use the &lt;strong&gt;C1ReportDesigner&lt;/strong&gt; application to create this report definition through a WYSIWYG design surface. The &lt;strong&gt;C1ReportDesigner&lt;/strong&gt; application installs alongside Studio for WinForms.&lt;/p&gt;
&lt;p&gt;Launch the &lt;strong&gt;C1ReportDesigner&lt;/strong&gt; from the Start menu, under ComponentOne and Reports for .NET.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/8507.reportdesigner1.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/8507.reportdesigner1.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Select &amp;quot;File&amp;quot;&amp;nbsp;--&amp;gt; &amp;quot;Add New Report&amp;quot; to create a new report.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/2627.reportwizard_5F00_datasource.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/2627.reportwizard_5F00_datasource.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In the first page of the &lt;strong&gt;C1Report&lt;/strong&gt; wizard will connect to the database. Click on the &amp;quot;Build Connection String&amp;quot; button on the top right to display the &amp;quot;Data Link Properties&amp;quot; dialog.&lt;/p&gt;
&lt;p&gt;Enter the server name, user name, password and select the database to create the connection string.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/2543.reportwizard_5F00_connection.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/2543.reportwizard_5F00_connection.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Next, write a SQL query to get the data to be displayed in the report.&lt;/p&gt;
&lt;p&gt;We will be getting data from the Sales and Category data tables. The two tables are related through the CategoryCode field. We will get &amp;quot;Date&amp;quot;, &amp;quot;Proceeds&amp;quot;, &amp;quot;Payments&amp;quot;, &amp;quot;GrossMargin&amp;quot;, and &amp;quot;GrossMarginRate&amp;quot; from the Sales table and &amp;quot;Category Name&amp;quot; from the Category table. &lt;/p&gt;
&lt;p&gt;Please refer to &lt;a href="http://helpcentral.componentone.com/CS/blogs/windev/archive/2010/01/29/BecomeAnExpertPart1.aspx"&gt;Part 1&lt;/a&gt; and &lt;a href="http://helpcentral.componentone.com/CS/blogs/windev/archive/2010/02/05/BecomeAnExpertPart2.aspx"&gt;Part 2&lt;/a&gt; of this series for details on the layout of Sales and Category tables. The SQL create statements can be found in the attached samples.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/5751.reportwizard_5F00_sql.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/5751.reportwizard_5F00_sql.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We could also use the SQL builder to create our SQL query. The SQL builder dialog can be accessed by clicking the &amp;quot;Build SQL statement&amp;quot; button on the top right.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/1050.sqlbuilder.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/1050.sqlbuilder.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You must be careful about predefined keywords in the &lt;strong&gt;C1Report&lt;/strong&gt; control. In our case the word &amp;quot;Date&amp;quot; is a keyword so we use the AS operator to change the name of the column to &amp;quot;SalesDate.&amp;quot;　&lt;/p&gt;
&lt;p&gt;Once the SQL statement has been created, click on the &amp;quot;Next&amp;quot; button. We will group our data based on &amp;quot;CategoryName&amp;quot;. Move &amp;quot;CategoryName&amp;quot; to the &amp;quot;Groups&amp;quot; box and all other fields to the &amp;quot;Detail&amp;quot; box on the &lt;strong&gt;C1Report&lt;/strong&gt; Wizard dialog.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/1541.report_5F00_fields.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/1541.report_5F00_fields.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Click &amp;quot;Next&amp;quot; to select the layout. We&amp;#39;ll select Outline, Portrait and Adjust Fields to fit page options.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/2727.reportwizard_5F00_layout.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/2727.reportwizard_5F00_layout.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Click &amp;quot;Next&amp;quot; to select a preset report style and enter the title of the report.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/7026.reportwizard_5F00_style.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/7026.reportwizard_5F00_style.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/2046.reportwizard_5F00_title.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/2046.reportwizard_5F00_title.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Finally, click &amp;quot;Finish&amp;quot; and Voila! The initial settings of your report are done.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/6036.reportdesigner2.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/6036.reportdesigner2.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now we will decide where the report will be displayed and set the font for the report. These settings are easy to do by just dragging and dropping or setting some properties. We can also set the date format and currency format for our fields here. &lt;/p&gt;
&lt;p&gt;Save the report definition file to complete the report design process.&lt;/p&gt;
&lt;h2&gt;Load and Print the report design using C1Report&lt;/h2&gt;
&lt;p&gt;Now, let&amp;#39;s use the actual &lt;strong&gt;C1Report&lt;/strong&gt; component in our Sales Management application.&lt;/p&gt;
&lt;p&gt;Place the &lt;strong&gt;C1Report&lt;/strong&gt; component on the Form. To get the&lt;strong&gt; C1Report&lt;/strong&gt; control, add the control to the toolbox by right clicking on it and accessing the &amp;quot;Choose Toolbox Items&amp;quot; dialog.　For details on how to add controls refer to previous articles.&lt;/p&gt;
&lt;p&gt;Use the Load method to load the report definition file. Set the parameters of the Load method to report definition file path and the name of the report. A single report definition file can contain many reports. In our case, we have only 1 report in our definition file but we still need to provide the report name. &lt;/p&gt;
&lt;pre&gt;this.c1Report1.Load(&amp;quot;Report File Name &amp;amp; Path&amp;quot;, &amp;quot;Report Name&amp;quot;);&lt;/pre&gt;
&lt;p&gt;Then, call the Print method of the Document property to print the report.&lt;/p&gt;
&lt;pre&gt;this.c1Report1.Document.Print();&lt;/pre&gt;
&lt;h2&gt;Preview and Export the Report&lt;/h2&gt;
&lt;p&gt;Printing starts the moment we click on the Report button because we are calling the Print method. However, it would be better if we get a print preview first and allow the user to change settings before the actual printing takes place. Just like other applications. It would also be great if we can get the output of the report in other formats besides simply printing. That would enhance the usability of this application tremendously. So let&amp;#39;s try adding these two features.&lt;/p&gt;
&lt;p&gt;Exporting the report as a file is easy; &lt;strong&gt;C1Report&lt;/strong&gt;&amp;#39;s RenderToFile method is available for generating outputted formats such as rich text, Html, PDF and Excel.&lt;/p&gt;
&lt;p&gt;We can easily generate a preview using the standard PrintPreviewControl or the PrintPreviewDialog control. However, there will be some limitations on paging and zooming if you use the standard controls. So for better performance we will use &lt;strong&gt;C1PrintPreviewControl&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;C1PrintPreviewControl&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;C1PrintPreviewControl&lt;/strong&gt; is also include in Studio for WinForms. This control is optimized for&lt;strong&gt; C1Report&lt;/strong&gt; and already contains features like preview, printing, export etc. Just a few quick settings are needed to implement these features in our application. &lt;/p&gt;
&lt;p&gt;First, place the &lt;strong&gt;C1PrintPreviewControl&lt;/strong&gt; on the screen where we want the report to be displayed. For this sample, we add a new Form window called Print Preview.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/8883.print_5F00_preview.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/8883.print_5F00_preview.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Change the settings of &lt;strong&gt;C1PrintPreviewControl&lt;/strong&gt; to decide on the commands to be used or if the navigation panel is to be displayed or not.&lt;/p&gt;
&lt;pre&gt;// Set the tools to be used.
this.c1PrintPreviewControl1.AvailablePreviewActions = C1PreviewActionFlags.All;
// Hide the navigation panel.
this.c1PrintPreviewControl1.NavigationPanelVisible = false;&lt;/pre&gt;
&lt;p&gt;Then, assign the Document property of &lt;strong&gt;C1Report&lt;/strong&gt; to the Document property of &lt;strong&gt;C1PrintPreviewControl&lt;/strong&gt;.&lt;/p&gt;
&lt;pre&gt;// Display document preview.
this.c1PrintPreviewControl1.Document = this.c1Report1.Document;&lt;/pre&gt;
&lt;p&gt;That&amp;#39;s it! Replace the line of code that prints our report from earlier and display our new Print Preview window.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/1663.reportPreview.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/1663.reportPreview.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Use the buttons on the Print Preview of the &lt;strong&gt;C1PrintPreviewControl&lt;/strong&gt; to print or get the file output.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;In this part, we used the&lt;strong&gt; C1ReportDesigner&lt;/strong&gt; application to create a report. We used the &lt;strong&gt;C1Report&lt;/strong&gt; and &lt;strong&gt;C1PrintPreviewControl&lt;/strong&gt; to load and preview our report in the Sales Management application. Unlike PDF export explained in &lt;a href="http://helpcentral.componentone.com/CS/blogs/windev/archive/2010/02/09/BecomeAnExpertPart3.aspx"&gt;Part 3&lt;/a&gt;, here we are able to export our data to PDF format in a better design.&lt;/p&gt;
&lt;p&gt;In the final part, we will use some interesting features provided by various controls and complete the application.&lt;/p&gt;
&lt;h2&gt;Acknowledgements&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Article copyright &amp;copy; 2009&amp;nbsp;Shogo Takayama&amp;nbsp;＆ Shoeisha Co., Ltd. http://www.shoeisha.co.jp/ &lt;/li&gt;
&lt;li&gt;&lt;a href="http://codezine.jp/"&gt;http://codezine.jp/&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;These contents were made by GrapeCity inc., Japan. &lt;a href="http://www.grapecity.com/japan/"&gt;http://www.grapecity.com/japan/&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Translated by Vidhi Kapoor (GrapeCity India Pvt. Ltd.)&lt;/li&gt;
&lt;li&gt;Edited by Greg Lutz (ComponentOne)&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.componentone.com/CS/aggbug.aspx?PostID=229757" width="1" height="1"&gt;</description><category domain="http://blogs.componentone.com/CS/blogs/windev/archive/tags/WinForms/default.aspx">WinForms</category><category domain="http://blogs.componentone.com/CS/blogs/windev/archive/tags/C1ReportDesigner/default.aspx">C1ReportDesigner</category><category domain="http://blogs.componentone.com/CS/blogs/windev/archive/tags/C1Report/default.aspx">C1Report</category><category domain="http://blogs.componentone.com/CS/blogs/windev/archive/tags/Become+an+Expert/default.aspx">Become an Expert</category><category domain="http://blogs.componentone.com/CS/blogs/windev/archive/tags/C1PrintPreviewControl/default.aspx">C1PrintPreviewControl</category></item><item><title>Creating Outlines and Trees with the C1FlexGrid Control</title><link>http://blogs.componentone.com/CS/blogs/windev/archive/2010/03/03/creating-outlines-and-trees-with-the-c1flexgrid-control.aspx</link><pubDate>Wed, 03 Mar 2010 18:52:00 GMT</pubDate><guid isPermaLink="false">6ffc9ae0-0270-4839-b826-46696419445e:229604</guid><dc:creator>C1_GregL</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;One of the unique and popular features of the &lt;b&gt;C1FlexGrid&lt;/b&gt; control is the ability to add hierarchical grouping to regular unstructured data.&lt;/p&gt;
&lt;p&gt;To achieve this, the &lt;b&gt;C1FlexGrid &lt;/b&gt;introduces the concept of &lt;b&gt;Node &lt;/b&gt;rows. Node rows do not contain regular data. Instead, they act as headers under which similar data is grouped, exactly like nodes in a regular &lt;b&gt;TreeView &lt;/b&gt;control. Like nodes in a &lt;b&gt;TreeView &lt;/b&gt;control, node rows can be collapsed and expanded, hiding or showing the data they contain. Also like nodes in a &lt;b&gt;TreeView &lt;/b&gt;control, node rows have a &lt;b&gt;Level &lt;/b&gt;property that defines the node hierarchy. Lower level nodes contain higher level nodes.&lt;/p&gt;
&lt;p&gt;For example, suppose you had a grid showing customer name, country, city, and sales amounts. This typical grid would normally look like this:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.FlexGridTrees/7041.RegularGrid.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.FlexGridTrees/7041.RegularGrid.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;All the information is there, but it&amp;#39;s hard to see the total sales for each country or customer. You could use the &lt;b&gt;C1FlexGrid&lt;/b&gt;&amp;#39;s outlining features to group the data by country (level 0), then by city within each country (level 1), then by customer within each city (level 2). Here is the same grid with after adding the outline:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.FlexGridTrees/8424.OutlineGrid.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.FlexGridTrees/8424.OutlineGrid.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This grid shows the same information as the previous one (it is bound to the same data source), but it adds a tree where each node contains a summary of the data below it. Nodes can be collapsed to show only the summary, or expanded to show the detail. Note that each node row can show summaries for more than one column (in this case, total units sold and total amount).&lt;/p&gt;
&lt;p&gt;In this article, we will walk you through the process of turning a regular grid into a richer outline grid.&lt;/p&gt;
&lt;h3&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.FlexGridTrees/6327.C1FlexGridOutlinesAndTrees.zip"&gt;Download Visual Studio Sample (C#)&lt;/a&gt;&lt;/h3&gt;
&lt;h2&gt;Loading the Data&lt;/h2&gt;
&lt;p&gt;Loading data into an outline grid is exactly the same as loading it into a regular grid. If your data source is available at design time, you can use the Visual Studio Property Window to set the grid&amp;#39;s &lt;b&gt;DataSource &lt;/b&gt;property and bind the grid to the data without writing any code. &lt;/p&gt;
&lt;p&gt;If the data source is not available at design time, you can set the grid&amp;#39;s &lt;b&gt;DataSource &lt;/b&gt;property in code. The data binding code typically looks like this:&lt;/p&gt;
&lt;pre&gt;public Form1()
{
    InitializeComponent();

    // get data
    var fields = @&amp;quot;
        Country, 
        City, 
        SalesPerson, 
        Quantity,
        ExtendedPrice&amp;quot;;
    var sql = string.Format(&amp;quot;SELECT {0} FROM Invoices ORDER BY {0}&amp;quot;, fields);
    var da = new OleDbDataAdapter(sql, GetConnectionString());
    da.Fill(_dt);

    &lt;b&gt;// bind grid to data
    this._flex.DataSource = _dt;&lt;/b&gt;
    
    // format ExtendedPrice column
    _flex.Cols[&amp;quot;ExtendedPrice&amp;quot;].Format = &amp;quot;n2&amp;quot;;
}&lt;/pre&gt;
&lt;p&gt;The code uses an &lt;b&gt;OleDbDataAdapter &lt;/b&gt;to fill a &lt;b&gt;DataTable &lt;/b&gt;with data, then assigns the &lt;b&gt;DataTable &lt;/b&gt;to the grid&amp;#39;s &lt;b&gt;DataSource&lt;/b&gt; property.&lt;/p&gt;
&lt;p&gt;After running this code, you would get the &amp;quot;regular grid&amp;quot; shown in the first image. To turn this regular grid into the outline grid shown in the second image, we need to insert the node rows that make up the outline.&lt;/p&gt;
&lt;h3&gt;Creating Node Rows&lt;/h3&gt;
&lt;p&gt;Node rows are almost identical to regular rows, except for the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Node rows are not data bound. When the grid is bound to a data source, each regular row corresponds to an item in the data source. Node rows do not. Instead, they exist to group regular rows that contain similar data.&lt;/li&gt;
&lt;li&gt;Node rows can be collapsed or expanded. When a node row is collapsed, all its data and child nodes are hidden. If the outline tree is visible, users can collapse and expand nodes using the mouse or the keyboard. If the outline tree is not visible, then nodes can only be expanded or collapsed using code.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To determine whether a row is a node or not, you can use the &lt;b&gt;IsNode &lt;/b&gt;property:&lt;/p&gt;
&lt;pre&gt;var row = _flex.Rows[rowIndex];
if (row.IsNode)
{
    // row is a node
    var node = row.Node;
    DoSomethingWithTheNode(node);
}
else
{
    // this row is not a node
}&lt;/pre&gt;
&lt;p&gt;Node rows can be created in three ways:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Use the &lt;b&gt;Rows.InsertNode &lt;/b&gt;method. This will insert a new node row at a specified index. Once the node row has been created, you can use it like you would any other row (set the data for each column, apply styles, etc). This is the &amp;#39;low-level&amp;#39; way of inserting totals and building outlines. It gives the most control and flexibility and is demonstrated below. &lt;/li&gt;
&lt;li&gt;Use the &lt;b&gt;Subtotal &lt;/b&gt;method. This method scans the entire grid and automatically inserts node rows with optional subtotals at locations where the grid data changes. This is the &amp;#39;high-level&amp;#39; way of inserting totals and building outlines. It requires very little code, but makes some assumptions about how the data is structured on the grid and what the outline should look like.&lt;/li&gt;
&lt;li&gt;If the grid is unbound, then you can turn regular rows into node rows by setting the &lt;b&gt;IsNode &lt;/b&gt;property to true. Note that this only works when the grid is &lt;i&gt;unbound&lt;/i&gt;. Trying to turn a regular data bound row into a node will cause the grid to throw an exception. &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The code below shows how you could implement a &lt;b&gt;GroupBy&lt;/b&gt; method that inserts node rows grouping identical values on a given column.&lt;/p&gt;
&lt;pre&gt;// group on a given column inserting nodes of a given level
void GroupBy(string columnName, int level)
{
    object current = null;
    for (int r = _flex.Rows.Fixed; r &amp;lt; _flex.Rows.Count; r++)
    {
        if (!_flex.Rows[r].IsNode)
        {
            var value = _flex[r, columnName];
            if (!object.Equals(value, current))
            {
                // value changed: insert node
                &lt;b&gt;_flex.Rows.InsertNode(r, level);&lt;/b&gt;

                // show group name in first scrollable column
                _flex[r, _flex.Cols.Fixed] = value;

                // update current value
                current = value;
            }
        }
    }
}
&lt;/pre&gt;
&lt;p&gt;The code scans all the columns, skipping existing node rows (so it can be called to add several levels of nodes), and keeps track of the current value for the column being grouped on. When the current value changes, a node row is inserted showing the new in the first scrollable column.&lt;/p&gt;
&lt;p&gt;Back to our example, you could use this method to create a two-level outline by calling:&lt;/p&gt;
&lt;pre&gt;void _btnGroupCountryCity_Click(object sender, EventArgs e)
{
    GroupBy(&amp;quot;Country&amp;quot;, 0);
    GroupBy(&amp;quot;City&amp;quot;, 1);
}&lt;/pre&gt;
&lt;p&gt;Very simple, but there are some caveats. First, the method assumes that the data is sorted according to the outline structure. In this example, if the data were sorted by &lt;b&gt;SalesPerson&lt;/b&gt; instead of by &lt;b&gt;Country&lt;/b&gt;, the outline would have several level-0 nodes for each country, which probably is not what you want.&lt;/p&gt;
&lt;p&gt;Also, the &lt;b&gt;GroupBy &lt;/b&gt;method may insert may rows, which would cause the grid to flicker. To avoid this, you would normally set the &lt;b&gt;Redraw &lt;/b&gt;property to false before making the updates and set it back to true when done.&lt;/p&gt;
&lt;p&gt;To handle these issues, the code that creates the outline should be re-written as follows:&lt;/p&gt;
&lt;pre&gt;void _btnGroupCountryCity_Click(object sender, EventArgs e)
{
    // suspend redrawing while updating
    using (new DeferRefresh(_flex))
    {
        // restore original sort (by Country, City, etc.)
        ResetBinding();

        // group by Country, City
        GroupBy(&amp;quot;Country&amp;quot;, 0);
        GroupBy(&amp;quot;City&amp;quot;, 1);
    }
}&lt;/pre&gt;
&lt;p&gt;The &lt;b&gt;DeferRefresh &lt;/b&gt;class is a simple utility that sets the grid&amp;#39;s &lt;b&gt;Redraw &lt;/b&gt;property to false and restores its original value when it is disposed. This ensures that&lt;b&gt; Redraw&lt;/b&gt; is properly restored even when exceptions happen during the updates. Here is the implementation of the &lt;b&gt;DeferRefresh &lt;/b&gt;class:&lt;/p&gt;
&lt;pre&gt;/// Utility class used to encapsulate grid lengthy operations in a Redraw block.
/// This avoids flicker and ensures the Redraw property is reset properly in case 
/// an exception is thrown during the operation.
class DeferRefresh : IDisposable
{
    C1FlexGrid _grid;
    bool _redraw;
    public DeferRefresh(C1FlexGrid grid)
    {
        _grid = grid;
        _redraw = grid.Redraw;
        &lt;b&gt;grid.Redraw = false;&lt;/b&gt;
    }
    public void Dispose()
    {
        &lt;b&gt;_grid.Redraw = _redraw;&lt;/b&gt;
    }
}&lt;/pre&gt;
&lt;p&gt;The &lt;b&gt;BindGrid &lt;/b&gt;method ensures that the grid is sorted in the order required by our outline structure. In our example, the sort order is by &lt;b&gt;Country&lt;/b&gt;, &lt;b&gt;City&lt;/b&gt;, and &lt;b&gt;SalesPerson&lt;/b&gt;. The code looks like this:&lt;/p&gt;
&lt;pre&gt;// unbind and re-bind grid in order to reset everything
void ResetBinding()
{
    // unbind grid
    _flex.DataSource = null;
    
    // reset any custom sorting
    _dt.DefaultView.Sort = string.Empty;

    // re-bind grid
    _flex.DataSource = _dt;
    
    // format ExtendedPrice column
    _flex.Cols[&amp;quot;ExtendedPrice&amp;quot;].Format = &amp;quot;n2&amp;quot;;
    
    // auto-size the columns to fit their content
    _flex.AutoSizeCols();
}&lt;/pre&gt;
&lt;p&gt;If you run this code now, you will notice that the node rows are created as expected, but the outline tree is not visible, so you can&amp;#39;t expand and collapse the nodes. The outline tree is described in the next section.&lt;/p&gt;
&lt;h2&gt;Outline Tree &lt;/h2&gt;
&lt;p&gt;The outline tree is very similar to the one you see in a regular &lt;b&gt;TreeView&lt;/b&gt; control. It shows an indented structure with collapse/expand icons next to each node row so the user can expand and collapse the outline to see the desired level of detail.&lt;/p&gt;
&lt;p&gt;The outline tree can be displayed in any column, defined by the &lt;b&gt;Tree.Column &lt;/b&gt;property. By default, this property is set to -1, which causes the tree not to be displayed at all. To show the outline tree in the example given above, you would use this code:&lt;/p&gt;
&lt;pre&gt;void _btnTreeCountryCity_Click(object sender, EventArgs e)
{
    using (new DeferRefresh(_flex))
    {
        // group by country and city as before
        _btnGroupCountryCity_Click(this, EventArgs.Empty);

        &lt;b&gt;// show outline tree
        _flex.Tree.Column = 0;
&lt;/b&gt;
        // autosize to accommodate tree
        _flex.AutoSizeCol(_flex.Tree.Column);

        // collapse detail nodes
        _flex.Tree.Show(1);
    }
}&lt;/pre&gt;
&lt;p&gt;The code calls the previous method to build the outline, then sets the &lt;b&gt;Tree.Column &lt;/b&gt;property to zero in order to show the outline tree in the first column. It also calls the &lt;b&gt;AutoSizeCol&lt;/b&gt; method to ensure that the column is wide enough to accommodate the outline tree. Finally, it calls the &lt;b&gt;Tree.Show &lt;/b&gt;method to display all level-0 nodes (cities in this case) and hide all the detail.&lt;/p&gt;
&lt;p&gt;The &lt;b&gt;Tree &lt;/b&gt;property returns a reference to a &lt;b&gt;GridTree &lt;/b&gt;object that exposes several methods and properties used to customize the outline tree. The main ones are listed below:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Column: &lt;/b&gt;Gets or sets the index of the column that contains the outline tree. Setting this property to -1 causes the outline tree to be hidden from the users.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Indent: &lt;/b&gt;Gets or sets the indent, in pixels, between adjacent node levels. Higher indent levels cause the tree to become wider.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Style: &lt;/b&gt;Gets or sets the type of outline tree to display. Use this property to determine whether the tree should include a button bar at the top to allow users to collapse/expand the entire tree, whether lines and/or symbols should be displayed, and whether lines should be displayed connecting the tree to data rows as well as node rows.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;LineColor: &lt;/b&gt;Gets or sets the color of the tree&amp;#39;s connecting lines.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;LineStyle: &lt;/b&gt;Gets or sets the style of the tree&amp;#39;s connecting lines.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For example, by changing the code above to include these two lines:&lt;/p&gt;
&lt;pre&gt;// show outline tree
_flex.Tree.Column = 0;
_flex.Tree.Style = TreeStyleFlags.CompleteLeaf;
_flex.Tree.LineColor = Color.White;
_flex.Tree.Indent = 30;&lt;/pre&gt;
&lt;p&gt;The outline tree would change as follows:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.FlexGridTrees/5381.ButtonBar.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.FlexGridTrees/5381.ButtonBar.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Notice the buttons labeled &amp;quot;1&amp;quot;, &amp;quot;2&amp;quot;, and &amp;quot;*&amp;quot; on the top left cell. Clicking these buttons would cause the entire tree to collapse or expand to the corresponding level. Also notice the much wider indentation and the lines connecting the tree to regular rows (&amp;quot;Anne Dodsworth&amp;quot;) as well as to node rows.&lt;/p&gt;
&lt;h2&gt;Adding Subtotals&lt;/h2&gt;
&lt;p&gt;So far we have covered the creation of node rows and outline trees. To make the outlines really useful, however, the node rows should include summary information for the data they contain. &lt;/p&gt;
&lt;p&gt;If you create an outline tree using the &lt;b&gt;Subtotal &lt;/b&gt;method, then the subtotals are added automatically. This will be described in a later section.&lt;/p&gt;
&lt;p&gt;If you created the outline tree using the &lt;b&gt;Rows.InsertNode &lt;/b&gt;method as described above, then you should use the &lt;b&gt;Aggregate &lt;/b&gt;method to calculate the subtotals for each group of rows and insert the result directly into the node rows.&lt;/p&gt;
&lt;p&gt;The &lt;b&gt;Subtotal &lt;/b&gt;method listed below shows how to do this:&lt;/p&gt;
&lt;pre&gt;// add subtotals to each node at a given level
void AddSubtotals(int level, string colName)
{
    // get column we are going to total on
    int colIndex = _flex.Cols.IndexOf(colName);

    // scan rows looking for nodes at the right level
    for (int r = _flex.Rows.Fixed; r &amp;lt; _flex.Rows.Count; r++)
    {
        if (_flex.Rows[r].IsNode)
        {
            var node = _flex.Rows[r].Node;
            if (node.Level == level)
            {
                // found a node, calculate the sum of extended price
                var range = node.GetCellRange();
                &lt;b&gt;var sum = _flex.Aggregate(AggregateEnum.Sum, 
                    range.r1, colIndex, range.r2, colIndex,
                    AggregateFlags.ExcludeNodes);&lt;/b&gt;

                // show the sum on the grid 
                // (will use the column format automatically)
                _flex[r, colIndex] = sum;
            }
        }
    }
}&lt;/pre&gt;
&lt;p&gt;The &lt;b&gt;AddSubtotals &lt;/b&gt;method scans the grid rows looking for node rows. When a node row of the desired level is found, the method uses the &lt;b&gt;Node.GetCellRange &lt;/b&gt;method to retrieve the node&amp;#39;s child rows. Then it uses the &lt;b&gt;Aggregate &lt;/b&gt;method to calculate the sum of the values on the target column over the entire range. The call to &lt;b&gt;Aggregate &lt;/b&gt;includes the &lt;b&gt;ExcludeNodes &lt;/b&gt;flag to avoid double-counting existing nodes. Once the subtotal has been calculated, it is assigned to the node row&amp;#39;s cell with the usual &lt;b&gt;_flex[row, col]&lt;/b&gt; indexer.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;Note that this does not affect the data source in any way, since node rows are not bound to the data.&lt;/p&gt;
&lt;p&gt;Note also that the method can be used to add multiple totals to each node row. In this example, we will add totals for the &lt;b&gt;Quantity &lt;/b&gt;and &lt;b&gt;ExtendedPrice &lt;/b&gt;columns. In addition to sums, you could add other aggregates such as average, maximum, minimum, etc.&lt;/p&gt;
&lt;p&gt;We can now use this method to create a complete outline, with node rows, outline tree, and subtotals:&lt;/p&gt;
&lt;pre&gt;void _btnTreeCountryCity_Click(object sender, EventArgs e)
{
    using (new DeferRefresh(_flex))
    {
        // restore original sort (by Country, City, SalesPerson)
        ResetBinding();

        // group by Country, City
        GroupBy(&amp;quot;Country&amp;quot;, 0); // group by country (level 0)
        GroupBy(&amp;quot;City&amp;quot;, 1);    // group by city (level 1)

        // add totals per Country, City
        AddSubtotals(0, &amp;quot;ExtendedPrice&amp;quot;);  // extended price per country (level 0)
        AddSubtotals(0, &amp;quot;Quantity&amp;quot;);       // quantity per country (level 0)
        AddSubtotals(1, &amp;quot;ExtendedPrice&amp;quot;);  // extended price per city (level 1)
        AddSubtotals(1, &amp;quot;Quantity&amp;quot;);       // quantity per city (level 1)

        // show outline tree
        _flex.Tree.Column = 0;
        _flex.AutoSizeCol(_flex.Tree.Column);
        _flex.Tree.Show(1);
    }
}
&lt;/pre&gt;
&lt;p&gt;If you run the project now, you will see a tree with node rows that show the total quantity and amount sold for each country and city. This is very nice, but there is a little problem. If you expand any of the node rows, you will see a lot of duplicate values. All rows under a given city node have the same country and city:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.FlexGridTrees/2148.Duplicates.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.FlexGridTrees/2148.Duplicates.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is correct, but it is also a waste of screen real estate. Eliminating these duplicate values is easy, all you have to do is set the &lt;b&gt;Width &lt;/b&gt;of the columns that are being grouped on to zero. When you do that, however, you should remember to set the grid&amp;#39;s &lt;b&gt;AllowMerging &lt;/b&gt;property to &lt;b&gt;Nodes&lt;/b&gt;, so the text assigned to the node rows will spill into the visible columns. (Another option would be to assign the node text to the first visible column, but merging is usually a better solution because it allows you to use longer text for the node rows).&lt;/p&gt;
&lt;p&gt;Here is the revised code and the final result:&lt;/p&gt;
&lt;pre&gt;void _btnTreeCountryCity_Click(object sender, EventArgs e)
{
    using (new DeferRefresh(_flex))
    {
        // restore original sort (by Country, City, SalesPerson)
        ResetBinding();

        // group by Country, City
        GroupBy(&amp;quot;Country&amp;quot;, 0); // group by country (level 0)
        GroupBy(&amp;quot;City&amp;quot;, 1);    // group by city (level 1)

        // hide columns that we grouped on 
        // (they only have duplicate values which already appear on the tree nodes)
        // (but don&amp;#39;t make them invisible, that would also hide the node text)
        _flex.Cols[&amp;quot;Country&amp;quot;].Width = 0;
        _flex.Cols[&amp;quot;City&amp;quot;].Width = 0;

        // allow node content to spill onto next cell
        _flex.AllowMerging = AllowMergingEnum.Nodes;

        // add totals per Country, City
        AddTotals(0, &amp;quot;ExtendedPrice&amp;quot;);  // extended price per country (level 0)
        AddTotals(0, &amp;quot;Quantity&amp;quot;);       // quantity per country (level 0)
        AddTotals(1, &amp;quot;ExtendedPrice&amp;quot;);  // extended price per city (level 1)
        AddTotals(1, &amp;quot;Quantity&amp;quot;);       // quantity per city (level 1)
        
        // show outline tree
        _flex.Tree.Column = 0;
        _flex.AutoSizeCol(_flex.Tree.Column);
        _flex.Tree.Show(1);
    }
}
&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.FlexGridTrees/8015.NoDuplicates.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.FlexGridTrees/8015.NoDuplicates.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The &lt;b&gt;Country &lt;/b&gt;and &lt;b&gt;City &lt;/b&gt;columns are now invisible, but their values still appear in the node rows. Collapsing the tree shows totals for each country and city.&lt;/p&gt;
&lt;h2&gt;Using the Subtotal Method&lt;/h2&gt;
&lt;p&gt;We mentioned earlier that you could also create trees using the &lt;b&gt;C1FlexGrid&lt;/b&gt;&amp;#39;s &lt;b&gt;Subtotal &lt;/b&gt;method. The &lt;b&gt;Subtotal &lt;/b&gt;method performs the same tasks as the &lt;b&gt;GroupBy &lt;/b&gt;and &lt;b&gt;AddSubtotals &lt;/b&gt;methods described above, except it does both things in a single step and is therefore a little more efficient.&lt;/p&gt;
&lt;p&gt;The code below shows how you can use the &lt;b&gt;Subtotal&lt;/b&gt; method to accomplish the same thing we did before, only a little faster and without using any helper methods:&lt;/p&gt;
&lt;pre&gt;void _btnTreeCountryCity_Click(object sender, EventArgs e)
{
    using (new DeferRefresh(_flex))
    {
        // restore original sort (by Country, City, SalesPerson)
        ResetBinding();

        // group and total by country and city
        _flex.Subtotal(AggregateEnum.Sum, 0, &amp;quot;Country&amp;quot;, &amp;quot;ExtendedPrice&amp;quot;);
        _flex.Subtotal(AggregateEnum.Sum, 0, &amp;quot;Country&amp;quot;, &amp;quot;Quantity&amp;quot;);
        _flex.Subtotal(AggregateEnum.Sum, 1, &amp;quot;City&amp;quot;, &amp;quot;ExtendedPrice&amp;quot;);
        _flex.Subtotal(AggregateEnum.Sum, 1, &amp;quot;City&amp;quot;, &amp;quot;Quantity&amp;quot;);

        // hide columns that we grouped on 
        // (they only have duplicate values which already appear on the tree nodes)
        // (but don&amp;#39;t make them invisible, that would also hide the node text)
        _flex.Cols[&amp;quot;Country&amp;quot;].Width = 0;
        _flex.Cols[&amp;quot;City&amp;quot;].Width = 0;
        _flex.AllowMerging = AllowMergingEnum.Nodes;

        // show outline tree
        _flex.Tree.Column = 0;
        _flex.AutoSizeCol(_flex.Tree.Column);
        _flex.Tree.Show(1);
    }
}&lt;/pre&gt;
&lt;p&gt;The &lt;b&gt;Subtotal &lt;/b&gt;method is very convenient and flexible. It has a number of overloads that allow you to specify which columns should be grouped on and totaled on by index or by name, whether to include a caption in the node rows that it inserts, how to perform the grouping, and so on. The summary below describes the overloads available:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Subtotal(AggregateEnum aggType)&lt;/b&gt;&lt;br /&gt;This version of the method takes only one aggregate type as a parameter. It is useful only for removing existing subtotals before inserting new ones. In this case, the &lt;b&gt;&lt;i&gt;aggType &lt;/i&gt;&lt;/b&gt;parameter is set to &lt;b&gt;AggregateEnum.Clear&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Subtotal(&lt;/b&gt;AggregateEnum aggType, &lt;b&gt;int groupBy, int totalOn)&lt;br /&gt;Subtotal(&lt;/b&gt;AggregateEnum aggType, &lt;b&gt;string groupBy, string totalOn)&lt;br /&gt;&lt;/b&gt;These are the most commonly used overloads. The parameters are the type of aggregate to insert and the columns to group by and total on. The columns may be referenced by index or by name. The latter is the one we used in the example above. &lt;/li&gt;
&lt;li&gt;&lt;b&gt;Subtotal(&lt;/b&gt;AggregateEnum aggType, int groupBy, int totalOn, &lt;b&gt;string caption)&lt;br /&gt;Subtotal(&lt;/b&gt;AggregateEnum aggType, string groupBy, string totalOn, &lt;b&gt;string caption)&lt;br /&gt;&lt;/b&gt;These overloads add an extra &lt;i&gt;&lt;b&gt;caption &lt;/b&gt;&lt;/i&gt;parameter. The &lt;i&gt;&lt;b&gt;caption &lt;/b&gt;&lt;/i&gt;parameter determines the text that is added to the new node rows to identify the value being grouped on. By default, the value being grouped on is shown, so if you are grouping by country, the node rows would show &amp;quot;Argentina&amp;quot;, &amp;quot;Brazil&amp;quot;, and so on. If you set the &lt;i&gt;&lt;b&gt;caption &lt;/b&gt;&lt;/i&gt;parameter to a string such as &amp;quot;Country: {0}&amp;quot;, then the node rows would show &amp;quot;Country: Argentina&amp;quot; instead.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Subtotal(&lt;/b&gt;AggregateEnum aggType, &lt;b&gt;int groupFrom, int groupTo,&lt;/b&gt; int totalOn, string caption&lt;b&gt;)&lt;br /&gt;Subtotal(&lt;/b&gt;AggregateEnum aggType, &lt;b&gt;string groupFrom, string groupTo,&lt;/b&gt; string totalOn, string caption&lt;b&gt;)&lt;br /&gt;&lt;/b&gt;These overloads separate the &lt;i&gt;&lt;b&gt;groupBy &lt;/b&gt;&lt;/i&gt;parameter into two: &lt;i&gt;&lt;b&gt;groupFrom &lt;/b&gt;&lt;/i&gt;and &lt;i&gt;&lt;b&gt;groupTo&lt;/b&gt;&lt;/i&gt;. By default, the &lt;b&gt;Subtotal &lt;/b&gt;method inserts a node row whenever the value of the &lt;i&gt;&lt;b&gt;groupBy &lt;/b&gt;or any previous column &lt;/i&gt;changes.&lt;br /&gt;For example, if you a row has the same value in the &amp;quot;City&amp;quot; column as the previous row, but a different value in&amp;nbsp; the &amp;quot;Country&amp;quot; column, then the &lt;b&gt;Subtotal&lt;/b&gt; method assumes the rows should be in different groups and inserts a new node row even though the value of the &lt;i&gt;&lt;b&gt;groupBy &lt;/b&gt;&lt;/i&gt;column is the same. These aggregates let you override that behavior and specify the range of columns that should be considered when identifying a group.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Outline Maintenance&lt;/h2&gt;
&lt;p&gt;So far we have discussed how to create outlines with trees and totals using the high-level &lt;b&gt;Subtotal &lt;/b&gt;method as well as lower-level &lt;b&gt;Rows.InsertNode &lt;/b&gt;and &lt;b&gt;Aggregate &lt;/b&gt;methods.&lt;/p&gt;
&lt;p&gt;At this point, it is important to remember that the outline tree is created based on the data, but is not bound to it in any way, and is not automatically maintained when there are changes to the grid or to the data.&lt;/p&gt;
&lt;p&gt;If the user modifies a value in the &amp;quot;ExtendedPrice&amp;quot; column for example, the subtotals will not be automatically updated. If the user sorts the grid, the data will be refreshed and the subtotals will disappear.&lt;/p&gt;
&lt;p&gt;There are two common ways to maintain the outlines:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Prevent the user from making any changes that would invalidate the outline. This is the easiest option. You would set the grid&amp;#39;s &lt;b&gt;AllowEditing&lt;/b&gt;, &lt;b&gt;AllowDragging&lt;/b&gt;, and &lt;b&gt;AllowSorting &lt;/b&gt;properties to false and prevent any changes that would affect the outline.&lt;/li&gt;
&lt;li&gt;Update the outline when there are changes to the data or to the grid. You would attach handlers to the grid&amp;#39;s &lt;b&gt;AfterDataRefresh&lt;/b&gt;, &lt;b&gt;AfterSort&lt;/b&gt;, and &lt;b&gt;AfterEdit &lt;/b&gt;events and re-generate the outline appropriately.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Option 2 is usually more interesting since it provides a quick and simple tool for dynamic data analysis. This approach is illustrated by the &lt;b&gt;Analyze &lt;/b&gt;sample provided with the &lt;b&gt;C1FlexGrid&lt;/b&gt;. The sample creates an initial outline and allows users to reorder the columns. When the column order changes, the sample automatically re-sorts the data and re-creates the outline. The user can easily create simple reports showing sales by country, by product, by salesperson, and so on.&lt;/p&gt;
&lt;h2&gt;Using the Node class&lt;/h2&gt;
&lt;p&gt;The &lt;b&gt;Node &lt;/b&gt;class provides a number of methods and properties that can be used to create and manage outline trees. Many of these methods and properties are based on the standard &lt;b&gt;TreeView &lt;/b&gt;object model,&amp;nbsp; so they should be familiar to most developers.&lt;/p&gt;
&lt;p&gt;To obtain a &lt;b&gt;Node &lt;/b&gt;object, you can either:&lt;/p&gt;
&lt;p&gt;Use the return value of the &lt;b&gt;Rows.InsertNode &lt;/b&gt;method:&lt;/p&gt;
&lt;pre&gt;var node = _flex.Rows.InsertNode(index, level);&lt;/pre&gt;
&lt;p&gt;Or you can retrieve the node for an existing row using the row&amp;#39;s &lt;b&gt;Node &lt;/b&gt;property:&lt;/p&gt;
&lt;pre&gt;var node = _flex.Rows[index].IsNode
    ? _flex.Rows[index].Node
    : null;&lt;/pre&gt;
&lt;p&gt;Either way, once you have a &lt;b&gt;Node &lt;/b&gt;object you can manipulate it using the following properties and methods:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Level&lt;/b&gt;: Gets or sets the node level in the outline tree.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Data&lt;/b&gt;: Gets or sets the value in the cell defined by &lt;b&gt;Node.Row &lt;/b&gt;and the &lt;b&gt;Tree.Column&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Image&lt;/b&gt;: Gets or sets the image in the cell defined by &lt;b&gt;Node.Row &lt;/b&gt;and the &lt;b&gt;Tree.Column&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Checked&lt;/b&gt;: Gets or sets the check state of the cell defined by &lt;b&gt;Node.Row &lt;/b&gt;and the &lt;b&gt;Tree.Column&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Collapsed/Expanded&lt;/b&gt;: Gets or sets the node&amp;#39;s collapsed/expanded state.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can also explore the outline structure using the following methods:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;GetCellRange()&lt;/b&gt;: Gets a CellRange object that described the range of rows that belong to this node.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Children&lt;/b&gt;: Gets the number of child nodes under this node.&lt;/li&gt;
&lt;li&gt;&amp;nbsp;&lt;b&gt;Nodes&lt;/b&gt;: Gets a node array containing this node&amp;#39;s child nodes.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;GetNode&lt;/b&gt;: Gets the node that has a given relationship to this node (parent, first child, next sibling, and so on).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The discussion above focused on bound scenarios, where the grid is attached to a data source that provides the data. You can also create trees and outlines in unbound scenarios. Things are actually somewhat simpler in this case, since you can turn any row into a node row by setting its &lt;b&gt;IsNode &lt;/b&gt;property to true.&lt;/p&gt;
&lt;p&gt;If the grid is unbound, it owns all the data that is displayed, and you do things that are not possible when a data source owns the data. For example, you can move nodes around the tree using the &lt;b&gt;Node.Move &lt;/b&gt;method as shown by the &lt;b&gt;TreeNode &lt;/b&gt;sample provided with the &lt;b&gt;C1FlexGrid&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;Using nodes in an unbound grid is very similar to using nodes in a regular &lt;b&gt;TreeView &lt;/b&gt;control.&lt;/p&gt;
&lt;h3&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.FlexGridTrees/6327.C1FlexGridOutlinesAndTrees.zip"&gt;Download Visual Studio Sample (C#)&lt;/a&gt;&lt;/h3&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.componentone.com/CS/aggbug.aspx?PostID=229604" width="1" height="1"&gt;</description><enclosure url="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.FlexGridTrees/6327.C1FlexGridOutlinesAndTrees.zip" length="15376" type="application/x-compressed" /><category domain="http://blogs.componentone.com/CS/blogs/windev/archive/tags/WinForms/default.aspx">WinForms</category><category domain="http://blogs.componentone.com/CS/blogs/windev/archive/tags/C1FlexGrid/default.aspx">C1FlexGrid</category></item><item><title>Scheduler Roadmap - Part II. WPF and Silverlight Schedulers: Comparing Features</title><link>http://blogs.componentone.com/CS/blogs/silverlight/archive/2010/03/03/scheduler-roadmap-part-ii-wpf-and-silverlight-schedulers-comparing-features.aspx</link><pubDate>Wed, 03 Mar 2010 00:35:00 GMT</pubDate><guid isPermaLink="false">6ffc9ae0-0270-4839-b826-46696419445e:229542</guid><dc:creator>C1_IrinaP</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;The next table shows the list of main controls, classes and features:&lt;/p&gt;
&lt;p&gt;
&lt;table cellpadding="0" cellspacing="0" border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;&lt;b&gt;Feature (control)&lt;/b&gt; &lt;/td&gt;
&lt;td valign="top"&gt;&lt;b&gt;Old WPF Scheduler&lt;/b&gt;&lt;/td&gt;
&lt;td valign="top"&gt;&lt;b&gt;Silverlight Scheduler&lt;/b&gt;&lt;/td&gt;
&lt;td valign="top"&gt;&lt;b&gt;New WPF Scheduler&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="4" valign="top"&gt;&lt;b&gt;Namespaces&lt;/b&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;C1.C1Schedule (business logic) &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;Main namespace for UI controls &lt;/td&gt;
&lt;td valign="top"&gt;C1.WPF.C1Schedule&lt;/td&gt;
&lt;td valign="top"&gt;C1.Silverlight.Schedule &lt;/td&gt;
&lt;td valign="top"&gt;C1.WPF.Schedule&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="4" valign="top"&gt;&lt;b&gt;Main controls&lt;/b&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;C1Scheduler &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;C1TimeSpanPicker &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;(uses C1.Silverlight.&lt;br /&gt;DateTimeEditors.&lt;br /&gt;C1TimeEditor) &lt;/td&gt;
&lt;td valign="top"&gt;(uses C1.WPF.&lt;br /&gt;DateTimeEditors.&lt;br /&gt;C1TimeEditor) &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;C1DateTimePicker &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;(uses C1.Silverlight.&lt;br /&gt;DateTimeEditors.&lt;br /&gt;C1DateTimePicker) &lt;/td&gt;
&lt;td valign="top"&gt;(uses C1.WPF.&lt;br /&gt;DateTimeEditors.&lt;br /&gt;C1DateTimePicker) &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;C1MonthCalendar &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;C1MultiMonthCalendar &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;planned for 2010 V2 release) &lt;/td&gt;
&lt;td valign="top"&gt;planned for 2010 V2 release) &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="4" valign="top"&gt;
&lt;p&gt;&lt;b&gt;Other controls and classes&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
&lt;p&gt;AppointmentsCoverPane&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
&lt;p&gt;AppointmentWrapPanel&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;&lt;b&gt;+ &lt;/b&gt;(the part of functionality implemented in the IntervalAppointment&lt;br /&gt;Presenter class&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;AutoDistributionGrid &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;C1BrushBuilder &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;C1SchedulerPresenter &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;C1SchedulerResources &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;C1SchedulerScrollBar &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;(used standard scrollbar) &lt;/td&gt;
&lt;td valign="top"&gt;(used standard scrollbar) &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;C1Window &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;&lt;b&gt;+ &lt;/b&gt;(in XBAP applications) &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;CalendarHelper class &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;EditAppointmentControl&lt;br /&gt;EditRecurrenceControl&lt;br /&gt;ShowRemindersControl &lt;/td&gt;
&lt;td valign="top"&gt;(implemented in xaml as a DataTemplate) &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;IntervalAppointment &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;IntervalAppointment&lt;br /&gt;Presenter &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;NestedPropertySetter &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;PilePanel &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;RecChoiceControl &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;SchedulerLocExtension &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;SelectFromListScene &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;VisualInterval &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;VisualIntervalGroup &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;VisualIntervalGroups&lt;br /&gt;Presenter &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;VisualIntervalPresenter &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;VisualIntervalsPresenter &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="4" valign="top"&gt;
&lt;p&gt;&lt;b&gt;Themes&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;Office 2007 themes &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;ul&gt;
&lt;li&gt;- Default&lt;/li&gt;
&lt;li&gt;- Blue&lt;/li&gt;
&lt;li&gt;- Black&lt;/li&gt;
&lt;li&gt;- Silver&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;ul&gt;
&lt;li&gt;- Default&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;ul&gt;
&lt;li&gt;- Default&lt;/li&gt;
&lt;li&gt;- Blue&lt;/li&gt;
&lt;li&gt;- Black&lt;/li&gt;
&lt;li&gt;- Silver&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
&lt;p&gt;Office 2003 themes&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;ul&gt;
&lt;li&gt;- Default&lt;/li&gt;
&lt;li&gt;- Blue&lt;/li&gt;
&lt;li&gt;- Classic&lt;/li&gt;
&lt;li&gt;- Olive&lt;/li&gt;
&lt;li&gt;- Royale&lt;/li&gt;
&lt;li&gt;- Silver&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;Silverlight toolkit themes &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;ul&gt;
&lt;li&gt;- BureauBlack&lt;/li&gt;
&lt;li&gt;- ExpressionDark&lt;/li&gt;
&lt;li&gt;- ExpressionLight&lt;/li&gt;
&lt;li&gt;- RainierOrange&lt;/li&gt;
&lt;li&gt;- ShinyBlue&lt;/li&gt;
&lt;li&gt;- WhistlerBlue&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;C1 themes &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;ul&gt;
&lt;li&gt;- Dusk Blue&lt;/li&gt;
&lt;li&gt;- Dusk Green&lt;/li&gt;
&lt;li&gt;- Media Player&lt;/li&gt;
&lt;li&gt;- Vista&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;ul&gt;
&lt;li&gt;- Dusk Blue&lt;/li&gt;
&lt;li&gt;- Dusk Green&lt;/li&gt;
&lt;li&gt;- Media Player&lt;/li&gt;
&lt;li&gt;- Vista&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="4" valign="top"&gt;&lt;strong&gt;Import/Export&lt;/strong&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;xml&lt;strong&gt; &lt;/strong&gt;&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;iCal &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;binary &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan="4" valign="top"&gt;&lt;b&gt;Supported data sources for AppointmentStorage and other storages&lt;/b&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;INotifyCollectionChanged (ObservableCollection) &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;IListSource &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;IList &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;IBindingList &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;IBindingListView &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;IEnumerable &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;ITypedList&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;C1.Silverlight.Data.&lt;br /&gt;DataTable&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;Setting data bindings from code and in xaml &lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td valign="top"&gt;
&lt;p align="center"&gt;&lt;b&gt;+&lt;/b&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;h3&gt;Silverlight Specific Distinctions&lt;/h3&gt;
&lt;p&gt;Silverlight platform doesn&amp;#39;t include some classes and features which are critical for the C1Scheduler control. The next table lists Silverlight-specific features implemented in C1 Studio for Silverlight and their WPF analogs used in WPF Schedulers:&lt;/p&gt;
&lt;table cellpadding="0" cellspacing="0" border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;&lt;b&gt;Feature (control)&lt;/b&gt; &lt;/td&gt;
&lt;td valign="top"&gt;&lt;b&gt;WPF analog&lt;/b&gt; &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;C1.Silverlight.Schedule.GroupedListBox and related classes (C1ItemsPresenter, C1ListBoxItem, etc.) &lt;/td&gt;
&lt;td valign="top"&gt;System.Windows.Controls.ListBox and related classes (ItemsPresenter, ListBoxItem, etc.) &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;C1.Silverlight.Schedule.RemindersListBox and RemindersListBoxItem&lt;b&gt;&lt;/b&gt; &lt;/td&gt;
&lt;td valign="top"&gt;System.Windows.Controls.ListView and ListViewItem &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;C1.Silverlight.C1UniformGrid&lt;/td&gt;
&lt;td align="top"&gt;System.Windows.Controls.Primitives.UniformGrid&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;C1.Silverlight.Data classes (DataTable, DataRow, DataRowView classes) &lt;/td&gt;
&lt;td valign="top"&gt;Corresponding ADO.Net classes &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;C1.Silverlight.C1Command&lt;/td&gt;
&lt;td valign="top"&gt;System.Windows.Input.RoutedCommand &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Please, let me know if you feel that I missed something important.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.componentone.com/CS/aggbug.aspx?PostID=229542" width="1" height="1"&gt;</description><category domain="http://blogs.componentone.com/CS/blogs/silverlight/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.componentone.com/CS/blogs/silverlight/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.componentone.com/CS/blogs/silverlight/archive/tags/C1Scheduler/default.aspx">C1Scheduler</category></item><item><title>Scheduler Roadmap - Part I</title><link>http://blogs.componentone.com/CS/blogs/silverlight/archive/2010/02/25/scheduler-roadmap-part-i.aspx</link><pubDate>Thu, 25 Feb 2010 17:02:00 GMT</pubDate><guid isPermaLink="false">6ffc9ae0-0270-4839-b826-46696419445e:229295</guid><dc:creator>C1_IrinaP</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;At first, I want to give you an overall picture of all Scheduler versions (legacy, current and future).&lt;/p&gt;
&lt;h3&gt;Available Versions&lt;/h3&gt;
&lt;p&gt;Currently we ship Scheduler controls for the next platforms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WinForms (&lt;a href="http://www.componentone.com/SuperProducts/ScheduleWinForms/"&gt;home page&lt;/a&gt;). C1.Win.C1Schedule.2.dll assembly includes C1Schedule and C1Calendar controls. It is built with .Net 2.0;&lt;/li&gt;
&lt;li&gt;ASP.Net (&lt;a href="http://www.componentone.com/SuperProducts/ScheduleASPNET/"&gt;home page&lt;/a&gt;, &lt;a href="http://demo.componentone.com/ASPNET/ControlExplorer/C1Schedule/VisualStyles.aspx"&gt;live demo&lt;/a&gt;). There are 2 versions. C1.Web.C1Schedule.2.dll is a legacy version built with .Net 2.0. The C1Schedule for .Net 3.5 is a part of C1.Web.UI.Controls.dll assembly. It will replace legacy version in the nearest year;&lt;/li&gt;
&lt;li&gt;WPF (&lt;a href="http://www.componentone.com/SuperProducts/ScheduleWPF/"&gt;home page&lt;/a&gt;, &lt;a href="http://download.componentone.com/pub/demo/wpf/ControlExplorer/ControlExplorer.xbap"&gt;live demo&lt;/a&gt;). C1.WPF.C1Schedule.dll assembly includes C1Scheduler, C1MonthCalendar, C1MultiMonthCalendar, C1DateTimePicker, C1TimeSpanPicker controls. It is built with .Net Framework 3.0;&lt;/li&gt;
&lt;li&gt;Silverlight 3 (&lt;a href="http://www.componentone.com/SuperProducts/SchedulerSilverlight/"&gt;home page&lt;/a&gt;, &lt;a href="http://demo.componentone.com/Silverlight/ControlExplorer/#C1Scheduler/Default%20Views"&gt;live demo&lt;/a&gt;). C1.Silverlight.Schedule.dll assembly contains C1Scheduler control. It uses controls from C1.Silverlight.dll, C1.Silverlight.Data.dll and C1.Silverlight.DateTimeEditors.dll assemblies.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All Schedulers share the same object model defined in C1.C1Schedule namespace. Actually, the most of that is represented by the shared code. So, if you know how to create Appointment from code in WinForms version, then you can be sure that you know how to do that in Silverlight version. &lt;/p&gt;
&lt;p&gt;All Schedulers are data-compatible. If you saved xml data&amp;nbsp;with WinForms Scheduler, you should be able to load this data&amp;nbsp;with WPF or Silverlight versions. If you have database with C1Scheduler data, you can use it with any Scheduler version.&lt;/p&gt;
&lt;h3&gt;Roadmap for 2010 V1&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;WinForms: new version built against .Net Framework 4.0 Client Profile (perhaps we&amp;#39;ll ship it after Microsoft releases VS 2010);&lt;/li&gt;
&lt;li&gt;Silverlight 4 version. It will be compatible with Silverlight 3 version;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;WPF: 2010 V1 release will contain 2 assemblies compatible with Silverlight version: C1.WPF.DateTimeEditors.dll and C1.WPF.Schedule.dll. &lt;br /&gt;You see, we tend to make our WPF and Silverlight studios compatible with each other. We share code between WPF and Silverlight versions and we want you to have this ability as well. In the future, these assemblies will go together with their Silverlight counterpart. 2010 V1 version is built against .Net Framework 3.5 Client Profile and has design-time support for VS 2008, VS 2010, Blend 2 and Blend 3.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Future Plans&lt;/h3&gt;
&lt;p&gt;For 2010 V2 release we are planning to add multi-month calendar control to Silverlight and new WPF versions. When it is ready, old WPF version will go into maintenance mode. Old WPF version will remain compatible with pure .Net 3.0. If your clients use Windows XP machines without .Net 3.5 installed, you can continue using this version.&lt;/p&gt;
&lt;p&gt;We haven&amp;#39;t decided yet, what Framework version will be supported by the new WPF Scheduler. Perhaps, we&amp;#39;ll move to .Net 4 when it is released, or will ship both .Net 3.5 and .Net 4 versions. Feel free to leave your feedback; we have time to take it into account.&lt;/p&gt;
&lt;p&gt;Next time I&amp;#39;m going to write about WPF and Silverlight versions in more details: distinctions, compatibility issues, etc... If you have questions - don&amp;#39;t hesitate to ask.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.componentone.com/CS/aggbug.aspx?PostID=229295" width="1" height="1"&gt;</description><category domain="http://blogs.componentone.com/CS/blogs/silverlight/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.componentone.com/CS/blogs/silverlight/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://blogs.componentone.com/CS/blogs/silverlight/archive/tags/C1Scheduler/default.aspx">C1Scheduler</category></item><item><title>Become an Expert Part 4: Adding Charts to Analyze Sales Data</title><link>http://blogs.componentone.com/CS/blogs/windev/archive/2010/02/17/BecomeAnExpertPart4.aspx</link><pubDate>Wed, 17 Feb 2010 15:50:00 GMT</pubDate><guid isPermaLink="false">6ffc9ae0-0270-4839-b826-46696419445e:228904</guid><dc:creator>C1_GregL</dc:creator><slash:comments>0</slash:comments><description>&lt;h2&gt;Part 4 Overview&lt;/h2&gt;
&lt;p&gt;In this series, we will create a Sales Management application to show how easily anyone can &amp;quot;Become an Expert&amp;quot;. Up to this point, we have created a sales data list using &lt;strong&gt;C1FlexGrid&lt;/strong&gt; (part of ComponentOne Studio for WinForms), as well as added exporting options including Excel, XML and PDF. We&amp;#39;ve also refashioned the application window to have the Microsoft Office look-and-feel using C1Ribbon.&lt;/p&gt;
&lt;p&gt;*See &lt;a href="http://helpcentral.componentone.com/CS/blogs/windev/archive/2010/01/29/BecomeAnExpertPart1.aspx"&gt;Part One&lt;/a&gt;, &lt;a href="http://helpcentral.componentone.com/CS/blogs/windev/archive/2010/02/05/BecomeAnExpertPart2.aspx"&gt;Part&amp;nbsp;Two&lt;/a&gt;, and &lt;a href="http://helpcentral.componentone.com/CS/blogs/windev/archive/2010/02/09/BecomeAnExpertPart3.aspx"&gt;Part Three&lt;/a&gt; before continuing.&lt;/p&gt;
&lt;p&gt;Now in part 4, we will use the &lt;strong&gt;C1Chart&lt;/strong&gt; control (also part of Studio for WinForms) to display different kinds of charts. The data from our &lt;strong&gt;C1FlexGrid&lt;/strong&gt;, will be bound and displayed in the &lt;strong&gt;C1Chart&lt;/strong&gt; control.&lt;/p&gt;
&lt;p&gt;So let&amp;#39;s continue!&lt;/p&gt;
&lt;h2&gt;Application Set up&lt;/h2&gt;
&lt;p&gt;We will use the &lt;strong&gt;C1Chart&lt;/strong&gt; control to display charts. Just like before, we need to add the control to the toolbox. Right click on the toolbox and display &amp;quot;Choose Toolbox Items&amp;quot;. For details please refer to &lt;a href="http://helpcentral.componentone.com/CS/blogs/windev/archive/2010/01/29/BecomeAnExpertPart1.aspx"&gt;Part 1&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;First, add a new Form to the project. Change the Form to inherit the&lt;strong&gt; C1RibbonForm&lt;/strong&gt; class to match it with the application we created in Part 3. Set the form title and other properties. &lt;/p&gt;
&lt;h2&gt;Creating another Ribbon Interface&lt;/h2&gt;
&lt;p&gt;We need to create another Ribbon interface for the new form using the&lt;strong&gt; C1Ribbon&lt;/strong&gt; control.&lt;/p&gt;
&lt;p&gt;On the Home tab create three RibbonGroups:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/8345.Ribbon_5F00_chartTab.png" border="0" alt="" /&gt;&lt;/p&gt;
&lt;h2&gt;Home Tab&lt;/h2&gt;
&lt;p&gt;Category&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Select Category combobox&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Chart Type combobox&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Display Settings&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;3D Effect checkbox&lt;/li&gt;
&lt;li&gt;Stacked checkbox&lt;/li&gt;
&lt;li&gt;Change Axis checkbox&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Refer to &lt;a href="http://helpcentral.componentone.com/CS/blogs/windev/archive/2010/02/09/BecomeAnExpertPart3.aspx"&gt;Part Three&lt;/a&gt;, implementing the Ribbon Interface, for more information on setting up the ribbon.&lt;/p&gt;
&lt;h2&gt;Display settings for C1Chart&lt;/h2&gt;
&lt;p&gt;Now let&amp;#39;s add the &lt;strong&gt;C1Chart&lt;/strong&gt; control to the form. Drag and drop the &lt;strong&gt;C1Chart&lt;/strong&gt; control onto the new form under the ribbon. Dock the &lt;strong&gt;C1Chart&lt;/strong&gt; control to fill the entire form. The display area for the chart is created!&lt;/p&gt;
&lt;p&gt;The next step is to create a BindingSource to use as the data source for the &lt;strong&gt;C1Chart&lt;/strong&gt; control. Place a BindingSource object on the form, named bindingSource1.&lt;/p&gt;
&lt;p&gt;We will create a data class in the project called SalesData and place this in a class file called SalesDataList.cs. Members of this data class will be &amp;quot;Date&amp;quot;, &amp;quot;Category&amp;quot;, &amp;quot;Proceeds&amp;quot;, &amp;quot;Payments&amp;quot; and &amp;quot;GrossMargin&amp;quot;. Members can be in the form of properties or public variables (Note: In the sample, all the members are properties).&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;p&gt;public class SalesData&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public SalesData()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private DateTime _date = DateTime.Now;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public DateTime Date&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return this._date; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set { this._date = value; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private string _categoryCode = string.Empty;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string CategoryCode&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return this._categoryCode; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set { this._categoryCode = value; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private int _proceeds = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int Proceeds&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return this._proceeds; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set { this._proceeds = value; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private int _payments = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int Payments&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return this._payments; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set { this._payments = value; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private int _grossMargin = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int GrossMargin&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return this._grossMargin; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; set { this._grossMargin = value; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Set this data class as the data source of the BindingSource we just added to the form above (Note: An array has to be set in the data source, so a List is used).&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;p&gt;public class SalesDataList : List&amp;lt;SalesData&amp;gt;&lt;/p&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;Now let&amp;#39;s set more specifics for our chart. Launch the chart Wizard from the &lt;strong&gt;C1Chart Tasks&lt;/strong&gt; (the smart tag).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/3542.displaywizard.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/3542.displaywizard.png" alt="Display Wizard" border="0" style="border:0;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Follow these settings in the wizard:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Select chart type&lt;br /&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/3058.chartwizard_5F00_type.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/3058.chartwizard_5F00_type.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Set the captions for the chart Header, X Axis and Y Axis&lt;br /&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/8420.chartwizard_5F00_setup.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/8420.chartwizard_5F00_setup.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Select the data source to be displayed in the &lt;strong&gt;C1Chart&lt;/strong&gt; control. Select the bindingSource1 BindingSource created earlier.&lt;br /&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/4682.chartwizard_5F00_data.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/4682.chartwizard_5F00_data.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Select which fields to use for data binding for three each of the three data series (Proceeds, Payments and GrossMargin). Each data series&amp;#39; X values will be bound to the Date field.&lt;br /&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/5287.chartwizard_5F00_series.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/5287.chartwizard_5F00_series.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That&amp;#39;s it! Click Finish and the chart display settings are complete.&lt;/p&gt;
&lt;h2&gt;Binding C1FlexGrid data to C1Chart&lt;/h2&gt;
&lt;p&gt;We will bind the &lt;strong&gt;C1FlexGrid&lt;/strong&gt; data to the &lt;strong&gt;C1Chart&lt;/strong&gt; using the SalesDataList created earlier. The SalesData class is populated from the data displayed in &lt;strong&gt;C1FlexGrid&lt;/strong&gt; on the main form. The SalesDataList class is generated as an array to be fed into the &lt;strong&gt;C1Chart&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;This property below will be used for the get/set of our SalesData class. Add this property to the chart Form&amp;#39;s (Form2) code behind. &lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;p&gt;private SalesDataList _salesDataList = null;&lt;br /&gt;public SalesDataList SalesDataList&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return this._salesDataList; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set { this._salesDataList = value; }&lt;br /&gt;}&lt;/p&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;
&lt;p&gt;We will also need a category property for our Form2 class. This property will store the selected category on which to chart data from.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;private List&amp;lt;DictionaryEntry&amp;gt; category;&lt;br /&gt;public List&amp;lt;DictionaryEntry&amp;gt; Category&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;get { return this.category; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.category = value;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.initializeCategory();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;}&lt;/code&gt; &lt;/p&gt;
&lt;p&gt;The initializeCategory method should fill the Ribbon combobox with all possible categories.&lt;/p&gt;
&lt;p&gt;Now we need to make a few adjustments to the main form. First, add a Chart button to the ribbon, and in its click event, we need to launch a new chart form.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/2526.application2.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/2526.application2.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;code&gt;
&lt;p&gt;Form2 chartForm = new Form2();&lt;br /&gt;chartForm.SalesDataList = this.createDataList();&lt;br /&gt;chartForm.Category = this.category;&lt;br /&gt;chartForm.ShowDialog();&lt;/p&gt;
&lt;/code&gt;
&lt;p&gt;We create the SalesDataList pulling data from the &lt;strong&gt;C1FlexGrid&lt;/strong&gt; using this method:&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;&lt;code&gt;private SalesDataList createDataList()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SalesDataList list = new SalesDataList();&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (int i = 1; i &amp;lt; this.c1FlexGrid1.Rows.Count; i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (this.c1FlexGrid1[i, 0] != null&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;amp;&amp;amp; (this.c1FlexGrid1[i, 2] != null&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;|| this.c1FlexGrid1[i, 3] != null))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SalesData data = new SalesData();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data.Date = DateTime.Parse(this.c1FlexGrid1[i, 0].ToString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data.CategoryCode = this.c1FlexGrid1[i, 1] == null ? &amp;quot;0&amp;quot; : this.c1FlexGrid1[i, 1].ToString();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data.Proceeds = this.c1FlexGrid1[i, 2] == null ? 0 : int.Parse(this.c1FlexGrid1[i, 2].ToString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;data.Payments = this.c1FlexGrid1[i, 3] == null ? 0 : int.Parse(this.c1FlexGrid1[i, 3].ToString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; data.GrossMargin = this.c1FlexGrid1[i, 4] == null ? 0 : int.Parse(this.c1FlexGrid1[i, 4].ToString());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;list.Add(data);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return list;&lt;br /&gt;}&lt;/code&gt;
&lt;p&gt;Here, we declare a new SalesDataList and cycle through the &lt;strong&gt;C1FlexGrid&lt;/strong&gt; rows collection filling in the data (so long as it&amp;#39;s not null).&lt;/p&gt;
&lt;p&gt;Back on Form2, we set the SalesDataList as the data source of the BindingSource.&lt;/p&gt;
&lt;code&gt;
&lt;p&gt;private void setDataSource(string categoryCode)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.bindingSource1.DataSource = this._salesDataList.SelectCategory(categoryCode);&lt;/p&gt;
&lt;/code&gt;
&lt;p&gt;Finally, we will show the data based on the category that has been selected. The following code displays only the desired category&amp;#39;s data from the data source.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;public SalesDataList SelectCategory(string code)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SalesDataList value = new SalesDataList();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;SalesData&amp;gt; list = this.FindAll(delegate(SalesData data)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (data.CategoryCode == code);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; value.AddRange(list);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return value;&lt;br /&gt;}&lt;/code&gt;
&lt;p&gt;Now when we run the application, our chart form displays data only from the selected category.&lt;/p&gt;
&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/7725.chart1.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/7725.chart1.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Modifying the chart type &lt;/h2&gt;
&lt;p&gt;The &lt;strong&gt;C1Chart&lt;/strong&gt; control supports all popular chart types. For this application, will be using the Bar and Line chart types.&lt;/p&gt;
&lt;p&gt;We will use some simple code with the Chart Type combobox in the Ribbon to select the chart type. We will add two possible values to the combobox: Line and Bar Graph.&lt;/p&gt;
&lt;p&gt;The Ribbon combobox&amp;#39;s SelectedIndexChanged event will capture when the user changes chart type.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;p&gt;if (this.ribbonComboBox2.SelectedIndex == 0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.c1Chart1.ChartGroups[0].ChartType = Chart2DTypeEnum.XYPlot;&lt;br /&gt;else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.c1Chart1.ChartGroups[0].ChartType = Chart2DTypeEnum.Bar;&lt;/p&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Here we are simply setting the ChartType property to in the &lt;strong&gt;C1Chart&lt;/strong&gt; control. The Chart2DTypeEnum is set to Chart2DTypeEnum.XYPlot for a line chart and Chart2DTypeEnum.Bar for a bar chart.&lt;/p&gt;
&lt;p&gt;When we select Bar Graph we will notice the chart displays this type.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/4113.chart2.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/4113.chart2.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;All it takes is changing one property to completely change the chart type with &lt;strong&gt;C1Chart&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;Printing C1Chart&lt;/h2&gt;
&lt;p&gt;Now that we have been able to display different types of charts, we will add the feature to print them. We just need to call a simple print method in &lt;strong&gt;C1Chart&lt;/strong&gt; control for this.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;p&gt;this.c1Chart1.PrintChart();&lt;/p&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;In our sample, we&amp;#39;ve added a Print button to the Miscellaneous RibbonTab in our chart form. When this button is clicked, we call the PrintChart method and the following print dialog is displayed:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/1488.printchart.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/1488.printchart.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Modifying Other Chart Properties&lt;/h2&gt;
&lt;p&gt;Let&amp;#39;s extend the users options for viewing charted data in &lt;strong&gt;C1Chart&lt;/strong&gt;. The &lt;strong&gt;C1Chart&lt;/strong&gt; control also contains 3D effects and stacked charts. We will include these in the display features available on the UI. &lt;/p&gt;
&lt;p&gt;The Use3D property is set for the 3D effect feature. Similarly, the Stacked property is used for the stacked display in a chart. Set the following properties when the user checks or unchecks the 3D Effect and Stacked checkboxes we created earlier.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;p&gt;this.c1Chart1.ChartGroups[0].Use3D = &amp;quot;true/false&amp;quot;;&lt;br /&gt;this.c1Chart1.ChartGroups[0].Stacked = &amp;quot;true/false&amp;quot;;&lt;/p&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/5658.chart_5F00_3d.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/5658.chart_5F00_3d.png" alt="Chart Display (3D)" border="0" style="border:0;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/2022.chart_5F00_stacked.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/2022.chart_5F00_stacked.png" alt="Chart Display (Stacked)" border="0" style="border:0;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As you can see, we get a completely different look for the chart just by easily setting these couple properties. &lt;/p&gt;
&lt;p&gt;Finally, let&amp;#39;s invert the X and Y axes of the chart. We just need to set the Inverted property to true for the ChartArea. &lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;p&gt;this.c1Chart1.ChartArea.Inverted = &amp;quot;true/false&amp;quot;;&lt;/p&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/0882.chart_5F00_inverted.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/0882.chart_5F00_inverted.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In addition to changing the chart type with just one property, we can also modify other chart settings with only a few properties.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;In this section we have charted data from our &lt;strong&gt;C1FlexGrid&lt;/strong&gt; control using &lt;strong&gt;C1Chart&lt;/strong&gt;. Data binding was done through some simple coding and we were able to integrate the features of each control into our application. We further modified many chart display settings using only a few simple properties. &lt;/p&gt;
&lt;p&gt;In part 5 we will use more features of &lt;strong&gt;C1Chart&lt;/strong&gt; to further improve our application by integrating it with other controls.&lt;/p&gt;
&lt;h2&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/5280.Part4.zip"&gt;Download Part 4 Sample Project&lt;/a&gt;&lt;/h2&gt;
&lt;h2&gt;Points to Remember&lt;/h2&gt;
&lt;p&gt;This application has been created in Visual Studio 2008 and uses SQL Server 2005 or higher. Installation of .NET Framework 3.5 is a prerequisite for running the sample application.&lt;/p&gt;
&lt;h2&gt;Acknowledgements&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Article copyright &amp;copy; 2009&amp;nbsp;Shogo Takayama&amp;nbsp;＆ Shoeisha Co., Ltd. http://www.shoeisha.co.jp/ &lt;/li&gt;
&lt;li&gt;&lt;a href="http://codezine.jp/"&gt;http://codezine.jp/&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;These contents were made by GrapeCity inc., Japan. &lt;a href="http://www.grapecity.com/japan/"&gt;http://www.grapecity.com/japan/&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Translated by Vidhi Kapoor (GrapeCity India Pvt. Ltd.)&lt;/li&gt;
&lt;li&gt;Edited by Greg Lutz (ComponentOne)&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.componentone.com/CS/aggbug.aspx?PostID=228904" width="1" height="1"&gt;</description><category domain="http://blogs.componentone.com/CS/blogs/windev/archive/tags/WinForms/default.aspx">WinForms</category><category domain="http://blogs.componentone.com/CS/blogs/windev/archive/tags/C1FlexGrid/default.aspx">C1FlexGrid</category><category domain="http://blogs.componentone.com/CS/blogs/windev/archive/tags/C1Chart/default.aspx">C1Chart</category><category domain="http://blogs.componentone.com/CS/blogs/windev/archive/tags/Become+an+Expert/default.aspx">Become an Expert</category><category domain="http://blogs.componentone.com/CS/blogs/windev/archive/tags/C1Ribbon/default.aspx">C1Ribbon</category></item><item><title>Migrating to Palomino: Navigation Controls</title><link>http://blogs.componentone.com/CS/blogs/webdev/archive/2010/02/12/migrating-to-palomino-navigation-controls.aspx</link><pubDate>Fri, 12 Feb 2010 15:22:00 GMT</pubDate><guid isPermaLink="false">6ffc9ae0-0270-4839-b826-46696419445e:228697</guid><dc:creator>C1_ChrisB</dc:creator><slash:comments>0</slash:comments><description>&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Recently, ComponentOne has added several new controls to Studio for ASP.NET&amp;rsquo;s lineup. These new ASP.NET controls, codenamed Palomino, include the &lt;b&gt;C1Gridview&lt;/b&gt;, &lt;b&gt;C1ComboBox&lt;/b&gt;, &lt;b&gt;C1FormDecorator&lt;/b&gt;, &lt;b&gt;C1MultiPage&lt;/b&gt;, and more. They have been built from the ground up to take full advantage of the Web&amp;rsquo;s most promising technologies like 
AJAX, CSS, XHTML, and so on. The Palomino lineup also offers a rich, client-side object model to meet the demands of today&amp;rsquo;s ASP.NET developers.&lt;/p&gt;
&lt;p&gt;In the months to come, the Palomino controls will  be replacing their older counterparts entirely, as these controls enter Legacy status. This may sound problematic to some, but there is no need to worry as this article will demonstrate how to migrate some of our older ASP.NET components, specifically those from the &lt;b&gt;C1WebCommand&lt;/b&gt; assembly, to their newer Palomino counterparts. For those unfamiliar with the &lt;b&gt;C1WebCommand&lt;/b&gt; controls, these include the&lt;b&gt; C1WebMenu&lt;/b&gt;, &lt;b&gt;C1WebTreeView&lt;/b&gt;, &lt;b&gt;C1WebTabStrip&lt;/b&gt;, &lt;b&gt;C1WebTopicBar&lt;/b&gt;, and 
the &lt;b&gt;C1WebToolBar&lt;/b&gt;; although, the focus will be on just the first four of the &lt;b&gt;C1WebCommand&lt;/b&gt; controls mentioned.&lt;/p&gt;
&lt;h2&gt;Prerequisites&lt;/h2&gt;
&lt;p&gt;For this tutorial, you will need to download ComponentOne Studio for ASP.NET and the WebCommand_Starter sample application. A free 30-day trial and yearly subscriptions of ComponentOne Studio for ASP.NET are available from the ComponentOne website.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a target="_blank" href="http://www.componentone.com/SuperProducts/StudioASPNET/"&gt;Download free trial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Download WebCommand_Starter Sample Application: (Please visit the site to view this media)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Getting Started&lt;/h2&gt;
&lt;p&gt;
Open the sample application in Microsoft Visual Studio 2008, and complete the following steps:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Drag-and-drop a ScriptManager from Visual Studio&amp;rsquo;s Toolbox to the form. The ScriptManager should be the first control within the  tag of your page.
&lt;/li&gt;
&lt;li&gt;Add the necessary references to the sample by clicking by going to Project | Add Reference and browse to C:\Program Files\ComponentOne\Studio for ASP.NET\bin\. The following assemblies require project references:
&lt;ul&gt;
&lt;li&gt;C1.Web.UI.3.dll&lt;/li&gt;
&lt;li&gt;C1.Web.UI.3.Controls.3.dll&lt;/li&gt;
&lt;li&gt;C1.Web.UI.3.Design.dll&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
*Please note that the assemblies may be located in the following file path: &lt;b&gt;C:\Program Files\ComponentOne Studio.NET 2.0\ bin\&lt;/b&gt;. Also note that there are two versions of the Web.UI assemblies; one that targets the .Net Framework 2x and one that targets the .Net Framework 3x.
&lt;/p&gt;
&lt;p&gt;
Directly below the Page directive, add the following Register directives:&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;
&amp;lt;%@ Register Assembly=&amp;quot;C1.Web.UI.Controls.3&amp;quot; Namespace=&amp;quot;C1.Web.UI.Controls.C1TreeView&amp;quot;    TagPrefix=&amp;quot;cc4&amp;quot; %&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;
&amp;lt;%@ Register Assembly=&amp;quot;C1.Web.UI.Controls.3&amp;quot; Namespace=&amp;quot;C1.Web.UI.Controls.C1NavPanel&amp;quot;    TagPrefix=&amp;quot;cc3&amp;quot; %&amp;gt;&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;%@ Register Assembly=&amp;quot;C1.Web.UI.Controls.3&amp;quot; Namespace=&amp;quot;C1.Web.UI.Controls.C1Menu&amp;quot;    TagPrefix=&amp;quot;cc2&amp;quot; %&amp;gt;&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;%@ Register Assembly=&amp;quot;C1.Web.UI.Controls.3&amp;quot; Namespace=&amp;quot;C1.Web.UI.Controls.C1TabControl&amp;quot;    TagPrefix=&amp;quot;cc1&amp;quot; %&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;
You will notice that there is a directive for each of the new controls, while using the &lt;b&gt;C1WebCommand&lt;/b&gt; controls required only a single directive. At this point, start the web application; the &lt;b&gt;C1WebTabStrip&lt;/b&gt; will render with a separate tab for the &lt;b&gt;C1WebMenu&lt;/b&gt;, &lt;b&gt;C1WebTreeView&lt;/b&gt;, and the &lt;b&gt;C1WebTopicBar&lt;/b&gt; controls.&lt;/p&gt;
&lt;p&gt;
Now, let&amp;rsquo;s take a look at the controls individually and how to migrate each to its Palomino equivalent, starting with the &lt;b&gt;C1WebTabStrip&lt;/b&gt;.&lt;/p&gt;
&lt;h2&gt;
C1WebTabStrip to C1TabControl&lt;/h2&gt;
&lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/2474.0.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/2474.0.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
The &lt;b&gt;C1TabControl&lt;/b&gt; is very similar to the &lt;b&gt;C1WebTabStrip&lt;/b&gt;, but is 
significantly more powerful, allowing developers to host full pages of content 
within the control. The &lt;b&gt;C1WebTabStrip&lt;/b&gt; begins on Line 29 of the 
Default.aspx file&amp;rsquo;s markup and is denoted by a &amp;lt;!--BEGIN C1TABCONTROL--&amp;gt; 
comment tag. Notice that the &lt;b&gt;C1WebTabStip&lt;/b&gt;&amp;rsquo;s markup is clustered and 
difficult to read; this is because the the styling of the &lt;b&gt;C1WebTabStrip&lt;/b&gt;, 
and the other &lt;b&gt;C1WebCommand&lt;/b&gt; controls, is implemented from within the 
control itself. Now, locate the &amp;lt;!--BEGIN C1TABCONTROL--&amp;gt; comment tag, and 
paste the following markup directly beneath the comment:&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;
&amp;lt;cc1:C1TabControl ID=&amp;quot;C1TabControl1&amp;quot; runat=&amp;quot;server&amp;quot; Height=&amp;quot;444px&amp;quot; Width=&amp;quot;722px&amp;quot; VisualStylePath=&amp;quot;~/C1WebControls/VisualStyles&amp;quot; UseEmbeddedVisualStyles=&amp;quot;True&amp;quot; VisualStyle=&amp;quot;ArcticFox&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    &amp;lt;TabPages&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;        &amp;lt;cc1:C1TabPage ID=&amp;quot;C1TabPage1&amp;quot; runat=&amp;quot;server&amp;quot; Text=&amp;quot;C1Menu&amp;quot; AutoSize=&amp;quot;False&amp;quot; ToolTip=&amp;quot;C1Menu&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;            &amp;lt;!--BEGIN C1MENU--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;            &amp;lt;!--END C1MENU--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;        &amp;lt;/cc1:C1TabPage&amp;gt;&lt;br /&gt;&amp;nbsp;					&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;        &amp;lt;cc1:C1TabPage ID=&amp;quot;C1TabPage2&amp;quot; runat=&amp;quot;server&amp;quot; Text=&amp;quot;C1TreeView&amp;quot; AutoSize=&amp;quot;False&amp;quot; ToolTip=&amp;quot;C1TreeView&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;        &amp;lt;!--BEGIN C1TREEVIEW--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;        &amp;lt;!--END C1TREEVIEW--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/cc1:C1TabPage&amp;gt;&lt;br /&gt;&amp;nbsp;					&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;        &amp;lt;cc1:C1TabPage ID=&amp;quot;C1TabPage3&amp;quot; runat=&amp;quot;server&amp;quot; Text=&amp;quot;C1NavPanel&amp;quot; AutoSize=&amp;quot;False&amp;quot; ToolTip=&amp;quot;C1NavPanel&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;        &amp;lt;!--BEGIN C1NAVPANEL--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;        &amp;lt;!--END C1NAVPANEL--&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;        &amp;lt;/cc1:C1TabPage&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    &amp;lt;/TabPages&amp;gt;&lt;br /&gt;&amp;lt;/cc1:C1TabControl&amp;gt;
&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;
This markup will create an instance of the&lt;b&gt; C1TabControl&lt;/b&gt; that can be seen below:&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/5861.1.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/5861.1.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you take a moment to compare the &lt;b&gt;C1TabControl&lt;/b&gt;&amp;rsquo;s markup to the &lt;b&gt;C1WebTabStrip&lt;/b&gt;&amp;rsquo;s, you should notice that the &lt;b&gt;C1TabControl&lt;/b&gt; uses more organized and significantly less markup than its predecessor. At this point, the &lt;b&gt;C1TabControl&lt;/b&gt; that you just created should seem very similar to the pre-existing &lt;b&gt;C1WebTabStrip&lt;/b&gt;. Before we continue, let&amp;rsquo;s change the &lt;b&gt;C1TabStrip&lt;/b&gt;&amp;rsquo;s VisualStyle to Vista, one of the five themes include with ComponentOne&amp;rsquo;s Studio for ASP.NET. This can be done be going to Properties | VisualStyle and selecting Vista from the drop-down. Now let&amp;rsquo;s take a look at some of the advancements that the &lt;b&gt;C1TabControl&lt;/b&gt; introduces.&lt;/p&gt;
&lt;p&gt;
One of the new features that the &lt;b&gt;C1TabControl&lt;/b&gt; introduces is the ability 
to change the orientation of the &lt;b&gt;C1TabControl&lt;/b&gt; by changing its Direction 
property. In this example, we will change the orientation of the 
&lt;b&gt;C1TabControl&lt;/b&gt; to Left, by going to Properties | Direction and selecting 
Left. Another new feature of the &lt;b&gt;C1TabControl&lt;/b&gt; is its ability to host 
URL&amp;rsquo;s. Let&amp;rsquo;s implement this functionality now; please paste the following markup 
above the &amp;lt;/TabPages&amp;gt; tag:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&amp;lt;cc1:C1TabPage ContentUrl=&amp;quot;http://www.componentone.com&amp;quot; Text=&amp;quot;ComponentOne&amp;quot; ToolTip=&amp;quot;Welcome to ComponentOne&amp;quot; /&amp;gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;

&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;
If you run the application and select the ComponentOne tab, you should see the ComponentOne website hosted by the &lt;b&gt;C1TabControl&lt;/b&gt; itself. Another new feature of the &lt;b&gt;C1TabControl&lt;/b&gt;, and some other Palomino controls, is the addition of Animation and Transition effects. To see these effects in action, please paste the following into the &lt;b&gt;C1TabControl&lt;/b&gt;&amp;rsquo;s beginning markup tag:
&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;
Animation=&amp;quot;SlideBottom&amp;quot; Duration=&amp;quot;1000&amp;quot; Easing=&amp;quot;EaseOutExpo&amp;quot;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;
This small amount of markup will add a one-second long animation and transition effects to the &lt;b&gt;C1TabControl&lt;/b&gt; each time its tab changes. Other new features of the &lt;b&gt;C1TabControl&lt;/b&gt; include multi-row, scrolling, and validation. Before we move on, run the application; you should see the older version of the &lt;b&gt;C1WebTabStrip&lt;/b&gt;, and below it, the more professional looking &lt;b&gt;C1TabControl&lt;/b&gt; that should render similar to the following image:&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/1524.2.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/1524.2.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;C1WebMenu to C1Menu&lt;/h2&gt;
&lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/3157.3.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/3157.3.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
The &lt;b&gt;C1Menu &lt;/b&gt;control and &lt;b&gt;C1WebMenu&lt;/b&gt; control are very similar 
conceptually, but the &lt;b&gt;C1Menu&lt;/b&gt; control allows developers to add stylish and 
professional looking menus to their pages that surpass the &lt;b&gt;C1WebMenu&lt;/b&gt;. The 
&lt;b&gt;C1WebMenu&lt;/b&gt; begins on Line 47 of the Default.aspx file&amp;rsquo;s markup and is 
denoted by a &amp;lt;!--BEGIN C1WEBMENU--&amp;gt; comment tag. Now, scroll down to the 
&amp;lt;!--BEGIN C1MENU--&amp;gt; comment tag, and paste the following markup directly 
below the comment:
&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;&amp;lt;cc2:C1Menu ID=&amp;quot;C1Menu1&amp;quot; runat=&amp;quot;server&amp;quot; Width=&amp;quot;350px&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Items&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc2:C1MenuItem Text=&amp;quot;Root Item1&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Items&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc2:C1MenuItem Text=&amp;quot;Root Item3&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Items&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc2:C1MenuItem Text=&amp;quot;Root Item6&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc2:C1MenuItem Text=&amp;quot;Root Item7&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc2:C1MenuItem Text=&amp;quot;Root Item8&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Items&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/cc2:C1MenuItem&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc2:C1MenuItem Text=&amp;quot;Root Item4&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc2:C1MenuItem Text=&amp;quot;Root Item5&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Items&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/cc2:C1MenuItem&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc2:C1MenuItemSeparator /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc2:C1MenuItem Text=&amp;quot;Root Item2&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Items&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc2:C1MenuItem Text=&amp;quot;Root Item9&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc2:C1MenuItem Text=&amp;quot;Root Item10&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc2:C1MenuItem Text=&amp;quot;Root Item11&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Items&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/cc2:C1MenuItem&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;cc2:C1MenuItemSeparator /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;lt;cc2:C1MenuItem Text=&amp;quot;ComponentOne&amp;quot; NavigateUrl=&amp;quot;http://www.componentone.com&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Items&amp;gt;&lt;br /&gt;&amp;lt;/cc2:C1Menu&amp;gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/5342.4.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/5342.4.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now that we have the &lt;b&gt;C1Menu&lt;/b&gt; on the Page, let&amp;rsquo;s look at some of the control&amp;rsquo;s features that distinguish it from the &lt;b&gt;C1WebMenu&lt;/b&gt;. The first property to change is the Orientation property. The Orientation property, which has a default value of Horizontal, will determine whether the menu is rendered horizontally or vertically. In this sample, change the Orientation property to Vertical; this can be done through the properties menu, markup, or code. Another new feature that the &lt;b&gt;C1Menu&lt;/b&gt; introduces is the ClickToOpen property. The ClickToOpen property, as it suggests, is a Boolean property that determines whether or not the end-user must click on the menu item to view its children; the default value of this property is False and the &lt;b&gt;C1Menu&lt;/b&gt; will open when hovering over it items. Change the ClickToOpen property to True so that the &lt;b&gt;C1Menu&lt;/b&gt; in this web application behaves similar to the native menus in Window&amp;rsquo;s operating systems. At this point, run the web application; the&lt;b&gt; C1Menu&lt;/b&gt; should look similar to the image below:
&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/7612.5.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/7612.5.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now it&amp;rsquo;s time to use the &lt;b&gt;C1Menu&lt;/b&gt; control as the context menu of an ASP.NET 
TextBox. To do this, paste the following markup below the &amp;lt;!--END 
C1TABCONTROL--&amp;gt; tag:
&lt;/p&gt;
&lt;p&gt;
&lt;code&gt; &amp;nbsp; &amp;lt;br /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;asp:Textbox runat=&amp;quot;server&amp;quot; ID=&amp;quot;TextBox1&amp;quot; Height=&amp;quot;28&amp;quot; Width=&amp;quot;350&amp;quot; Text=&amp;quot;Right-click to display the C1Menu as a context menu.&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc2:C1Menu ID=&amp;quot;C1Menu2&amp;quot; runat=&amp;quot;server&amp;quot; Width=&amp;quot;243px&amp;quot; VisualStyle=&amp;quot;Office2007Blue&amp;quot; ContextMenu=&amp;quot;True&amp;quot; ContextElementID=&amp;quot;TextBox1&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Items&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc2:C1MenuItem Text=&amp;quot;Root Item1&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Items&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc2:C1MenuItem Text=&amp;quot;Root Item3&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Items&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc2:C1MenuItem Text=&amp;quot;Root Item6&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc2:C1MenuItem Text=&amp;quot;Root Item7&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc2:C1MenuItem Text=&amp;quot;Root Item8&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Items&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/cc2:C1MenuItem&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc2:C1MenuItem Text=&amp;quot;Root Item4&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc2:C1MenuItem Text=&amp;quot;Root Item5&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Items&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/cc2:C1MenuItem&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc2:C1MenuItemSeparator /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc2:C1MenuItem Text=&amp;quot;Root Item2&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Items&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc2:C1MenuItem Text=&amp;quot;Root Item9&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc2:C1MenuItem Text=&amp;quot;Root Item10&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc2:C1MenuItem Text=&amp;quot;Root Item11&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Items&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/cc2:C1MenuItem&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc2:C1MenuItemSeparator /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc2:C1MenuItem Text=&amp;quot;ComponentOne&amp;quot; NavigateUrl=&amp;quot;http://www.componentone.com&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Items&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/cc2:C1Menu&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;
Now, run the application, locate the newly added TextBox control, and right-click the TextBox; the result should be similar to the following image:
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/2350.6.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/2350.6.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
Notice the following pieces of the &lt;b&gt;C1Menu&lt;/b&gt;&amp;rsquo;s markup in this instance: ContextMenu=&amp;quot;True&amp;quot; and ContextElementID=&amp;rdquo;TextBox1&amp;rdquo;. The ContextMenu property is a Boolean property used to determine if the control should to be used as a context menu. If the ContextMenu property is set to True, the style of the &lt;b&gt;C1Menu&lt;/b&gt; will automatically render itself similar to a context menu in Windows Vista. The ContextElementID property indicates the control that the &lt;b&gt;C1Menu&lt;/b&gt; will be a context menu for, TextBox1 in this scenario.&lt;/p&gt;
&lt;p&gt;
Some other features that the &lt;b&gt;C1Menu&lt;/b&gt; establishes are menu scrolling; templating; saving and loading the control&amp;rsquo;s layout as XML; the ability to overlay Flash, ActiveX, and Windowed objects; animations and easing; and much more.
&lt;/p&gt;
&lt;h2&gt;
C1WebTreeView to C1TreeView
&lt;/h2&gt;
&lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/3286.7.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/3286.7.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
The &lt;b&gt;C1TreeView &lt;/b&gt;is very similar to the &lt;b&gt;C1WebTreeView &lt;/b&gt;control in the 
sense that it allows developers to display a hierarchy, but it also brings 
additional functionality and style. The &lt;b&gt;C1WebTreeView&lt;/b&gt; begins on Line 115 
of the Default.aspx file&amp;rsquo;s markup and is denoted by a &amp;lt;!--BEGIN 
C1WEBTREEVIEW--&amp;gt; comment tag. Now, scroll down to the &amp;lt;!--BEGIN 
C1TREEVIEW--&amp;gt; comment tag, and paste the following markup directly below the 
comment:&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;
&amp;lt;cc4:C1TreeView ID=&amp;quot;C1TreeView1&amp;quot; runat=&amp;quot;server&amp;quot; VisualStyle=&amp;quot;Vista&amp;quot; Height=&amp;quot;128px&amp;quot; Width=&amp;quot;181px&amp;quot; ExpandAnimation=&amp;quot;DropOutToRight&amp;quot; CollapseAnimation=&amp;quot;DropInFromRight&amp;quot; ExpandDuration=&amp;quot;1000&amp;quot; CollapseDuration=&amp;quot;1000&amp;quot; CollapseDelay=&amp;quot;50&amp;rdquo; ExpandDelay=&amp;quot;50&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Nodes&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc4:C1TreeViewNode Text=&amp;quot;Item1&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Nodes&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc4:C1TreeViewNode Text=&amp;quot;Item1.1&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc4:C1TreeViewNode Text=&amp;quot;Item1.2&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc4:C1TreeViewNode Text=&amp;quot;Item1.3&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Nodes&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/cc4:C1TreeViewNode&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc4:C1TreeViewNode Text=&amp;quot;Item2&amp;quot;&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Nodes&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc4:C1TreeViewNode Text=&amp;quot;Item2.1&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc4:C1TreeViewNode Text=&amp;quot;Item2.2&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Nodes&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc4:C1TreeViewNode Text=&amp;quot;Item2.2.1&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc4:C1TreeViewNode Text=&amp;quot;Item2.2.2&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc4:C1TreeViewNode Text=&amp;quot;Item2.2.3&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc4:C1TreeViewNode Text=&amp;quot;Item2.2.4&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Nodes&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/cc4:C1TreeViewNode&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc4:C1TreeViewNode Text=&amp;quot;Item2.3&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc4:C1TreeViewNode Text=&amp;quot;Item2.4&amp;quot; /&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Nodes&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/cc4:C1TreeViewNode&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc4:C1TreeViewNode Text=&amp;quot;Item3&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Nodes&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc4:C1TreeViewNode Text=&amp;quot;Item3.1&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc4:C1TreeViewNode Text=&amp;quot;Item3.2&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc4:C1TreeViewNode Text=&amp;quot;Item3.3&amp;quot; /&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Nodes&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/cc4:C1TreeViewNode&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Nodes&amp;gt;&lt;br /&gt;&amp;lt;/cc4:C1TreeView&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;
At this stage, the &lt;b&gt;C1TreeView&lt;/b&gt; should render as follows. If you expand or collapse a node, you can see an example of the &lt;b&gt;C1TreeView&lt;/b&gt;&amp;rsquo;s several animation and transition effects.&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/0334.8.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/0334.8.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now it is time to take advantage of the &lt;b&gt;C1TreeView&lt;/b&gt;&amp;rsquo;s enhancements, but first, change the AllowEdit, AutoCollapse, and ShowCheckBoxes properties to True. The AllowEdit property is a Boolean property with a default value of False; when set to True, this property will allow end-users to modify the C1TreeView&amp;rsquo;s nodes. When True, the AutoCollapse property will ensure that only one node at that level will be expanded at one time. The ShowCheckBoxes property is a Boolean property, also with a default value of False. When True, the ShowCheckBoxes property will display standard checkboxes, or tri-state checkboxes if specified, next to each need in the &lt;b&gt;C1TreeView&lt;/b&gt;. At this point, the &lt;b&gt;C1TreeView&lt;/b&gt; should appear on the page similar to the following image:&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/6013.9.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/6013.9.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
The &lt;b&gt;C1TreeView&lt;/b&gt; also introduces several new features such as node sorting; node drag-and-dropping; templates; the ability to show or hide the node lines; load on demand; and many more.
&lt;/p&gt;
&lt;h2&gt;
C1WebTopicBar to C1NavPanel
&lt;/h2&gt;
&lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/7573.10.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/7573.10.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="article"&gt;Of all the controls discussed thus far, the &lt;b&gt;C1NavPanel&lt;/b&gt; 
and the &lt;b&gt;C1WebTopicBar &lt;/b&gt;are the least similar of the group. The 
&lt;b&gt;C1NavPanel&lt;/b&gt; offers similar functionality to the &lt;b&gt;C1WebTopicBar&lt;/b&gt;, but 
with a significantly different visual structure that closer resembles the 
navigation menu in Microsoft Outlook. The &lt;b&gt;C1NavPanel &lt;/b&gt;is also easier to 
develop with for the sole fact that it only has one type of direct item compared 
to the &lt;b&gt;C1WebTopicBar&lt;/b&gt;&amp;rsquo;s seven. The &lt;b&gt;C1WebTopicBar&lt;/b&gt;&amp;rsquo;s functionality 
can also be replicated, and extended upon, with other ComponentOne controls like 
the &lt;b&gt;C1Expander&lt;/b&gt; and the &lt;b&gt;C1Accordion&lt;/b&gt;. The &lt;b&gt;C1WebTopicBar&lt;/b&gt; 
begins on Line 187 of the Default.aspx file&amp;rsquo;s markup and is denoted by a 
&amp;lt;!--BEGIN C1WEBTOPICBAR--&amp;gt; comment tag. Now, scroll down to the 
&amp;lt;!--BEGIN C1NAVPANEL--&amp;gt; comment tag, and paste the following markup 
directly below the comment:&lt;/p&gt;
&lt;p&gt;
&lt;code&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc3:C1NavPanel ID=&amp;quot;C1NavPanel1&amp;quot; runat=&amp;quot;server&amp;quot; Height=&amp;quot;281px&amp;quot; Width=&amp;quot;263px&amp;quot; VisualStyle=&amp;quot;Vista&amp;quot; AnimationEasing=&amp;quot;EaseLinear&amp;quot; AnimationDuration=&amp;quot;100&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Panes&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc3:C1NavPanelPane ID=&amp;quot;C1NavPanel1Pane1&amp;quot; runat=&amp;quot;server&amp;quot; ButtonName=&amp;quot;Group1 (Simple Text)&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Header&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Group1 (Simple Text)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Header&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Content&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; This is just arbitrary text!&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Content&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/cc3:C1NavPanelPane&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc3:C1NavPanelPane ButtonName=&amp;quot;Favorite Sport&amp;quot; Expanded=&amp;quot;false&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Header&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;asp:Label ID=&amp;quot;Label1&amp;quot; runat=&amp;quot;server&amp;quot; Text=&amp;quot;Favorite Sport (ASP.NET Label)&amp;quot;/&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Header&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Content&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;asp:RadioButtonList ID=&amp;quot;RadioButtonList1&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;asp:ListItem Text=&amp;quot;Football&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;asp:ListItem Text=&amp;quot;Basketball&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;asp:ListItem Text=&amp;quot;Baseball&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;asp:ListItem Text=&amp;quot;Hockey&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;asp:ListItem Text=&amp;quot;Golf&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;asp:ListItem Text=&amp;quot;Soccer&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;asp:ListItem Text=&amp;quot;Tennis&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/asp:RadioButtonList&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Content&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/cc3:C1NavPanelPane&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;cc3:C1NavPanelPane ContentUrl=&amp;quot;http://www.componentone.com&amp;quot; ButtonImageUrl=&amp;quot;~/Images/C1.jpg&amp;quot; ButtonName=&amp;quot;ComponentOne&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Header&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Welcome to ComponentOne&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Header&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Content /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/cc3:C1NavPanelPane&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/Panes&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/cc3:C1NavPanel&amp;gt;
&lt;/code&gt;
&lt;/p&gt;
&lt;p&gt;
You should notice that the each pane of the &lt;b&gt;C1NavPanel&lt;/b&gt; consists of two portions, the header and the footer, that can contain any object. You should also notice that the markup is appreciably cleaner and less cluttered. Rebuild and run the web application to see the &lt;b&gt;C1NavPane&lt;/b&gt;l in action. When exploring the &lt;b&gt;C1NavPanel&lt;/b&gt; at this point, the control demonstrates some of its several animation options as well as an additional pane that host the ComponentOne website. The &lt;b&gt;C1NavPanel&lt;/b&gt; also allows end-users to resize the panes vertically by using the sizer just below the open pane. The &lt;b&gt;C1NavPanel&lt;/b&gt; should resemble the following image:&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/4048.11.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/4048.11.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;
Now that you have seen a simplified example, you can now confidently transform your web applications using ComponentOne&amp;rsquo;s ASP.NET controls. For the most styled, supercharged, and easy-to-use controls built on Web standards including AJAX, CSS, and XHTML, continue to use ComponentOne Studio for ASP.NET in your sites.&lt;/p&gt;
&lt;p&gt;
You can download the completed sample application by clicking the link below:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;WebCommand_Completed: (Please visit the site to view this media)&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.componentone.com/CS/aggbug.aspx?PostID=228697" width="1" height="1"&gt;</description><category domain="http://blogs.componentone.com/CS/blogs/webdev/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.componentone.com/CS/blogs/webdev/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.componentone.com/CS/blogs/webdev/archive/tags/Palomino/default.aspx">Palomino</category><category domain="http://blogs.componentone.com/CS/blogs/webdev/archive/tags/Studio+for+ASP.NET/default.aspx">Studio for ASP.NET</category><category domain="http://blogs.componentone.com/CS/blogs/webdev/archive/tags/C1Menu/default.aspx">C1Menu</category><category domain="http://blogs.componentone.com/CS/blogs/webdev/archive/tags/C1TabControl/default.aspx">C1TabControl</category><category domain="http://blogs.componentone.com/CS/blogs/webdev/archive/tags/C1NavPanel/default.aspx">C1NavPanel</category><category domain="http://blogs.componentone.com/CS/blogs/webdev/archive/tags/C1TreeView/default.aspx">C1TreeView</category></item><item><title>Doc-To-Help 2010 Released</title><link>http://blogs.componentone.com/CS/blogs/c1buzz/archive/2010/02/10/doc-to-help-2010-released.aspx</link><pubDate>Wed, 10 Feb 2010 18:59:00 GMT</pubDate><guid isPermaLink="false">6ffc9ae0-0270-4839-b826-46696419445e:228616</guid><dc:creator>C1_EveT</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Doc-To-Help 2010 marks our first subscription update of the young year. We have made valuable updates to our RoboHelp conversion, collaboration, and authoring technologies. This is just the beginning of what we have in store for 2010, so stay tuned for more updates! Check it out at &lt;a href="http://www.doctohelp.com"&gt;www.doctohelp.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.componentone.com/CS/aggbug.aspx?PostID=228616" width="1" height="1"&gt;</description></item><item><title>Become an Expert Part 3: Adding a Ribbon Interface and Export Options</title><link>http://blogs.componentone.com/CS/blogs/windev/archive/2010/02/09/BecomeAnExpertPart3.aspx</link><pubDate>Tue, 09 Feb 2010 17:14:00 GMT</pubDate><guid isPermaLink="false">6ffc9ae0-0270-4839-b826-46696419445e:228544</guid><dc:creator>C1_GregL</dc:creator><slash:comments>2</slash:comments><description>&lt;h2&gt;Part 3 Overview&lt;/h2&gt;
&lt;p&gt;In this series, we will use controls from ComponentOne Studio for WinForms to create a Sales Management application and show how easily anyone can &amp;quot;Become an Expert&amp;quot;. Keep in mind that up until now* we have created a table to display sales data, implemented features to add/delete data and added a feature to automatically show totals. &lt;/p&gt;
&lt;p&gt;* See &lt;a target="_blank" href="http://helpcentral.componentone.com/CS/blogs/windev/archive/2010/01/29/BecomeAnExpertPart1.aspx"&gt;Part One&lt;/a&gt; and &lt;a target="_blank" href="http://helpcentral.componentone.com/CS/blogs/windev/archive/2010/02/05/BecomeAnExpertPart2.aspx"&gt;Part Two&lt;/a&gt; before continuing.&lt;/p&gt;
&lt;p&gt;In Part 3, we&amp;#39;ll use the &lt;b&gt;C1Ribbon&lt;/b&gt; control (part of Studio for WinForms) to change the look and feel of the application. We&amp;#39;ll also use the &lt;b&gt;C1PdfDocument&lt;/b&gt; control to export a report to a PDF file, and we&amp;#39;ll also add Excel export options using the &lt;b&gt;C1FlexGrid&lt;/b&gt; control.&lt;/p&gt;
&lt;p&gt;So let&amp;#39;s get started!&lt;/p&gt;
&lt;h2&gt;Implementing the Ribbon Interface 1&lt;/h2&gt;
&lt;h3&gt;Modify the menu using the C1Ribbon control:&lt;/h3&gt;
&lt;p&gt;Up until now we&amp;#39;ve used basic Windows controls in the Sales Management Application menu and form itself. To enhance the look and feel of the application, we&amp;#39;ll incorporate the Ribbon interface using the&amp;nbsp;&lt;b&gt;C1Ribbon&lt;/b&gt; control.&lt;/p&gt;
&lt;p&gt;In order to use the &lt;b&gt;C1Ribbon&lt;/b&gt; control, we need to add it to the toolbox. To add the control, right click on the toolbox and open &amp;quot;Choose Toolbox Items&amp;quot;.&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/1663.ribbon_5F00_toolbox.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/1663.ribbon_5F00_toolbox.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Please refer to the previous articles for details regarding this topic. &lt;/p&gt;
&lt;h2&gt;Modify preview&lt;/h2&gt;
&lt;p&gt;Let&amp;#39;s begin by adding the &lt;b&gt;C1Ribbon&lt;/b&gt; control to the display area of the form. It looks very different from MenuStrip. &lt;b&gt;C1Ribbon&lt;/b&gt; provides a tabbed interface using menu items which are divided into tabs and groups for better visual effect. In this application we will divide our items into two tabs: one for basic functionality and another for file exporting features.&lt;/p&gt;
&lt;p&gt;We have a C1RibbonForm class which is used to get a form with &lt;b&gt;C1Ribbon&lt;/b&gt; control on it. So let&amp;#39;s shift from the common Form class to the C1RibbonForm class. Use the following code to modify the base Form class (parent class).&lt;/p&gt;
&lt;h3&gt;Before modification&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;public partial class Form1 : Form&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;After modification&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;using C1.Win.C1Ribbon; &amp;nbsp;// Add&lt;br /&gt;：&lt;br /&gt;：（Omitted）&lt;br /&gt;：&lt;br /&gt;public partial class Form1 : C1RibbonForm&lt;/code&gt;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/6661.ribbon_5F00_form.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/6661.ribbon_5F00_form.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The&amp;nbsp;form has changed completely! We&amp;#39;ll use this as a base and add buttons and textboxes to the &lt;b&gt;C1Ribbon&lt;/b&gt; control to create the menu.&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Implementing the Ribbon Interface 2&lt;/h2&gt;
&lt;h3&gt;Add Tabs and Groups:&lt;/h3&gt;
&lt;p&gt;Now we will add tabs and groups to the Ribbon. To add tabs, select the Application Menu (round section) from the top left of the screen and click &amp;quot;Actions&amp;quot; and then &amp;quot;Add Tab&amp;quot;.&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/6153.ribbon_5F00_addtab.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/6153.ribbon_5F00_addtab.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;For changing the text of the tab, select the tab to display its context-sensitive toolbar and click on &amp;quot;Text Settings&amp;quot;. Text settings and tooltip settings can be done from this popup window.&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/4377.ribbon_5F00_edittext.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/4377.ribbon_5F00_edittext.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can also modify Text settings and add more groups in the same way. Similarly, controls can also be added to groups. Select the default Group and drop-down the actions menu. Select to add a Button.&lt;/p&gt;
&lt;p&gt;Now, let&amp;#39;s change the icons. To change the Button&amp;#39;s icon, click on &amp;quot;Change Image&amp;quot; from its toolbar.&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/0842.ribbon_5F00_editimage.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/0842.ribbon_5F00_editimage.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;From the Change Image pop-up, select the icon to be changed. Modify &amp;quot;Large Image&amp;quot; for large icons and &amp;quot;Small Image&amp;quot; for small icons. Depending on whether or not you select a large image will determine if the button is large or small. Even if you want a large button, it&amp;#39;s also recommended to choose a small image for use in the Quick Access Toolbar.&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/2110.ribbon_5F00_selectimage.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/2110.ribbon_5F00_selectimage.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Try changing icons for all the controls in the same way. Continue to fill out the Ribbon with the following tabs and groups. Some controls are for features we have already implemented and some are for the new features we plan to implement. For PDF export we will have to add a separate &lt;b&gt;C1PdfDocument&lt;/b&gt; component. &lt;b&gt;Note:&lt;/b&gt; details about this feature will be covered later.&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/6710.ribbon_5F00_hometab.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/6710.ribbon_5F00_hometab.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Home Tab&lt;/h3&gt;
&lt;p&gt;DB&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Read&lt;/li&gt;
&lt;li&gt;Write&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Data Manipulation&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add Data&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Print&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Print&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;PDF&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PDF Output&lt;/li&gt;
&lt;li&gt;Include Password&lt;/li&gt;
&lt;li&gt;Password&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/5305.ribbon_5F00_filetab.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/5305.ribbon_5F00_filetab.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;File Tab&lt;/h3&gt;
&lt;p&gt;Excel&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Output&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;XML&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Export&lt;/li&gt;
&lt;li&gt;Import&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/5305.ribbon_5F00_filetab.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Adding Excel Export&lt;/h2&gt;
&lt;p&gt;Now that we have modified the appearance, let&amp;#39;s add new features. Usually in business applications, users want data to be exported to a file. &lt;/p&gt;
&lt;p&gt;Let&amp;#39;s first add a feature for exporting our data to Excel. First, add a RibbonButton event. This can be done by simply double clicking on the RibbonButton, just like a usual button control. We will use the &amp;quot;Output&amp;quot; button in the &amp;quot;Excel&amp;quot; group of the file tab created earlier.&lt;/p&gt;
&lt;p&gt;To accomplish the Excel exporting we&amp;#39;ll simply use C1FlexGrid&amp;#39;s export feature. Use the following code to export C1FlexGrid data to an Excel file format.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;this.c1FlexGrid1.SaveExcel(&amp;quot;File Name&amp;quot;, &amp;quot;Sheet Name&amp;quot;, &amp;quot;Output Options&amp;quot;);&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Data from &lt;b&gt;C1FlexGrid&lt;/b&gt; will be displayed in the specified sheet. We have fixed rows (header rows) and fixed columns (header columns) in the Sales Management Application. Specify FileFlags.IncludeFixedCells in the output option to get fixed cells in the Excel file. &lt;/p&gt;
&lt;p&gt;If you open the exported Excel file, you&amp;#39;ll notice the window outline is fixed for the sections with fixed cells. Also, our cell styles are respected in the Excel format, but our custom OwnerDraw progress bars are not.&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/4087.flexdata_5F00_excel.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/4087.flexdata_5F00_excel.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Adding XML Export &lt;/h2&gt;
&lt;p&gt;In addition to Excel export, we can also export C1FlexGrid data to XML. Exporting to Excel limits reusability from the customer&amp;#39;s end because it&amp;#39;s restricted to the software being used. By exporting to XML we can load and export data in a format more native to the FlexGrid. We will export C1FlexGrid data to an XML file and then read data from this file.&lt;/p&gt;
&lt;p&gt;We&amp;#39;ll use the &amp;quot;Export&amp;quot; button in the XML group. Use the following code to export C1FlexGrid data to an XML file format.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;this.c1FlexGrid1.WriteXml(&amp;quot;File Name&amp;quot;);&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Just write one line of code and that&amp;#39;s it! &lt;/p&gt;
&lt;h3&gt;Data exported to XML&lt;/h3&gt;
&lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/5270.flexgrid_5F00_xml.gif"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/5270.flexgrid_5F00_xml.gif" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Let&amp;#39;s read the data from the XML file back to the grid. Execute the following code to load the XML file and paste the data back to &lt;b&gt;C1FlexGrid&lt;/b&gt;. Use the &amp;quot;Import&amp;quot; button of XML group in the Ribbon.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;this.c1FlexGrid1.ReadXml(&amp;quot;File Name&amp;quot;);&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;And just like file exporting, we only need one line of code here too. Background color has also been read back with the data! So when data is exported to XML, font, background color, and other similar information is also exported to the file.&lt;/p&gt;
&lt;h2&gt;Adding PDF Export&lt;/h2&gt;
&lt;p&gt;Finally, since we are creating a Sales Management application, let&amp;#39;s try adding a reporting feature. We will use &lt;b&gt;C1PdfDocument&lt;/b&gt; component to create a PDF file. &lt;b&gt;C1PdfDocument &lt;/b&gt;(part of Studio for WinForms) is used for generating PDF documents.&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/6866.pdf_5F00_toolbox.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/6866.pdf_5F00_toolbox.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So let&amp;#39;s start creating the PDF file! Add the &lt;b&gt;C1PdfDocument&lt;/b&gt; component from the toolbox, just like you did for &lt;b&gt;C1Ribbon&lt;/b&gt;. Then add the click event of the &amp;quot;PDF Output&amp;quot; button under the PDF group in the Home tab. &lt;/p&gt;
&lt;p&gt;Now let&amp;#39;s add some code.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;this.c1PdfDocument1.Clear();&lt;br /&gt;this.c1PdfDocument1.DocumentInfo.Title = &amp;quot;Title&amp;quot;;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This code initializes the C1PdfDocument component and sets the PDF file title. The title can be verified in the PDF file properties. &lt;/p&gt;
&lt;p&gt;&lt;code&gt;RectangleF rcPage = this.c1PdfDocument1.PageRectangle;&lt;br /&gt;rcPage.Inflate(-100, -100);&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Here we get the page area and determine the display area of the page by setting the top, bottom, left, right margins. &lt;/p&gt;
&lt;p&gt;Next we&amp;#39;ll set the title (heading) style of the report.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// Get and set the height.&lt;br /&gt;rc.Height = this.c1PdfDocument1.MeasureString(&amp;quot;Title (Heading)&amp;quot;, &amp;quot;Font&amp;quot;, rc.Width).Height;&lt;/code&gt; &lt;code&gt;// Draw title.&lt;br /&gt;this.c1PdfDocument1.DrawString(&amp;quot;Title (Heading)&amp;quot;, &amp;quot;Font&amp;quot;, Brushes.Black, &amp;quot;Drawing area&amp;quot;);&lt;/code&gt; &lt;code&gt;// Adjust the drawing location.&lt;br /&gt;rc.Offset(0, rc.Height + 5); &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The code above set the height of the drawing area using the MeasureString method. We then draw the title using the DrawString method. Then, modify Brushes.Black to change the color of the text. And finally, adjust the drawing location by an amount equal to the height of the title plus the row padding.&lt;/p&gt;
&lt;p&gt;The following code will draw the header section. The basic sequence will be the same as drawing the title; however, in this case it will be for multiple columns, so the horizontal width needs to be calculated. (In our application, we are simply dividing the width by the number of columns. Also, for setting the height of the drawing area, we are calculating based on the height of the tallest cell).&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// Measure cell width&lt;br /&gt;rcCell.Width = rc.Width / fields.Length;&lt;br /&gt;&lt;br /&gt;// Get the height. Select the highest one and set it.&lt;br /&gt;float height = this.c1PdfDocument1.MeasureString(&amp;quot;Header String&amp;quot;, &amp;quot;Font&amp;quot;, rcCell.Width).Height;&lt;br /&gt;rcCell.Height = Math.Max(rcCell.Height, height);&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Next, fill the drawing area and draw the header string. Adjust the position of the drawing area and our drawing of the header is complete. &lt;/p&gt;
&lt;p&gt;&lt;code&gt;// Fill the cell.&lt;br /&gt;this.c1PdfDocument1.FillRectangle(Brushes.Black, rcCell);&lt;/code&gt; &lt;code&gt;// Draw header.&lt;br /&gt;this.c1PdfDocument1.DrawString(&amp;quot;Header String&amp;quot;, &amp;quot;Font&amp;quot;, Brushes.White, rcCell);&lt;/code&gt; &lt;code&gt;// Position is set by adjusting the horizontal width only.&lt;br /&gt;rcCell.Offset(rcCell.Width, 0);&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Finally, we will draw the data section. Drawing the data section is similar to the header section. It contains numeric values, strings and date values. The numeric values will be left aligned and all other data types will be right aligned. &lt;/p&gt;
&lt;p&gt;&lt;code&gt;StringFormat sf = new StringFormat();&lt;br /&gt;// Check if the value can be converted to double.&lt;br /&gt;double d;&lt;br /&gt;sf.Alignment = (double.TryParse(&amp;quot;Data&amp;quot;, out d)) ? StringAlignment.Far :StringAlignment.Near;&lt;/code&gt; &lt;code&gt;// Draw the data in the cell.&lt;br /&gt;this.c1PdfDocument1.DrawString(&amp;quot;Data&amp;quot;, &amp;quot;Font&amp;quot;, Brushes.Black, rcCell, sf);&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;We are also checking if the numeric data type or any other data type can be converted to double to avoid conversion errors. For numeric data, we set StringAlignment to Far, and for other data types set it to Near. Then draw the data string by specifying the string format at runtime while using the DrawString method. Finally, once the file is saved using the Save method of C1PdfDocument, our process is complete. Page breaks have also been implemented in this sample application.&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/3225.flexdata_5F00_pdf.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/3225.flexdata_5F00_pdf.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Setting Password in the PDF File&lt;/h2&gt;
&lt;p&gt;The generated PDF file now contains sales data. This might be confidential information since this is a business application, so let&amp;#39;s set a password for the PDF file. This password will be required to open and view the PDF file. &lt;/p&gt;
&lt;p&gt;Check the checkbox &amp;quot;Include Password&amp;quot; in the PDF group of Home tab. The following code is implemented when you click on &amp;quot;PDF Output&amp;quot; after entering a string in the &amp;quot;Password&amp;quot; textbox. &lt;/p&gt;
&lt;p&gt;&lt;code&gt;this.c1PdfDocument1.Security.UserPassword = &amp;quot;Password String&amp;quot;;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Here we just need to use the UserPassword property of the PdfSecurity class to set the password. The security of the PDF file is enhanced this way so the users who do not have the password will not be able to open the PDF file. &lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;In this part we modified the look and feel of the application with the help of the &lt;b&gt;C1Ribbon&lt;/b&gt; control. We implemented features like Excel export and XML export and import. We also created a PDF file and set a password for it using the &lt;b&gt;C1PdfDocument &lt;/b&gt;component. By making a few code changes to the controls we were able to enhance the features in the application immensely. &lt;/p&gt;
&lt;p&gt;In &lt;a href="http://helpcentral.componentone.com/CS/blogs/windev/archive/2010/02/17/BecomeAnExpertPart4.aspx"&gt;Part 4&lt;/a&gt;, we&amp;#39;ll add some more interesting features to the application by binding sales data to a chart control and displaying the data in &lt;b&gt;C1FlexGrid &lt;/b&gt;in the form of a chart.&lt;/p&gt;
&lt;h2&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/0268.Part3.zip"&gt;Download Part&amp;nbsp;3&amp;nbsp;Sample Project&lt;/a&gt;&lt;/h2&gt;
&lt;h2&gt;Acknowledgements&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Article copyright &amp;copy; 2009&amp;nbsp;Shogo Takayama&amp;nbsp;＆ Shoeisha Co., Ltd. http://www.shoeisha.co.jp/ &lt;/li&gt;
&lt;li&gt;&lt;a href="http://codezine.jp/"&gt;http://codezine.jp/&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;These contents were made by GrapeCity inc., Japan. &lt;a href="http://www.grapecity.com/japan/"&gt;http://www.grapecity.com/japan/&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Translated by Vidhi Kapoor (GrapeCity India Pvt. Ltd.)&lt;/li&gt;
&lt;li&gt;Edited by Greg Lutz (ComponentOne)&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.componentone.com/CS/aggbug.aspx?PostID=228544" width="1" height="1"&gt;</description><category domain="http://blogs.componentone.com/CS/blogs/windev/archive/tags/WinForms/default.aspx">WinForms</category><category domain="http://blogs.componentone.com/CS/blogs/windev/archive/tags/C1FlexGrid/default.aspx">C1FlexGrid</category><category domain="http://blogs.componentone.com/CS/blogs/windev/archive/tags/Become+an+Expert/default.aspx">Become an Expert</category><category domain="http://blogs.componentone.com/CS/blogs/windev/archive/tags/C1Pdf/default.aspx">C1Pdf</category><category domain="http://blogs.componentone.com/CS/blogs/windev/archive/tags/C1Ribbon/default.aspx">C1Ribbon</category><category domain="http://blogs.componentone.com/CS/blogs/windev/archive/tags/Excel/default.aspx">Excel</category></item><item><title>New Case Study: Company Reduces Development Time by 84% Using Third Party Visual Studio Controls </title><link>http://blogs.componentone.com/CS/blogs/c1buzz/archive/2010/02/08/new-case-study-company-reduces-development-time-by-84-using-third-party-visual-studio-controls.aspx</link><pubDate>Mon, 08 Feb 2010 18:35:00 GMT</pubDate><guid isPermaLink="false">6ffc9ae0-0270-4839-b826-46696419445e:228496</guid><dc:creator>C1_EveT</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;span style="font-size:11pt;color:black;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;mso-bidi-font-family:Arial;"&gt;Read how Tom Sullivan from LogixPower, a non-profit organization located in San Diego, California used ComponentOne Studio for ASP .NET to save 174 man hours and $15,000. &lt;a href="http://www.componentone.com/SuperPages/CaseStudies/?caseID=20"&gt;&lt;span style="color:#800080;"&gt;http://www.componentone.com/SuperPages/CaseStudies/?caseID=20&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.componentone.com/SuperPages/CaseStudies/?caseID=20"&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.componentone.com/CS/aggbug.aspx?PostID=228496" width="1" height="1"&gt;</description></item><item><title>Source Control Options? Yeah, We’ve got those…Doc-To-Help 2010 now integrates with Microsoft Team Foundation Server</title><link>http://blogs.componentone.com/CS/blogs/c1buzz/archive/2010/02/08/source-control-options-yeah-we-ve-got-those-doc-to-help-2010-now-integrates-with-microsoft-team-foundation-server.aspx</link><pubDate>Mon, 08 Feb 2010 16:36:00 GMT</pubDate><guid isPermaLink="false">6ffc9ae0-0270-4839-b826-46696419445e:228485</guid><dc:creator>C1_NickyB</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Doc-To-Help has had robust Team Authoring support&amp;nbsp;for quite some time, but with the release of Doc-To-Help 2010, we&amp;rsquo;ve added a new feature that many have requested: integration with Microsoft&amp;rsquo;s Team Foundation Server (TFS) source control.&lt;/p&gt;
&lt;p&gt;It&amp;nbsp;just takes a few clicks to add a documentation project to a TFS repository, and every member of the team can work with the project&amp;nbsp; and take advantage of the new options. In addition, using TFS makes it possible for documentation and code to be stored in the same location, something many companies prefer because it streamlines processes.&lt;/p&gt;
&lt;p&gt;The &lt;strong&gt;Doc-To-Help Team Authoring&lt;/strong&gt; ribbon has been redesigned to add the new TFS features, as well make document check in/check out easier and quicker.&amp;nbsp; The new options available when using TFS include:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Get Specific Version&lt;/strong&gt; &amp;mdash; You can search the archives for a specific version of a file and retrieve it if you wish. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Locking&lt;/strong&gt; &amp;mdash; You have two locking options that give you complete control over the check in/check out of files. These options make branching or creation of multiple versions possible.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Compare Documents&lt;/strong&gt; &amp;mdash; You can compare the document you are working on with one that is stored in the archives &amp;ndash; or even compare two archived documents. You can also merge documents.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Commenting&lt;/strong&gt; &amp;mdash; You can add your own notes when checking in a file. These notes are saved to the document history. &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Document History&lt;/strong&gt; &amp;mdash; You can view a history of all the changes made to each document, including comments.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Document Properties&lt;/strong&gt; &amp;mdash;You can view the properties of each document via right-click.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you are interested in using Team Authoring&amp;nbsp; but don&amp;rsquo;t have TFS, you can still use Doc-To-Help Team Authoring and manage your projects on your network&amp;nbsp;or on the web. See &lt;a target="_blank" href="http://helpcentral.componentone.com/nethelp/d2h/WordDocuments/workingonateam.htm" title="Working on a Team"&gt;Working on a Team&lt;/a&gt; for details.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.componentone.com/CS/aggbug.aspx?PostID=228485" width="1" height="1"&gt;</description></item><item><title>Become an Expert Part 2: Adding Features to the Sales Management Application</title><link>http://blogs.componentone.com/CS/blogs/windev/archive/2010/02/05/BecomeAnExpertPart2.aspx</link><pubDate>Fri, 05 Feb 2010 20:46:00 GMT</pubDate><guid isPermaLink="false">6ffc9ae0-0270-4839-b826-46696419445e:228434</guid><dc:creator>C1_GregL</dc:creator><slash:comments>3</slash:comments><description>&lt;h2&gt;Part 2 Overview&lt;/h2&gt;
&lt;p&gt;Microsoft Visual Studio contains a number of standard controls. ComponentOne Studio Enterprise provides easy-to-use controls with enhanced features which can be used in Visual Studio along with standard controls. In this series, we make use of these controls to create a Sales Management Application. In &lt;a target="_blank" href="http://helpcentral.componentone.com/CS/blogs/windev/archive/2010/01/29/BecomeAnExpertPart1.aspx"&gt;Part 1&lt;/a&gt;; we started building a simple application using &lt;b&gt;C1FlexGrid&lt;/b&gt; to display and edit sales data. In this part, we&amp;#39;ll power up our application by using features provided by &lt;b&gt;C1FlexGrid&lt;/b&gt;.&lt;/p&gt;
&lt;h2&gt;Add Product Category&lt;/h2&gt;
&lt;p&gt;You may remember that in the previous section, &amp;quot;Proceeds&amp;quot; and &amp;quot;Payments&amp;quot; were added to the Sales Management Application based on dates. A real life organization, however, sells a number of products and might want to look at aggregate sales figures for each product category. For this, a category item needs to be added so that not just dates but category wise sales figures can also be represented.&lt;/p&gt;
&lt;p&gt;First, let&amp;#39;s add a column &amp;quot;Product Category&amp;quot; in the grid. Open the &amp;quot;C1FlexGrid Column Editor&amp;quot; by selecting Designer... from the C1FlexGrid&amp;#39;s smart tag to add/delete rows at any location in the grid. We will put this new column between the &amp;quot;Date&amp;quot; and &amp;quot;Proceeds&amp;quot; columns. Name it ProductCategory and set AllowEditing to False.&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/flexgrid_5F00_columns.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/flexgrid_5F00_columns.png" alt="Setting the Value of Product Category" border="0" style="border:0;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We have a separate CategoryMaster table where the data values are translated into display values using DataMap (use CategoryMaster script included in the sample zip to create the CategoryMaster table, and the Sales script to recreate the Sales table adding a CategoryCode data field). Here the CategoryCode value is specified and the corresponding CategoryName is displayed on the grid. Values in &lt;b&gt;C1FlexGrid&lt;/b&gt; have been made non-editable in our application, but DataMaps can also be used where editing is possible in the grid and values are entered in a drop-down list.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ListDictionary dictionary = new ListDictionary();&lt;br /&gt;dictionary.Add(&amp;quot;CategoryCode&amp;quot;, &amp;quot;CategoryName&amp;quot;);&lt;br /&gt;this.c1FlexGrid1.Cols[1].DataType = typeof(int);&lt;br /&gt;this.c1FlexGrid1.Cols[1].DataMap = dictionary;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;CategoryCode is added as the key and CategoryName is added as the display value in the ListDictionary. With this, we have added a &amp;quot;ProductCategory&amp;quot; column in the grid and completed the settings for the DataMap.&lt;/p&gt;
&lt;h2&gt;Add a Window to Enter Data&lt;/h2&gt;
&lt;p&gt;Next, let&amp;#39;s change the way we enter data in the grid. In &lt;a target="_blank" href="http://helpcentral.componentone.com/CS/blogs/windev/archive/2010/01/29/BecomeAnExpertPart1.aspx"&gt;Part 1&lt;/a&gt;, we added/modified data directly through &lt;b&gt;C1FlexGrid&lt;/b&gt;, but this is very inconvenient in a real application. So we&amp;#39;ll create a new input window to enter data. When data is to be entered, a new window will pop up and for simple data input.&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/input_5F00_form.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/input_5F00_form.png" alt="Pop up window to enter sales data" border="0" style="border:0;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;First, we will add a Form to the project. This form will contain controls where data related to &amp;quot;Date&amp;quot;, &amp;quot;Category&amp;quot;, &amp;quot;Proceeds&amp;quot; and &amp;quot;Payments&amp;quot; can be entered. &lt;/p&gt;
&lt;p&gt;&lt;code&gt;public object CategoryCode&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; get { return this.comboBox1.SelectedValue; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; set { this.comboBox1.SelectedValue = value; }&lt;br /&gt;}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Use the code below to get and set the entered value in the main window.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;When new data is entered&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="padding-left:60px;"&gt;&lt;code&gt;this.c1FlexGrid1.AddItem(new object[] { &amp;quot;Date&amp;quot;,&lt;br /&gt;　　　　　　　　　　　　&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 　　　　&amp;quot;CategoryCode&amp;quot;,&lt;br /&gt;　　　　　　　　　　　　　&amp;nbsp;&amp;nbsp;&amp;nbsp; 　&amp;nbsp;&amp;nbsp;&amp;nbsp; 　　&amp;quot;Proceeds&amp;quot;, &lt;br /&gt;　　　　　　　　　　　　　　&amp;nbsp;&amp;nbsp;&amp;nbsp; 　　&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;Payment&amp;quot; });&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;When existing data is updated&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="padding-left:60px;"&gt;&lt;code&gt;this.c1FlexGrid1[&amp;quot;rowNum&amp;quot;, 0] = &amp;quot;Date&amp;quot;;&lt;br /&gt;this.c1FlexGrid1[&amp;quot;rowNum &amp;quot;, 1] = &amp;quot;CategoryCode&amp;quot;;&lt;br /&gt;this.c1FlexGrid1[&amp;quot;rowNum &amp;quot;, 2] = &amp;quot;Proceeds&amp;quot;;&lt;br /&gt;this.c1FlexGrid1[&amp;quot;rowNum &amp;quot;, 3] = &amp;quot;Payments&amp;quot;;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;When the popup window is closed, the value entered will be retrieved automatically and reflected in &lt;b&gt;C1FlexGrid&lt;/b&gt;. Numeric values can also be entered easily through this window.&lt;/p&gt;
&lt;h2&gt;Adding Subtotals/Grand Total&lt;/h2&gt;
&lt;p&gt;Up untill now we have been making changes at the record level, but in a Sales Management Application we would need information about total sales. So let&amp;#39;s add a totals row to calculate sales for a month. If there are multiple data rows for the same date, we&amp;#39;ll calculate subtotals for that date also.&lt;/p&gt;
&lt;p&gt;In order to add Subtotals and Grand Total rows, we need to simply add up the values of each column and add a new row to display the result. But here we&amp;#39;ll use the data aggregation feature in &lt;b&gt;C1FlexGrid &lt;/b&gt;to display values.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use the Subtotal method to calculate aggregate value&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="padding-left:60px;"&gt;&lt;code&gt;// Clear subtotal.&lt;br /&gt;this.c1FlexGrid1.Subtotal(AggregateEnum.Clear);&lt;br /&gt;// Sort the contents of the grid.&lt;br /&gt;this.c1FlexGrid1.Sort(SortFlags.Ascending, 0, 1);&lt;br /&gt;// Calculate the grandtotal.&lt;br /&gt;this.c1FlexGrid1.Subtotal(AggregateEnum.Sum, -1, -1, 2, &amp;quot;Total&amp;quot;);&lt;br /&gt;// Calculate the subtotal.&lt;br /&gt;this.c1FlexGrid1.Subtotal(AggregateEnum.Sum, 0, 0, 2, &amp;quot;{0:MM/dd} Subtotals&amp;quot;);&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;First let&amp;#39;s remove the existing aggregate row. The data in the grid is sorted on two fields, first being date and then classified as per the product category. The first parameter in the SubTotal method, used to calculate the total and subtotal values, is the aggregate function type (function type is Sum in this case). Parameters 2 ~ 4 are outline level, grouping columns and aggregate columns. Instead of a specific column, -1 is used as the grouping column of the GrandTotal row. For subtotals column, it is set to 0 (Date column). The aggregate column in both cases (GrandTotal and Subtotal) is column 2 (Proceeds) in the code above. Finally, set &amp;quot;Total&amp;quot; in the caption of the totals row and a date placeholder in the caption of the subtotals row. That&amp;#39;s all we need to do to set aggregate rows in C1FlexGrid!&lt;/p&gt;
&lt;p&gt;For the GrandTotal row we will specify the average of the Gross Margin Rage column. Please note that the Gross Margin Rate of the SubTotals row is not calculated. &lt;/p&gt;
&lt;p&gt;Let&amp;#39;s modify the display style for aggregate rows so that they are highlighted in the grid.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;CellStyle cellStyle = c1FlexGrid1.Styles[CellStyleEnum.GrandTotal];&lt;br /&gt;cellStyle.BackColor = Color.Blue;&lt;br /&gt;cellStyle.ForeColor = Color.White;&lt;br /&gt;cellStyle.Font = new Font(Font, FontStyle.Bold);&lt;br /&gt;cellStyle = this.c1FlexGrid1.Styles[CellStyleEnum.Subtotal0];&lt;br /&gt;cellStyle.BackColor = Color.Orchid;&lt;br /&gt;cellStyle.ForeColor = Color.White;&lt;br /&gt;cellStyle.Font = new Font(Font, FontStyle.Bold);&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Here, we specify the cell style to change the display. In this application we are setting the cell background of the totals row to blue and the values to white. These are in bold. Cell styles for subtotals are also set in the same way.&lt;/p&gt;
&lt;p&gt;Now let&amp;#39;s run the application. Notice the Totals row at the bottom of &lt;b&gt;C1FlexGrid&lt;/b&gt;. Values for a particular date will be displayed in the Subtotals rows. We&amp;#39;ve now demonstrated how it&amp;#39;s simple to add aggregate rows to the grid by using C1FlexGrid methods.&lt;/p&gt;
&lt;h2&gt;Visual Display for Gross Margin Rate&lt;/h2&gt;
&lt;p&gt;Let&amp;#39;s make some more changes. Just like the aggregate rows, we&amp;#39;ll change the color of the GrossMarginRate column. We want to show visually where the GrossMarginRate is higher and fill the cell proportionally according to the value in the gross margin rate, sort of like a Progress Bar. &lt;/p&gt;
&lt;p&gt;Let&amp;#39;s change the DrawMode property of &lt;b&gt;C1FlexGrid&lt;/b&gt; from Normal to OwnerDraw. Now the OwnerDrawCell event will be fired when the cell is rendered.&lt;/p&gt;
&lt;p&gt;The code for the OwnerDrawCell event is as follows:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// Calculate horizontal width.&lt;br /&gt;Rectangle rc = this.c1FlexGrid1.GetCellRect(e.Row, &amp;quot;Column Index&amp;quot;);&lt;br /&gt;rc.Width = (int)(this.c1FlexGrid1.Cols[e.Col].WidthDisplay * &amp;quot;Gross Margin Rate&amp;quot;);&lt;br /&gt;// Draw the background of the cell.&lt;br /&gt;e.DrawCell(DrawCellFlags.Background | DrawCellFlags.Border);&lt;br /&gt;// Display bar graph.&lt;br /&gt;rc.Inflate(-2, -2);&lt;br /&gt;e.Graphics.FillRectangle(Brushes.LimeGreen, rc);&lt;br /&gt;rc.Inflate(-1, -1);&lt;br /&gt;e.Graphics.FillRectangle(Brushes.PaleGreen, rc);&lt;br /&gt;// Draw the contents of the cell.&lt;br /&gt;e.DrawCell(DrawCellFlags.Content);&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;First, we get the size of the cell (cell that displays the GrossMarginRate value). Then, calculate the horizontal width of the cell proportional to the actual Gross Margin Rate. Render the background, border, and so on based on the calculated value and set the colors for border and the fill color of the rectangle to display a horizontal bar graph. Finally, display the cell value (GrossMarginRate).&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/application1.png"&gt;&lt;img src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/application1.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Set the placeholders &amp;quot;{0}&amp;quot; and &amp;quot;{1}&amp;quot; to display page number and total page numbers respectively.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;In Part 2, we used the &lt;b&gt;C1FlexGrid&lt;/b&gt; features to add aggregate rows, draw cells, and print the grid data. All this was done by simply calling a few methods. In the &lt;a target="_blank" href="http://helpcentral.componentone.com/CS/blogs/windev/archive/2010/02/09/BecomeAnExpertPart3.aspx"&gt;Part 3&lt;/a&gt;, we&amp;#39;ll enhance our application&amp;#39;s capabilities further by adding a few more controls to it along with &lt;b&gt;C1FlexGrid&lt;/b&gt; and exporting data from the grid to a PDF file.&lt;/p&gt;
&lt;h2&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windev.BecomeAnExpert/8664.Part2.zip"&gt;Download Sample Project&lt;/a&gt;&lt;/h2&gt;
&lt;h2&gt;Acknowledgements&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Article copyright &amp;copy; 2009&amp;nbsp;Shogo Takayama&amp;nbsp;＆ Shoeisha Co., Ltd. http://www.shoeisha.co.jp/ &lt;/li&gt;
&lt;li&gt;&lt;a href="http://codezine.jp/"&gt;http://codezine.jp/&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;These contents were made by GrapeCity inc., Japan. &lt;a href="http://www.grapecity.com/japan/"&gt;http://www.grapecity.com/japan/&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Translated by Vidhi Kapoor (GrapeCity India Pvt. Ltd.)&lt;/li&gt;
&lt;li&gt;Edited by Greg Lutz (ComponentOne)&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.componentone.com/CS/aggbug.aspx?PostID=228434" width="1" height="1"&gt;</description><category domain="http://blogs.componentone.com/CS/blogs/windev/archive/tags/WinForms/default.aspx">WinForms</category><category domain="http://blogs.componentone.com/CS/blogs/windev/archive/tags/C1FlexGrid/default.aspx">C1FlexGrid</category><category domain="http://blogs.componentone.com/CS/blogs/windev/archive/tags/Become+an+Expert/default.aspx">Become an Expert</category></item><item><title>Migrating to Palomino: from C1WebGrid to C1GridView</title><link>http://blogs.componentone.com/CS/blogs/webdev/archive/2010/02/05/migrating-to-palomino-from-webgrid-to-c1gridview.aspx</link><pubDate>Fri, 05 Feb 2010 19:46:00 GMT</pubDate><guid isPermaLink="false">6ffc9ae0-0270-4839-b826-46696419445e:228429</guid><dc:creator>C1_ChrisB</dc:creator><slash:comments>0</slash:comments><description>&lt;h2&gt;Introduction&lt;/h2&gt;  &lt;p&gt;In recent months, you may have noticed some changes within the Studio for ASP.NET including the addition of new controls and utilities like Foxy for ASP.NET, our visual style designer for the ASP.NET controls. Some of these additions are entirely new concepts for the Studio for ASP.NET, while others have existing counterparts that they will be replacing. The &lt;b&gt;C1GridView&lt;/b&gt; is a prime example of the latter, as it will be replacing the &lt;b&gt;C1WebGrid&lt;/b&gt; in the months to come.&lt;/p&gt;  &lt;p&gt;The &lt;b&gt;C1GridView&lt;/b&gt; and our other new controls, collectively referred to as our Palomino controls, are fully AJAX-enabled and take advantage of many promising technologies like CSS, XHTML, and more. For many of you this may seem unsettling, especially those of you who have been using our ASP.NET controls for several years now; however, there is no need to fret as this article will walk you through the &lt;b&gt;C1WebGrid&lt;/b&gt; to &lt;b&gt;C1GridView&lt;/b&gt; migration.&lt;/p&gt;  &lt;h2&gt;Prerequisites&lt;/h2&gt;  &lt;p&gt;For this tutorial, you will need to download ComponentOne Studio for ASP.NET and the &lt;b&gt;C1WebGrid&lt;/b&gt; sample application. A free 30-day full-featured trial and yearly subscriptions of ComponentOne Studio for ASP.NET are available from the ComponentOne website.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.componentone.com/SuperProducts/StudioASPNET/" target="_blank"&gt;Download Studio for ASP.NET&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev.WebGrid_5F00_Migration/3666.Beginning_5F00_Application.zip"&gt;Download C1WebGrid sample application&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;h2&gt;Getting Started&lt;/h2&gt;  &lt;p&gt;Open the sample application in Microsoft Visual Studio 2008, and add the necessary references to the sample by clicking by going to &lt;b&gt;Project | Add Reference&lt;/b&gt; and browse to &lt;b&gt;C:\Program Files\ComponentOne\Studio for ASP.NET\bin\&lt;/b&gt;. The following assemblies require project references:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;C1.Web.UI.3.dll &lt;/li&gt;    &lt;li&gt;C1.Web.UI.3.Controls.3.dll &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;* Please note that the assemblies may be located in the following file path: &lt;b&gt;C:\Program Files\ComponentOne Studio.NET 2.0\ bin\&lt;/b&gt;. Also notice that there are two versions of the C1.Web.UI assemblies; one that targets the .NET Framework 2.0 and one that targets the .NET Framework 3.0.&lt;/p&gt;  &lt;p&gt;Directly beneath the Page directive add the following directive for the &lt;b&gt;C1GridView&lt;/b&gt;:&lt;/p&gt;  &lt;p style="padding-left:30px;"&gt;&lt;code&gt;&amp;lt;%@ Register Assembly=&amp;quot;C1.Web.UI.Controls.3&amp;quot; Namespace=&amp;quot;C1.Web.UI.Controls.C1GridView&amp;quot; TagPrefix=&amp;quot;C1GridView&amp;quot; %&amp;gt;&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;You should notice that &lt;b&gt;C1GridView&lt;/b&gt;’s directive is very similar to that of the &lt;b&gt;C1WebGrid&lt;/b&gt;.&lt;/p&gt;  &lt;p&gt;If you run the application at this point, you will see only the &lt;b&gt;C1WebGrid&lt;/b&gt;; it should appear as follows:&lt;/p&gt;  &lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/4162.WG_5F00_GV_5F00_1.jpg"&gt;&lt;img border="0" src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/4162.WG_5F00_GV_5F00_1.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now let’s migrate this &lt;b&gt;C1WebGrid&lt;/b&gt; to the &lt;b&gt;C1GridView&lt;/b&gt;.&lt;/p&gt;  &lt;h2&gt;Migrating C1WebGrid to C1GridView&lt;/h2&gt;  &lt;p&gt;First, switch to visual designer in Visual Studio and add an instance of the &lt;b&gt;C1GridView&lt;/b&gt; to the page by selecting it from the Visual Studio Toolbox and dragging it to the page. Once the &lt;b&gt;C1GridView&lt;/b&gt; has been added, open its smart tag (the arrow in the upper-right corner of the control) and from the Data Source drop down select AccessDataSource1 as shown below:&lt;/p&gt;  &lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/2845.WG_5F00_GV_5F00_2.jpg"&gt;&lt;img border="0" src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/2845.WG_5F00_GV_5F00_2.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;After selecting AccessDataSource1, the &lt;b&gt;C1GridView&lt;/b&gt; will now appear as follows:&lt;/p&gt;  &lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/8244.WG_5F00_GV_5F00_3.jpg"&gt;&lt;img border="0" src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/8244.WG_5F00_GV_5F00_3.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Before we continue any further, lets give the &lt;b&gt;C1GridView&lt;/b&gt; a more appealing look for our users by leveraging the new VisualStyle property and one of the five styles included with the Studio for ASP.NET. To do this, open the &lt;b&gt;C1GridView&lt;/b&gt;’s smart tag and select Office2007Blue from the VisualStyle dropdown.&lt;/p&gt;  &lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/8255.WG_5F00_GV_5F00_4.jpg"&gt;&lt;img border="0" src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/8255.WG_5F00_GV_5F00_4.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I would like to point out that the &lt;b&gt;C1GridView&lt;/b&gt; automatically generates a checkbox column for Boolean columns, rather than just displaying true or false. With the &lt;b&gt;C1WebGrid&lt;/b&gt;, this is certainly possible; however, this would require you, the developer, to manually set this up using a template column.&lt;/p&gt;  &lt;p&gt;Now that we have given our users a more aesthetically appealing look, let’s focus on the functionality that we will be providing to the users. The first item of business in terms of functionality is to allow our end-users to sort, move, and size columns along with enabling paging which can be done by changing the AllowColSizing, AllowColMoving, AllowSorting, and AllowPaging properties to True in the Visual Studio Properties menu. In addition to this, I would also suggest selecting the following C1GridView.CallbackOptions in the Properties menu:&lt;/p&gt;  &lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/1731.WG_5F00_GV_5F00_5.jpg"&gt;&lt;img border="0" src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/1731.WG_5F00_GV_5F00_5.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Just like with the &lt;b&gt;C1WebGrid&lt;/b&gt;, these changes will not have any real effect on the way the &lt;b&gt;C1GridView&lt;/b&gt; is displayed to the end-user; however, changing these properties will greatly increase the usability of the control. If you run the application, you can see that columns in the &lt;b&gt;C1GridView&lt;/b&gt; can be moved, sized, and sorted without requiring a full page refresh, and the same goes for paging. Now, let’s move on to some of the finer modifications that will be necessary to recreate the existing &lt;b&gt;C1WebGrid&lt;/b&gt;.&lt;/p&gt;  &lt;p&gt;To make these finer modifications, it is not necessary to use code, though it can be done just as easily this way, but rather the &lt;b&gt;C1GridView&lt;/b&gt;’s Property Builder. To open the Property Builder, open the &lt;b&gt;C1GridView&lt;/b&gt;’s smart tag and select Property Builder; the following dialog box will appear.&lt;/p&gt;  &lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/8182.WG_5F00_GV_5F00_6.jpg"&gt;&lt;img border="0" src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/8182.WG_5F00_GV_5F00_6.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;From the dialog box, select the Show Filter checkbox under the Header and Footer portion of the menu, and then select Columns from the list of options on the left. Before moving on, I would like to mention that filtering is a built-in feature of the &lt;b&gt;C1GridView&lt;/b&gt; control with plenty of options; this is a feature that you need to manually design and code for the &lt;b&gt;C1WebGrid&lt;/b&gt;. Alternatively, changing the ShowFilter property to True in the Properties menu of Visual Studio would accomplish the same task.&lt;/p&gt;  &lt;p&gt;Now in the Columns portion of the Property Builder, you will see the following:&lt;/p&gt;  &lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/2337.WG_5F00_GV_5F00_7.jpg"&gt;&lt;img border="0" src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/2337.WG_5F00_GV_5F00_7.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The Selected Columns portion represents the columns that will appear in the &lt;b&gt;C1GridView&lt;/b&gt;, while the Available Columns represent the columns and types of columns that you can add to the &lt;b&gt;C1GridView&lt;/b&gt; like Image, Template, or Data columns. From the Selected Columns portion, click on CategoryName and change the RowMerge property to Free and the SortDirection property to Ascending; effectively, these changes will sort the CategoryName column alphabetically in ascending order while merging any repeating, like values into one “merged” cell as shown below.&lt;/p&gt;  &lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/2671.WG_5F00_GV_5F00_8.jpg"&gt;&lt;img border="0" src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/2671.WG_5F00_GV_5F00_8.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now from the Selected Columns in the Property Builder, select the ProductID column and set its SortDirection property to Ascending to sort this column alphabetically in ascending order. Afterwards, select the UnitPrice column and set its DataFormatString to {0:c} to format the column as a currency, rather than just displaying this column’s value as an unformatted decimal value; you can manually type {0:c} in for the property or just select it from the dropdown.&lt;/p&gt;  &lt;p&gt;Next, add a Band from the list of available columns to the selected columns and move the Band below the ProductName column by clicking the Move Column Up button in the Property Builder. After the Band has been moved to its proper place, select it and change its HeaderText property to Pricing and Availability. Afterwards, all that is left to do with the Band column is to move all columns below it into the Band column by clicking the Move Column Up button in the Property Builder. Once this is done, the Select Columns will look as follows:&lt;/p&gt;  &lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/4760.WG_5F00_GV_5F00_9.jpg"&gt;&lt;img border="0" src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/4760.WG_5F00_GV_5F00_9.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now select Delete from under the Command Field in Available Columns and add it the selected columns. After adding this, change its ShowDeleteButton to False and the ShowFilterButton to True; this will change this column from a delete column to the filter column. After this, change the ButtonType from Link to Image, then add the following to the FilterImageUrl property: ~/Images/filter.gif. This will make the column link for filtering to an image rather than a text link. Afterwards, run the application and your &lt;b&gt;C1GridView&lt;/b&gt; should now look as follows:&lt;/p&gt;  &lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/3617.WG_5F00_GV_5F00_10.jpg"&gt;&lt;img border="0" src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/3617.WG_5F00_GV_5F00_10.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Return to the &lt;b&gt;C1GridView&lt;/b&gt;’s Property Builder, but this time select Paging from the list of sections on the far left.&lt;/p&gt;  &lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/5125.WG_5F00_GV_5F00_11.jpg"&gt;&lt;img border="0" src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/5125.WG_5F00_GV_5F00_11.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Once you are in the Paging section, change the mode from Numeric to NextPreviousFirstLast; the &lt;b&gt;C1GridView&lt;/b&gt; will not display as follows, rather than using numbers to navigate through the data.&lt;/p&gt;  &lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/7612.WG_5F00_GV_5F00_12.jpg"&gt;&lt;img border="0" src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/7612.WG_5F00_GV_5F00_12.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The last thing that needs to be done is adding a RowHeader, which is a new feature of the &lt;b&gt;C1GridView&lt;/b&gt;. To do this, select the &lt;b&gt;C1GridView&lt;/b&gt; and go to the Visual Studio Properties menu; locate RowHeader, expand it, and change its Visible property to True to display the RowHeader.&lt;/p&gt;  &lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/2451.WG_5F00_GV_5F00_13.jpg"&gt;&lt;img border="0" src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/2451.WG_5F00_GV_5F00_13.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If you run the application now, the &lt;b&gt;C1GridView&lt;/b&gt; is complete and should display as follows:&lt;/p&gt;  &lt;p style="padding-left:30px;"&gt;&lt;a href="http://helpcentral.componentone.com/CS/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/1738.WG_5F00_GV_5F00_14.jpg"&gt;&lt;img border="0" src="http://helpcentral.componentone.com/CS/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/webdev/1738.WG_5F00_GV_5F00_14.jpg" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Feel free to take a few minutes at this point to use the &lt;b&gt;C1GridView&lt;/b&gt; and try some of its new features like filtering and row selection using the row header.&lt;/p&gt;  &lt;h2&gt;Programming Considerations&lt;/h2&gt;  &lt;p&gt;Now as easy as this was, you may still be concerned about how things will be changing in terms of code, which is understandable. One of the major code changes in the &lt;b&gt;C1GridView&lt;/b&gt; over the &lt;b&gt;C1WebGrid&lt;/b&gt; is that the Items collection is now referred to as the Rows collection. So the &lt;b&gt;C1WebGrid&lt;/b&gt;’s ItemCreated event is now referred to as the RowCreated event in the &lt;b&gt;C1GridView&lt;/b&gt;; the event still works the same way, but is just named differently. Let’s make use of the &lt;b&gt;C1GridView&lt;/b&gt;’s RowDataBound event now to add a little bit more to the UnitsInStock column.&lt;/p&gt;  &lt;p&gt;First, add an event handler for &lt;b&gt;C1GridView&lt;/b&gt;’s RowDataBound event. After you have done this, navigate to the code behind of your page and add the following using statement to the top:&lt;/p&gt;  &lt;p style="padding-left:30px;"&gt;&lt;code&gt;using C1.Web.UI.Controls.C1GridView;&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;After this, locate the RowDataBound event and add the following code:&lt;/p&gt;  &lt;p style="padding-left:30px;"&gt;&lt;code&gt;if (e.Row.RowType == C1.Web.UI.Controls.C1GridView.C1GridViewRowType.DataRow &amp;amp;&amp;amp; e.Row != null)&lt;/code&gt;&lt;code&gt;&lt;/code&gt;&lt;/p&gt;  &lt;p style="padding-left:30px;"&gt;&lt;code&gt;{&lt;/code&gt;&lt;/p&gt;  &lt;p style="padding-left:60px;"&gt;&lt;code&gt;e.Row.Cells[6].Text = string.Format(&amp;quot;{0} Items&amp;quot;, e.Row.Cells[6].Text);&lt;/code&gt;&lt;/p&gt;  &lt;p style="padding-left:30px;"&gt;&lt;code&gt;}&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;This code snippet will make each cell under the UnitsInStock column display its value followed by “Items”. At the end of this article, you can download the full list of differences between the &lt;b&gt;C1WebGrid&lt;/b&gt; and the &lt;b&gt;C1GridView&lt;/b&gt;.&lt;/p&gt;  &lt;h2&gt;Conclusion&lt;/h2&gt;  &lt;p&gt;Now that you have seen how to migrate a ComponentOne ASP.NET control to an updated Palomino control first hand, you can confidently supercharge your existing ASP.NET application by upgrading to &lt;b&gt;C1GridView&lt;/b&gt; and the ComponentOne Studio for ASP.NET.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Download this article: (Please visit the site to view this media) &lt;/li&gt;    &lt;li&gt;Download document with programming considerations: (Please visit the site to view this media) &lt;/li&gt; &lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.componentone.com/CS/aggbug.aspx?PostID=228429" width="1" height="1"&gt;</description><category domain="http://blogs.componentone.com/CS/blogs/webdev/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.componentone.com/CS/blogs/webdev/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://blogs.componentone.com/CS/blogs/webdev/archive/tags/C1GridView/default.aspx">C1GridView</category><category domain="http://blogs.componentone.com/CS/blogs/webdev/archive/tags/Palomino/default.aspx">Palomino</category><category domain="http://blogs.componentone.com/CS/blogs/webdev/archive/tags/Studio+for+ASP.NET/default.aspx">Studio for ASP.NET</category></item><item><title>We're Coming to See You at SPTechCon San Francisco</title><link>http://blogs.componentone.com/CS/blogs/c1buzz/archive/2010/02/03/we-re-coming-to-see-you-at-sptechcon-san-francisco.aspx</link><pubDate>Wed, 03 Feb 2010 18:23:00 GMT</pubDate><guid isPermaLink="false">6ffc9ae0-0270-4839-b826-46696419445e:228314</guid><dc:creator>C1_EveT</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Visit Dan Beall at booth #503 to learn about what&amp;#39;s new in SharePoint and to receive a complimentary C1 branded hat. They go fast, so stop by early!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.componentone.com/CS/aggbug.aspx?PostID=228314" width="1" height="1"&gt;</description></item><item><title>Test Drive the C1 Web Parts</title><link>http://blogs.componentone.com/CS/blogs/c1buzz/archive/2010/02/02/test-drive-the-c1-web-parts.aspx</link><pubDate>Tue, 02 Feb 2010 22:00:00 GMT</pubDate><guid isPermaLink="false">6ffc9ae0-0270-4839-b826-46696419445e:228264</guid><dc:creator>C1_EveT</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;&lt;span class="UIStory_Message"&gt;Visit&amp;nbsp;the SharePoint demo site: &lt;a href="http://tinyurl.com/yhfl8b8" target="_blank" rel="nofollow"&gt;&lt;font color="#3b5998"&gt;http://tinyurl.com/yhfl8b8&lt;/font&gt;&lt;/a&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="UIStory_Message"&gt;Username: sitevisitor &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="UIStory_Message"&gt;Password: sitevisitor&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span class="UIStory_Message"&gt;Enjoy and buckle-up! &lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.componentone.com/CS/aggbug.aspx?PostID=228264" width="1" height="1"&gt;</description></item><item><title>Become an Expert Part 1: Create a Sales Management Application using ComponentOne Studio for WinForms</title><link>http://blogs.componentone.com/CS/blogs/windev/archive/2010/01/29/BecomeAnExpertPart1.aspx</link><pubDate>Fri, 29 Jan 2010 20:00:00 GMT</pubDate><guid isPermaLink="false">6ffc9ae0-0270-4839-b826-46696419445e:227012</guid><dc:creator>C1_GregL</dc:creator><slash:comments>4</slash:comments><description>&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;Visual Studio provides a number of standard controls, but every so often you may wish you could do something more. Most of us developers are aware that trying something complicated with standard controls means a lot of time will be spent on coding.&lt;/p&gt;
&lt;p&gt;ComponentOne Studio for WinForms (hereafter Studio for WinForms) offers a number of useful components that implement enhanced functionalities which are not included in standard controls. These are useful as standalone components, but with a little bit of effort, one can combine the features of a number of these components and create amazing applications in minutes.&lt;/p&gt;
&lt;p&gt;In this series, we will make use of a Sales Management application to show how easily you can &amp;quot;Become an Expert&amp;quot;. The first step in this application is creating a table to display sales data. The basic structure of this application will be created using the &lt;b&gt;C1FlexGrid&lt;/b&gt; control (included in Studio for WinForms).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Part 1: Create a Sales Management Application using ComponentOne Studio for WinForms&lt;/li&gt;
&lt;li&gt;Part 2: &lt;a href="http://helpcentral.componentone.com/CS/blogs/windev/archive/2010/02/05/BecomeAnExpertPart2.aspx"&gt;Adding Features to the Sales Management Application&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Part 3: &lt;a href="http://helpcentral.componentone.com/CS/blogs/windev/archive/2010/02/09/BecomeAnExpertPart3.aspx"&gt;Adding a Ribbon Interface&amp;nbsp;and Export Options&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Part 4: &lt;a href="http://helpcentral.componentone.com/CS/blogs/windev/archive/2010/02/17/BecomeAnExpertPart4.aspx"&gt;Adding Charts to Analyze Sales Data&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Part 5: &lt;a href="http://helpcentral.componentone.com/CS/blogs/windev/archive/2010/03/08/BecomeAnExpertPart5.aspx"&gt;Generating Reports&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Part 1 Overview&lt;/h2&gt;
&lt;p&gt;Microsoft Visual Studio contains a number of standard controls. ComponentOne Studio provides easy to use controls with enhanced features which can be used in Visual Studio along with standard controls. In this series, we make use of these controls to create a Sales Management Application. In the first&amp;nbsp;part of this series, we create a table to display sales data using &lt;b&gt;C1FlexGrid&lt;/b&gt; (a control in ComponentOne Studio for WinForms) as the base.&lt;/p&gt;
&lt;h3&gt;Target Audience&lt;/h3&gt;
&lt;ul style="MARGIN-TOP:0in;"&gt;
&lt;li&gt;Those who have created or want to create Windows applications in .NET.&lt;/li&gt;
&lt;li&gt;Those who find standard controls somewhat limited in their usage.&lt;/li&gt;
&lt;li&gt;Those who have some preliminary knowledge of databases.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Environment&lt;/h3&gt;
&lt;ul style="MARGIN-TOP:0in;"&gt;
&lt;li&gt;Visual Studio 2005 or 2008&lt;/li&gt;
&lt;li&gt;SQL Server 2005&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Set-up the Application&lt;/h2&gt;
&lt;p&gt;Before you start, you&amp;rsquo;ll need to have ComponentOne Studio for WinForms downloaded and installed. This includes the &lt;b&gt;C1FlexGrid&lt;/b&gt; control.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;Points to Remember: This application has been created in Visual Studio 2008. Installation of .NET Framework 3.5 is a prerequisite for running the provided sample. We will also be creating a SQL Server database, however you can skip over this section to create an unbound application.&lt;/i&gt;&lt;/p&gt;
&lt;ol style="MARGIN-TOP:0in;"&gt;
&lt;li&gt;Download Studio for WinForms at &lt;a href="http://www.componentone.com/SuperProducts/StudioWinForms/"&gt;http://www.componentone.com/SuperProducts/StudioWinForms/&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Create a WinForms application in Microsoft Visual Studio. Open Microsoft Visual Studio 2008, and select &amp;quot;File | New | Project&amp;quot; from the main menu. For this article, select C# as the language and select .NET Framework 2.0. Name the project &amp;quot;Sales Management App&amp;quot; in the Name field and click the OK button.&lt;b style="mso-bidi-font-weight:normal;"&gt; &lt;br /&gt;&lt;br /&gt;Note:&lt;/b&gt; &lt;b&gt;C1FlexGrid&lt;/b&gt; is supported under the 2.0 or 3.x Frameworks and can be used in either Visual Studio 2005 or 2008 environments. You can choose the Framework and the environment. The code in this tutorial will be in C#.&lt;/li&gt;
&lt;li&gt;Drag and drop &lt;b style="mso-bidi-font-weight:normal;"&gt;C1FlexGrid&lt;/b&gt; from your Toolbox onto your page.&lt;span style="font-family:Verdana;"&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Drag and drop a &lt;b style="mso-bidi-font-weight:normal;"&gt;DateTimePicker&lt;/b&gt; to the form and place it in the top right corner of Form1.&lt;/li&gt;
&lt;li&gt;Set the Format property of the DateTimePicker to Custom and set the Custom Format property to &amp;ldquo;yyyy/MM.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Set the Size of the DateTimePicker to Width=96, Height=20.&lt;/li&gt;
&lt;li&gt;Give Form1 a Title of &amp;ldquo;Sales Management&amp;rdquo; by settings its Text property.&lt;/li&gt;
&lt;li&gt;In Form1.cs, add the following line of code above the namespace. This will give us direct access to the SqlClient library for connecting to our database.&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;&lt;code&gt;using System.Data.SqlClient;&lt;/code&gt; &lt;/blockquote&gt;
&lt;h2&gt;Create the User Interface&lt;/h2&gt;
&lt;p&gt;Now let&amp;rsquo;s decide on the content of our application. A Sales Management application should contain the following items:&lt;/p&gt;
&lt;ul style="MARGIN-TOP:0in;"&gt;
&lt;li&gt;Date&lt;/li&gt;
&lt;li&gt;Proceeds&lt;/li&gt;
&lt;li&gt;Payments (Cost)&lt;/li&gt;
&lt;li&gt;Gross Margin&lt;/li&gt;
&lt;li&gt;Gross Margin Rate&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Let&amp;rsquo;s create a table to display these 5 items.&lt;/p&gt;
&lt;p&gt;By default, &lt;b&gt;C1FlexGrid&lt;/b&gt; consists of 50 rows &amp;times; 10 columns. Since we need only 5 columns in our application, we will set Cols.Count property (located under the Cols node) to 5 in the FlexGrid property window. We do not need any rows in the grid at the start of the application, so we will set the Rows.Count property to 1.&lt;/p&gt;
&lt;p class="Art"&gt;&lt;a href="http://helpcentral.componentone.com/CS/blogs/windev/Print2.png"&gt;&lt;img height="546" width="335" src="http://helpcentral.componentone.com/CS/blogs/windev/BecomeAnExpert/Print2.png" border="0" style="width:335px;height:546px;" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Setting up the Columns&lt;/h3&gt;
&lt;p&gt;We need to label each of our five columns. To do this we can simply select a column and modify the Column Caption property using the smart tag. Name the five columns Date, Proceeds, Payments, GrossMargin, and GrossMarginRate.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;a href="http://helpcentral.componentone.com/CS/blogs/windev/Print3.png"&gt;&lt;img height="410" width="566" src="http://helpcentral.componentone.com/CS/blogs/windev/BecomeAnExpert/Print3.png" border="0" style="width:566px;height:410px;" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Setting Input Constraints&lt;/h3&gt;
&lt;p&gt;Next we want to format the &amp;ldquo;Proceeds&amp;rdquo; and &amp;ldquo;Payments&amp;rdquo; columns to allow only numeric input. To set input constraints and captions for each column, we can make the desired changes by simply selecting a column and modifying the settings using the smart tag.&lt;/p&gt;
&lt;p&gt;Select the Proceeds column, and click the smart tag to open the C1FlexGrid Tasks menu. Locate the Format Strings textbox and click the ellipsis button. This opens the &amp;ldquo;Format String&amp;rdquo; dialog box. Select &amp;quot;Currency&amp;quot; as the &amp;quot;Format type&amp;quot;.&lt;/p&gt;
&lt;p&gt;Repeat the steps above for the Payments column.&lt;/p&gt;
&lt;p class="Art"&gt;&lt;span style="mso-bidi-font-size:10.5pt;"&gt;&lt;/span&gt;&lt;a href="http://helpcentral.componentone.com/CS/blogs/windev/Print4.png"&gt;&lt;img height="473" width="566" src="http://helpcentral.componentone.com/CS/blogs/windev/BecomeAnExpert/Print4.png" border="0" style="width:566px;height:473px;" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The GrossMargin and GrossMarginRate columns will contain computed values; therefore, we won&amp;rsquo;t allow editing for these columns.&lt;/p&gt;
&lt;p&gt;Select the GrossMargin column, and click the smart tag to open the C1FlexGrid Tasks menu. Uncheck the &amp;ldquo;Allow Editing&amp;rdquo; option. Repeat the steps for the GrossMarginRate column.&lt;/p&gt;
&lt;p class="Art"&gt;&lt;a href="http://helpcentral.componentone.com/CS/blogs/windev/Print5.png"&gt;&lt;img height="413" width="384" src="http://helpcentral.componentone.com/CS/blogs/windev/BecomeAnExpert/Print5.png" border="0" style="width:384px;height:413px;" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To sum up, only numeric values can be entered in &amp;ldquo;Proceeds&amp;rdquo; and &amp;ldquo;Payments&amp;rdquo; columns while input is disabled in other columns.&lt;/p&gt;
&lt;p&gt;So by simply setting a few properties, we can restrict the entry of certain type values in some columns and prohibit entering any values in other columns.&lt;/p&gt;
&lt;h3&gt;Calculating Values&lt;/h3&gt;
&lt;p&gt;Next, let&amp;rsquo;s calculate the values of GrossMargin and GrossMarginRate columns. To do this, add C1FlexGrid&amp;rsquo;s AfterEdit event to the application. This event fires after the cell has been edited. Add the following code:&lt;/p&gt;
&lt;blockquote&gt;&lt;code&gt;double proceeds = this.c1FlexGrid1[e.Row, 1] == null&lt;br /&gt;? 0 : double.Parse(this.c1FlexGrid1[e.Row, 1].ToString());&lt;br /&gt;double payments = this.c1FlexGrid1[e.Row, 2] == null&lt;br /&gt;? 0 : double.Parse(this.c1FlexGrid1[e.Row, 2].ToString());&lt;br /&gt;double grossMargin = proceeds - payments;&lt;br /&gt;this.c1FlexGrid1[e.Row, 3] = grossMargin;&lt;br /&gt;this.c1FlexGrid1[e.Row, 4] = proceeds != 0 ? grossMargin / proceeds : 0;&lt;/code&gt; &lt;/blockquote&gt;
&lt;p&gt;Values of Proceeds and Payments columns are converted to Double to calculate the GrossMargin. Null value is converted to 0. Subtract Payments from Proceeds to get GrossMargin amount (GrossMargin = Proceeds &amp;ndash; Payments). GrossMarginRate is calculated by dividing GrossMargin with Proceeds (GrossMarginRate = GrossMargin/Proceeds). When the value in the Proceeds column is 0, GrossMarginRate is also changed to 0. &lt;/p&gt;
&lt;p&gt;This is how we calculate GrossMargin and GrossMarginRate after the values in Proceeds and Payments columns have been entered.&lt;/p&gt;
&lt;h3&gt;Setting Date&lt;/h3&gt;
&lt;p&gt;Now let&amp;#39;s see how we can set dates in the fixed column for each row. Of course it is possible to enter the date every time, but for our convenience, let&amp;rsquo;s try setting the date automatically. Month and year are set to display the date on a monthly basis.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s use the DateTimePicker to set the date and month. Add the following code to dynamically change the row count of FlexGrid and values of the fixed column to the ValueChanged event of DateTimePicker.&lt;/p&gt;
&lt;blockquote&gt;&lt;code&gt;This.setDateCell();&lt;/code&gt; &lt;/blockquote&gt;
&lt;p&gt;Now we need to add the setDateCell method which deletes all rows excep the fixed row and adds rows with the selected date.&lt;/p&gt;
&lt;blockquote&gt;&lt;code&gt;private void setDateCell()&lt;br /&gt;{&lt;br /&gt;this.c1FlexGrid1.Rows.RemoveRange(1, this.c1FlexGrid1.Rows.Count - 1);&lt;br /&gt;&lt;br /&gt;DateTime startDate =&lt;br /&gt;new DateTime(this.dateTimePicker1.Value.Year,&lt;br /&gt;this.dateTimePicker1.Value.Month,&lt;br /&gt;1);&lt;br /&gt;&lt;br /&gt;DateTime value = startDate;&lt;br /&gt;&lt;br /&gt;while (value.Month == startDate.Month)&lt;br /&gt;{&lt;br /&gt;this.c1FlexGrid1.AddItem(value.ToShortDateString());&lt;br /&gt;value = value.AddDays(1);&lt;br /&gt;}&lt;br /&gt;}&lt;/code&gt; &lt;/blockquote&gt;
&lt;p&gt;By using this simple piece of code, we can add the date in the heading of each row and also add and delete rows.&lt;/p&gt;
&lt;p&gt;Let&amp;rsquo;s add a couple lines of code to the Form&amp;rsquo;s Load event so that the &lt;b&gt;C1FlexGrid&lt;/b&gt; is displaying some dates before we even select one.&lt;/p&gt;
&lt;blockquote&gt;&lt;code&gt;this.dateTimePicker1.Value = DateTime.Now;&lt;br /&gt;this.setDateCell();&lt;/code&gt; &lt;/blockquote&gt;
&lt;h3&gt;Loading and Registering Data&lt;/h3&gt;
&lt;p&gt;Now let&amp;rsquo;s try registering the entered data and loading this registered data into the grid. A &amp;#39;Sales&amp;#39;&amp;nbsp;table has to be created for registering the sales data. You can use the DBScript that&amp;#39;s included with the &lt;a href="http://helpcentral.componentone.com/CS/blogs/windev/BecomeAnExpert/Part1.zip"&gt;downloaded sample&lt;/a&gt; to generate the sales table.&lt;/p&gt;
&lt;p&gt;Add a button to the form with the text &amp;ldquo;Register,&amp;rdquo; and in its click event write the method for registering the data to the database.&lt;/p&gt;
&lt;p&gt;The method of registering data to the database and loading it to the grid has been summarized below (implement steps 1-7 in order). The following code should be placed in the Register button&amp;rsquo;s click event.&lt;/p&gt;
&lt;ol style="MARGIN-TOP:0in;"&gt;
&lt;li&gt;Create an instance of SqlConnection&lt;code&gt;&lt;br /&gt;&lt;br /&gt;SqlConnection connection = new SqlConnection(this.getConnectionString());&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Open database connection&lt;code&gt;&lt;br /&gt;&lt;br /&gt;connection.Open();&lt;br /&gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Create an instance of SqlCommand&lt;br /&gt;&lt;br /&gt;&lt;code&gt;SqlCommand command = new SqlCommand();&lt;/code&gt; &lt;/li&gt;
&lt;blockquote class="MsoNormal"&gt;&lt;code&gt;Set SQL command&lt;br /&gt;command.Connection = connection;&lt;br /&gt;command.CommandType = CommandType.Text;&lt;/code&gt; &lt;/blockquote&gt;
&lt;li&gt;Delete data by executing SQL commands&lt;/li&gt;
&lt;blockquote&gt;&lt;code&gt;DateTime selectedMonth&lt;br /&gt;= new DateTime(this.dateTimePicker1.Value.Year, this.dateTimePicker1.Value.Month, 1);&lt;br /&gt;&lt;br /&gt;command.CommandText =&lt;br /&gt;string.Format(&amp;quot;DELETE FROM Sales WHERE Date &amp;gt;= &amp;#39;{0}&amp;#39; AND Date &amp;lt; &amp;#39;{1}&amp;#39;&amp;quot;, &lt;br /&gt;selectedMonth, &lt;br /&gt;selectedMonth.AddMonths(1));&lt;br /&gt;command.ExecuteNonQuery();&lt;br /&gt;&lt;br /&gt;for (int i = 1; i &amp;lt; this.c1FlexGrid1.Rows.Count; i++)&lt;br /&gt;{&lt;br /&gt;if (this.c1FlexGrid1[i, 1] != null&lt;br /&gt;|| this.c1FlexGrid1[i, 2] != null)&lt;br /&gt;{&lt;br /&gt;string insert = &lt;br /&gt;string.Format(&amp;quot;INSERT Sales (Date, Proceeds, Payments, GrossMargin, GrossMarginRate) VALUES (&amp;#39;{0}&amp;#39;, {1}, {2}, {3}, {4})&amp;quot;,&lt;br /&gt;this.c1FlexGrid1[i, 0],&lt;br /&gt;this.c1FlexGrid1[i, 1] == null ? 0 : this.c1FlexGrid1[i, 1],&lt;br /&gt;this.c1FlexGrid1[i, 2] == null ? 0 : this.c1FlexGrid1[i, 2],&lt;br /&gt;this.c1FlexGrid1[i, 3],&lt;br /&gt;this.c1FlexGrid1[i, 4]);&lt;br /&gt;&lt;br /&gt;command.CommandType = CommandType.Text;&lt;br /&gt;command.CommandText = insert;&lt;br /&gt;command.ExecuteNonQuery();&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;/blockquote&gt;
&lt;li&gt;Dispose command&lt;/li&gt;
&lt;blockquote&gt;&lt;code&gt;command.Dispose();&lt;/code&gt; &lt;/blockquote&gt;
&lt;li&gt;Close database connection&lt;/li&gt;
&lt;blockquote&gt;&lt;code&gt;connection.Close();&lt;br /&gt;connection.Dispose();&lt;br /&gt;&lt;br /&gt;MessageBox.Show(&amp;quot;Data has been written to the database.&amp;quot;);&lt;/code&gt; &lt;/blockquote&gt;
&lt;/ol&gt;
&lt;p&gt;We used the following SQL command to delete records.&lt;/p&gt;
&lt;blockquote&gt;&lt;code&gt;DELETE FROM Sales &lt;br /&gt;WHERE Date &amp;gt;= &amp;#39;Start date of the month&amp;#39; AND Date &amp;lt; &amp;#39;Start date of the next month&amp;#39;&lt;/code&gt; &lt;/blockquote&gt;
&lt;p&gt;The range of dates selected in the table for sales data are specified in the WHERE clause. By setting a single month for the dates in the WHERE clause, we prevented registering data on a date that already existed in the table.&lt;/p&gt;
&lt;p&gt;We registered the sales data entered in &lt;b&gt;C1FlexGrid&lt;/b&gt; using the following SQL command.&lt;/p&gt;
&lt;blockquote&gt;&lt;code&gt;INSERT Sales (Date, Proceeds, Payments, GrossMargin, GrossMarginRate)&lt;br /&gt;VALUES (&amp;#39;Date&amp;#39;, &amp;lsquo;Proceeds&amp;rsquo;, &amp;lsquo;Payments&amp;rsquo;, &amp;lsquo;GrossMargin&amp;rsquo;, &amp;lsquo;GrossMarginRate&amp;rsquo;)&lt;/code&gt; &lt;/blockquote&gt;
&lt;p&gt;The data from &lt;b&gt;C1FlexGrid&lt;/b&gt; will be set as it is. Null values are acceptable in the &amp;ldquo;Proceeds&amp;rdquo; and &amp;ldquo;Payment&amp;rdquo; columns. They are registered as 0 in the database.&lt;/p&gt;
&lt;h3&gt;Getting Records&lt;/h3&gt;
&lt;p&gt;Let&amp;rsquo;s check the registered data. We will add another button to our Form and call it &amp;ldquo;Load.&amp;rdquo; In the Load button&amp;rsquo;s click event, add the following code:&lt;/p&gt;
&lt;blockquote&gt;&lt;code&gt;SqlConnection connection = new SqlConnection(this.getConnectionString());&lt;br /&gt;&lt;br /&gt;// Open database connection.&lt;br /&gt;connection.Open();&lt;br /&gt;&lt;br /&gt;// Generate an instance of SqlCommand from SqlConnection. &lt;br /&gt;SqlCommand command = connection.CreateCommand();&lt;br /&gt;&lt;br /&gt;DateTime selectedMonth &lt;br /&gt;= new DateTime(this.dateTimePicker1.Value.Year, this.dateTimePicker1.Value.Month, 1);&lt;br /&gt;&lt;br /&gt;string selectSQL &lt;br /&gt;= string.Format(&amp;quot;SELECT Date, Proceeds, Payments, GrossMargin, GrossMarginRate FROM Sales&amp;quot;&lt;br /&gt;+ &amp;quot; WHERE Date &amp;gt;= &amp;#39;{0}&amp;#39; AND Date &amp;lt; &amp;#39;{1}&amp;#39;&amp;quot;&lt;br /&gt;+ &amp;quot; ORDER BY Date&amp;quot;, selectedMonth, selectedMonth.AddMonths(1));&lt;br /&gt;&lt;br /&gt;// Set the SQL command to be executed.&lt;br /&gt;command.CommandText = selectSQL;&lt;br /&gt;&lt;br /&gt;// Execute the specified SQL command and create a SQLDataReader.&lt;br /&gt;SqlDataReader reader = command.ExecuteReader();&lt;br /&gt;&lt;br /&gt;// Dispose command. &lt;br /&gt;command.Dispose();&lt;br /&gt;&lt;br /&gt;// Move to the next record. &lt;br /&gt;while (reader.Read())&lt;br /&gt;{&lt;br /&gt;DateTime dbDate = Convert.ToDateTime(reader[&amp;quot;Date&amp;quot;]);&lt;br /&gt;&lt;br /&gt;this.c1FlexGrid1[dbDate.Day, 1] = reader[&amp;quot;Proceeds&amp;quot;];&lt;br /&gt;this.c1FlexGrid1[dbDate.Day, 2] = reader[&amp;quot;Payments&amp;quot;];&lt;br /&gt;this.c1FlexGrid1[dbDate.Day, 3] = reader[&amp;quot;GrossMargin&amp;quot;];&lt;br /&gt;this.c1FlexGrid1[dbDate.Day, 4] = reader[&amp;quot;GrossMarginRate&amp;quot;];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Close reader.&lt;br /&gt;reader.Close();&lt;br /&gt;&lt;br /&gt;// Close database connection.&lt;br /&gt;connection.Close();&lt;br /&gt;connection.Dispose();&lt;br /&gt;&lt;br /&gt;MessageBox.Show(&amp;quot;Data has been loaded to the grid.&amp;quot;);&lt;/code&gt; &lt;/blockquote&gt;
&lt;p&gt;Here we are creating a SqlConnection just as we did before when registering the data. We are using the following SQL statement for getting the records.&lt;/p&gt;
&lt;blockquote&gt;&lt;code&gt;SELECT Date, Proceeds, Payments, GrossMargin, GrossMarginRate &lt;br /&gt;FROM Sales &lt;br /&gt;WHERE Date &amp;gt;= &amp;lsquo;Start date of the month&amp;#39; &lt;br /&gt;AND Date &amp;lt; &amp;#39;Start date of the next month&amp;#39; &lt;br /&gt;ORDER BY Date&lt;/code&gt; &lt;/blockquote&gt;
&lt;p&gt;Only the date is added initially, and then the corresponding data for a particular date is added in the other columns. Therefore, data retrieved is based on the sorted date column.&lt;/p&gt;
&lt;p&gt;The following screenshot shows the sample application for registering the data.&lt;/p&gt;
&lt;p class="Art"&gt;&lt;a href="http://helpcentral.componentone.com/CS/blogs/windev/Print6.png"&gt;&lt;img height="580" width="487" src="http://helpcentral.componentone.com/CS/blogs/windev/BecomeAnExpert/Print6.png" border="0" style="width:487px;height:580px;" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;In Part 1 we have introduced Studio for WinForms and have explained the usage and features of &lt;b&gt;C1FlexGrid&lt;/b&gt;. Use &lt;b&gt;C1FlexGrid&lt;/b&gt; to create a simple data list display. Although the sample shown here is a Sales Management Application, with a few minor changes it can also be used as an accounting application. &lt;/p&gt;
&lt;p&gt;In &lt;a target="_blank" href="http://helpcentral.componentone.com/CS/blogs/windev/archive/2010/02/05/BecomeAnExpertPart2.aspx"&gt;Part 2&lt;/a&gt;, we will use more features from &lt;b&gt;C1FlexGrid&lt;/b&gt; and use the grid with other ComponentOne controls to create a feature rich application.&lt;/p&gt;
&lt;h2&gt;&lt;a href="http://helpcentral.componentone.com/CS/blogs/windev/BecomeAnExpert/Part1.zip"&gt;Download Part 1&amp;nbsp;Sample Project&lt;/a&gt;&lt;/h2&gt;
&lt;h3&gt;Acknowledgements&lt;/h3&gt;
&lt;ul style="MARGIN-TOP:0in;"&gt;
&lt;li&gt;Article copyright &amp;copy; 2009&amp;nbsp;Shogo Takayama&amp;nbsp;＆ Shoeisha Co., Ltd. http://www.shoeisha.co.jp/&lt;/li&gt;
&lt;li&gt;&lt;a href="http://codezine.jp/"&gt;http://codezine.jp/&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;These contents were made by GrapeCity inc., Japan. &lt;a href="http://www.grapecity.com/japan/"&gt;http://www.grapecity.com/japan/&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Translated by Vidhi Kapoor (GrapeCity India Pvt. Ltd.) &lt;/li&gt;
&lt;li&gt;Edited by Greg Lutz (ComponentOne)&lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.componentone.com/CS/aggbug.aspx?PostID=227012" width="1" height="1"&gt;</description><category domain="http://blogs.componentone.com/CS/blogs/windev/archive/tags/WinForms/default.aspx">WinForms</category><category domain="http://blogs.componentone.com/CS/blogs/windev/archive/tags/C1FlexGrid/default.aspx">C1FlexGrid</category><category domain="http://blogs.componentone.com/CS/blogs/windev/archive/tags/Become+an+Expert/default.aspx">Become an Expert</category></item><item><title>Easy Data Views in SharePoint - Studio for SharePoint Just Released</title><link>http://blogs.componentone.com/CS/blogs/sharepointwebparts/archive/2010/01/29/easy-data-views-in-sharepoint-studio-for-sharepoint-just-released.aspx</link><pubDate>Fri, 29 Jan 2010 15:42:00 GMT</pubDate><guid isPermaLink="false">6ffc9ae0-0270-4839-b826-46696419445e:228077</guid><dc:creator>leannel</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;2010 is going to be a big year for Studio for SharePoint and its individual Web Parts. 
We have started with 2010’s first release, which adds powerful new technology and introduces a brand new bundle. Below is a quick list of key points of this release:&lt;br /&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;b&gt;ComponentOne Studio for SharePoint&lt;/b&gt;&lt;br /&gt;Get all of the ComponentOne Web Parts in one package, and we add online support and a one year renewable subscription that entitles you to
anything we release as part of the Studio. That means you get maintenance updates, new features, and even new Web Parts at no extra cost.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Microsoft Excel Data Source&lt;/b&gt;&lt;br /&gt;All Web Parts can use Excel files as a data source. You don&amp;#39;t need Excel Web Services which means you can use Excel even if you don&amp;#39;t have Microsoft Office SharePoint Server (MOSS).&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Oracle Data Source&lt;/b&gt;&lt;br /&gt;Select Oracle tables and views to display with all of the ComponentOne
Web Parts. Just point and click. No need to worry about coding a connection.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;Able to Edit Data From All Data Sources&lt;/b&gt;&lt;br /&gt;Use ComponentOne DataGrid for SharePoint to edit and add data to SharePoint lists, SQL Server, Excel, and Oracle.&lt;/li&gt;

&lt;li&gt;&lt;b&gt;More Column Formatting Options&lt;/b&gt;&lt;br /&gt;Display columns in the DataGrid the way you want. Use the On-Board Designer to specify data formats, set column widths, show images, display
hyperlinks, set up grouping, and more.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;See for yourself. Test drive these Web Parts on our live SharePoint demo site: &lt;a href="http://webparts.componentone.com/webpartdemos/" target="_blank"&gt;LAUNCH LIVE DEMO&lt;/a&gt;. Log-in information for live demo site:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Username: sitevisitor&lt;/li&gt;&lt;li&gt;Password: sitevisitor&lt;/li&gt;&lt;/ul&gt;

&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.componentone.com/CS/aggbug.aspx?PostID=228077" width="1" height="1"&gt;</description><category domain="http://blogs.componentone.com/CS/blogs/sharepointwebparts/archive/tags/Web+Part/default.aspx">Web Part</category><category domain="http://blogs.componentone.com/CS/blogs/sharepointwebparts/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.componentone.com/CS/blogs/sharepointwebparts/archive/tags/2010/default.aspx">2010</category></item><item><title>Popular UI Volume 1 - Facebook Application Bar</title><link>http://blogs.componentone.com/CS/blogs/webdev/archive/2010/01/26/popular-ui-volume-1-facebook-application-bar.aspx</link><pubDate>Tue, 26 Jan 2010 18:33:00 GMT</pubDate><guid isPermaLink="false">6ffc9ae0-0270-4839-b826-46696419445e:227947</guid><dc:creator>C1_ChrisB</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;If you are a Facebook user like myself and &lt;a href="http://www.Facebook.com/press/info.php?statistics" target="_blank"&gt;350 million others&lt;/a&gt; then you probably noticed the application bar. If you don&amp;#39;t know what I&amp;#39;m talking about then check out this screenshot.     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/blogs/webdev/fbappbar1.png"&gt;&lt;img border="0" src="http://helpcentral.componentone.com/CS/blogs/webdev/fbappbar1.png" width="625" height="420" alt="" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The application bar is a menu fixed to the bottom of the Facebook site. It serves as navigation and also displays notifications such as updates or chat. At first I was weary of adding such an obtrusive element on top of the entire site, but have become quite fond of the idea. I really find it useful for its notification functionality. In fact, I have come to rely on it instead of refreshing the page or clicking on the &amp;quot;Home&amp;quot; tab again. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/blogs/webdev/fbappbar3.png"&gt;&lt;img border="0" src="http://helpcentral.componentone.com/CS/blogs/webdev/fbappbar3.png" alt="" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;It is an extremely useful UI for such an active website. There are too frequent of updates to rely on an end user to refresh the content. Using a site-wide toolbar at the bottom of every page is a great way of keeping the user aware of important updates. I began to think of how useful it could be in other web applications and decided to try to build one myself.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/blogs/webdev/fbappbar2.png"&gt;&lt;img border="0" src="http://helpcentral.componentone.com/CS/blogs/webdev/fbappbar2.png" alt="" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Less talk, more code &lt;/h3&gt;  &lt;p&gt;Let&amp;#39;s walk through the process of building a Facebook-like application bar using two ComponentOne controls, our &lt;a href="http://www.componentone.com/SuperProducts/MenuASPNET/"&gt;ASP.NET Menu control&lt;/a&gt; and our &lt;a href="http://www.componentone.com/SuperProducts/ToolTipASPNET/"&gt;ASP.NET ToolTip control&lt;/a&gt;.&lt;a href="http://www.componentone.com/SuperProducts/ToolTipASPNET/"&gt; &lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Want to follow along? Download the code: &lt;a href="http://helpcentral.componentone.com/CS/blogs/webdev/PopularUI.zip"&gt;PopularUI.zip&lt;/a&gt; or See it live: &lt;a href="http://demo.componentone.com/ASPNET/PopularUI/FacebookAppBar/"&gt;Application bar demo&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;File &amp;gt; New Website&lt;/h3&gt;  &lt;p&gt;To start I create a new ASP.NET 2.0 website in Visual Studio 2008. Keep in mind this could be done in .NET 3.0 and 4.0 as well. I just chose the lowest common denominator. I name the project PopularUI since I will be adding multiple samples in it. For this sample I will add a directory named FacebookAppBar. Inside it I create an Images folder and added a new WebForm, Default.aspx.&lt;/p&gt;  &lt;p&gt;I then add the ComponentOne Palomino dll&amp;#39;s to the Bin directory:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;C1.Web.UI.2 &lt;/li&gt;    &lt;li&gt;C1.Web.UI.Controls.2 &lt;/li&gt;    &lt;li&gt;C1.Web.UI.Design.2 &lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;Make a Container&lt;/h3&gt;  &lt;p&gt;The next step is to make a container to position the application bar in. I am going to use the same ID Facebook does just to make it a better reference. Here is the markup for the page so far:&lt;/p&gt;  &lt;div id="codeSnippetWrapper"&gt;   &lt;pre id="codeSnippet"&gt;&lt;span style="background-color:#ffff00;"&gt;&amp;lt;%@ Page Language=&amp;quot;C#&amp;quot; AutoEventWireup=&amp;quot;true&amp;quot; CodeFile=&amp;quot;Default.aspx.cs&amp;quot; Inherits=&amp;quot;_Default&amp;quot; %&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color:#800000;"&gt;DOCTYPE&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;html&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;PUBLIC&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;html&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;head&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;title&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;Facebook Application Bar&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;title&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;    &lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;head&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;body&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;form&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;form1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;   &lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;div&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;      &lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;div&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;div&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;presence&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;div&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;id&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;presence_ui&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;           &lt;br /&gt;        &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;div&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;div&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;form&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;body&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;html&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;The application bar will go inside the div with id=presence_ui. The rest of the content for the app will go in the first div element in the DOM. The reason this is at the end of the page is to ensure it is not a priority for robots to index. Since this is on every page it should be low in priority in the DOM structure. It also does not need to have priority in tab order (unless you feel it otherwise necessary). &lt;/p&gt;

&lt;p&gt;With this markup as-is the application bar will not always be visible. We need to use some CSS to get the right positioning similar to Facebook. To achieve the desired layout we will use fixed positioning. Fixed positioning is not very common since it fixed DOM element in the same place (relative to the window) no matter how the user scrolls the page. It can be a difficult layout option to pull off since the element positioned fixed can end up covering other elements on the page. For example, if Facebook did not correctly build their CSS then the footer of each page might be inaccessible due to the application bar covering it up. So we will add some bottom padding to the body to ensure this doesn&amp;#39;t happen. Here is how our CSS looks so far:&lt;/p&gt;

&lt;h3&gt;Fix the Container&lt;/h3&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;pre id="codeSnippet"&gt;&lt;span style="color:#0000ff;"&gt;body&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;font-family&lt;/span&gt;: &amp;quot;lucida grande&amp;quot; ,tahoma, verdana,arial,sans&lt;span style="color:#006080;"&gt;-serif;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;font-size&lt;/span&gt;: &lt;span style="color:#006080;"&gt;11px;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;color&lt;/span&gt;: &lt;span style="color:#006080;"&gt;#333;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;margin&lt;/span&gt;: 0;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;padding&lt;/span&gt;: &lt;span style="color:#006080;"&gt;0 0 30px 0;&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;#presence&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;position&lt;/span&gt;: &lt;span style="color:#006080;"&gt;fixed;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;bottom&lt;/span&gt;: 0;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;left&lt;/span&gt;: 0;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;width&lt;/span&gt;: &lt;span style="color:#006080;"&gt;100%;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;margin&lt;/span&gt;: 0;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;padding&lt;/span&gt;: 0;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;height&lt;/span&gt;: &lt;span style="color:#006080;"&gt;25px;&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;#presence_ui&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;position&lt;/span&gt;: &lt;span style="color:#006080;"&gt;relative;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;margin&lt;/span&gt;: &lt;span style="color:#006080;"&gt;0 15px;&lt;/span&gt;&lt;br /&gt;}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;The #presence selector is fixing the outer div to the bottom left of the browser and stretching it across the screen. It is also setting the height to ensure it has layout properties and sizes correctly. The #presence_ui selector is positioning itself relative to the fixed container and giving itself some breathing room to the left and right via 15px of margin. I added the font family, size and color to match Facebook by applying it to the entire document.&lt;/p&gt;

&lt;h3&gt;Add the C1Menu&lt;/h3&gt;

&lt;p&gt;Now that we have the fixed box at the bottom of our page we can add the menu. First we need to add the declaration to the top of the page:&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;pre id="codeSnippet"&gt;&amp;lt;%@ Register Assembly=&lt;span style="color:#006080;"&gt;&amp;quot;C1.Web.UI.Controls.2&amp;quot;&lt;/span&gt; Namespace=&lt;span style="color:#006080;"&gt;&amp;quot;C1.Web.UI.Controls.C1Menu&amp;quot;&lt;/span&gt; TagPrefix=&lt;span style="color:#006080;"&gt;&amp;quot;c1&amp;quot;&lt;/span&gt; %&amp;gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Next we add the C1Menu control inside the div with id=presence_ui. It is hardcoded for demo purposes, but could be databound just the same. It could also link to URLs in your app or raise JavaScript/Code-behind events to handle. The menu markup is as follows:&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;pre id="codeSnippet"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1Menu&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;C1Menu1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Height&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;25px&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ClickToOpen&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;True&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;VisualStylePath&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;~/C1WebControls/VisualStyles&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;WindowCollisionDetection&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;True&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;NestedGroupCheckable&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;False&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;UseEmbeddedVisualStyles&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;True&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;VisualStyle&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ArcticFox&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Items&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ImageUrl&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Images/Facebook.png&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Applications&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;           &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Items&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemHeader&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;NestedGroupCheckable&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;False&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Applications&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemHeader&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ImageUrl&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Images/Facebook.png&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Video&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemHeader&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;NestedGroupCheckable&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;False&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Bookmarks&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemHeader&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ImageUrl&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Images/Facebook.png&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Ads and Pages&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ImageUrl&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Images/Facebook.png&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Photos&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ImageUrl&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Images/Facebook.png&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Groups&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ImageUrl&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Images/Facebook.png&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Events&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ImageUrl&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Images/Facebook.png&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Marketplace&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ImageUrl&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Images/Facebook.png&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Links&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemSeparator&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemSeparator&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ImageUrl&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Images/Facebook.png&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Notes&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ImageUrl&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Images/Facebook.png&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Gifts&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemSeparator&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemSeparator&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ImageUrl&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Images/Facebook.png&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Edit Applications&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ImageUrl&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Images/Facebook.png&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Browse More Applications&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;           &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Items&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemSeparator&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemSeparator&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ImageUrl&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Images/Facebook.png&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ToolTip&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Ads and Pages&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ImageUrl&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Images/Facebook.png&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ToolTip&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Photos&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ImageUrl&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Images/Facebook.png&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ToolTip&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Groups&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ImageUrl&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Images/Facebook.png&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ToolTip&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Events&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ImageUrl&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Images/Facebook.png&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ToolTip&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Marketplace&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ImageUrl&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Images/Facebook.png&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ToolTip&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Links&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemGroup&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;CssClass&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;right&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;           &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Items&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ImageUrl&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Images/Facebook.png&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Chat (14)&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Items&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemHeader&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;C1MenuItemHeader1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;NestedGroupCheckable&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;False&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Chat&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemHeader&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;C1MenuItem1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;LinkItem1&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemSeparator&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;C1MenuItemSeparator1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemSeparator&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;C1MenuItem2&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;LinkItem2&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemSeparator&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;C1MenuItemSeparator2&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemSeparator&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;C1MenuItem3&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;LinkItem3&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemSeparator&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;C1MenuItemSeparator3&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemSeparator&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;C1MenuItem4&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;LinkItem4&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemSeparator&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;C1MenuItemSeparator4&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemSeparator&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;C1MenuItem5&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;LinkItem5&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemSeparator&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;C1MenuItemSeparator5&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemSeparator&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;C1MenuItem6&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;LinkItem2&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemSeparator&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;C1MenuItemSeparator6&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemSeparator&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;C1MenuItem7&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;LinkItem3&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemSeparator&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;C1MenuItemSeparator7&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemSeparator&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;C1MenuItem8&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;LinkItem4&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemSeparator&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;C1MenuItemSeparator8&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemSeparator&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;C1MenuItem9&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;LinkItem5&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                   &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Items&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemSeparator&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemSeparator&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ImageUrl&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Images/Facebook.png&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ToolTip&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Notifications&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Items&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemHeader&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;NestedGroupCheckable&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;False&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Notifications&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemHeader&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;LinkItem1&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemSeparator&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemSeparator&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;LinkItem2&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemSeparator&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemSeparator&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;LinkItem3&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemSeparator&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemSeparator&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;LinkItem4&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemSeparator&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemSeparator&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;LinkItem5&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;                   &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Items&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;               &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItem&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;           &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Items&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;       &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1MenuItemGroup&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Items&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1Menu&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Notice that I just used one icon to keep things simple, but it would be easy to add others for the different links. It looks close, but we need a little CSS help to get the Chat and Notification group aligned to the right of the application bar. Here is the CSS to tweak the menu:&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;pre id="codeSnippet"&gt;&lt;span style="color:#cc6633;"&gt;.right&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;float&lt;/span&gt;: &lt;span style="color:#006080;"&gt;right;&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;div&lt;/span&gt;&lt;span style="color:#cc6633;"&gt;.C1Menu&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;div&lt;/span&gt;&lt;span style="color:#cc6633;"&gt;.C1SubMenu&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;margin&lt;/span&gt;-&lt;span style="color:#0000ff;"&gt;top&lt;/span&gt;: &lt;span style="color:#006080;"&gt;-24px;&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color:#cc6633;"&gt;.C1Menu&lt;/span&gt; &lt;span style="color:#cc6633;"&gt;.c1-h-child&lt;/span&gt; &lt;span style="color:#cc6633;"&gt;.C1Opened&lt;/span&gt; &lt;span style="color:#cc6633;"&gt;.C1TextNode&lt;/span&gt;, &lt;span style="color:#cc6633;"&gt;.C1Menu&lt;/span&gt; &lt;span style="color:#cc6633;"&gt;.C1SubMenu&lt;/span&gt; &lt;span style="color:#cc6633;"&gt;.c1-h-child&lt;/span&gt; &lt;span style="color:#cc6633;"&gt;.C1Opened&lt;/span&gt; &lt;span style="color:#cc6633;"&gt;.C1TextNode&lt;/span&gt;, &lt;span style="color:#cc6633;"&gt;.C1Menu&lt;/span&gt; &lt;span style="color:#cc6633;"&gt;.c1-h-child&lt;/span&gt; &lt;span style="color:#cc6633;"&gt;.C1Closed&lt;/span&gt; &lt;span style="color:#cc6633;"&gt;.C1TextNode&lt;/span&gt;, &lt;span style="color:#cc6633;"&gt;.C1Menu&lt;/span&gt; &lt;span style="color:#cc6633;"&gt;.C1SubMenu&lt;/span&gt; &lt;span style="color:#cc6633;"&gt;.c1-h-child&lt;/span&gt; &lt;span style="color:#cc6633;"&gt;.C1Closed&lt;/span&gt; &lt;span style="color:#cc6633;"&gt;.C1TextNode&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;background&lt;/span&gt;: &lt;span style="color:#006080;"&gt;none;&lt;/span&gt;&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;padding&lt;/span&gt;-&lt;span style="color:#0000ff;"&gt;right&lt;/span&gt;: 0;&lt;br /&gt;}&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;The odd looking negative margin is to make sure the submenus don&amp;#39;t open on top of the application bar. I also took out the default background image for textnodes which is an arrow pointing down. It didn&amp;#39;t make much sense to have a down arrow if the submenus opened upwards. &lt;/p&gt;

&lt;h3&gt;Add the C1ToolTip Just for Kicks&lt;/h3&gt;

&lt;p&gt;The only thing missing now is nice looking tooltips on each link. To get those we will use a single C1ToolTip control and specify a ToolTipZoneID. Doing this will turn every alt attribute on elements inside this zone into nice pretty tooltips. I am setting the ToolTipZoneID=presence_ui so only the menu items will get this special tooltip in my site. No other elements will be affected. &lt;/p&gt;

&lt;p&gt;To get the tooltip we first need to add a reference to the C1ToolTip control like so:&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;pre id="codeSnippet"&gt;&amp;lt;%@ Register Assembly=&lt;span style="color:#006080;"&gt;&amp;quot;C1.Web.UI.Controls.2&amp;quot;&lt;/span&gt; Namespace=&lt;span style="color:#006080;"&gt;&amp;quot;C1.Web.UI.Controls.C1ToolTip&amp;quot;&lt;/span&gt; TagPrefix=&lt;span style="color:#006080;"&gt;&amp;quot;c1&amp;quot;&lt;/span&gt; %&amp;gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;Next we need to add a C1ToolTip anywhere in the page. Here is the markup I used:&lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;pre id="codeSnippet"&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1ToolTip&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;C1ToolTip1&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ToolTipZoneID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;presence_ui&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Position&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;TopCenter&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;UseEmbeddedVisualStyles&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;True&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;VisualStyle&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;ArcticFox&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;c1:C1ToolTip&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;These are small tooltips that do not need a title in them. I am going to add some CSS to remove the title and also give a little padding inside the tooltip. Here is the last bit of code to complete the application bar: &lt;/p&gt;

&lt;div id="codeSnippetWrapper"&gt;
  &lt;pre id="codeSnippet"&gt;&lt;span style="color:#cc6633;"&gt;.C1ttTitleBar&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;display&lt;/span&gt;: &lt;span style="color:#006080;"&gt;none;&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt;&lt;span style="color:#cc6633;"&gt;.C1ttContentBar&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color:#0000ff;"&gt;padding&lt;/span&gt;: &lt;span style="color:#006080;"&gt;4px;&lt;/span&gt;&lt;br /&gt;}&lt;/pre&gt;
&lt;/div&gt;

&lt;h3&gt;Run it!&lt;/h3&gt;

&lt;p&gt;There you have it! A cool application bar just like Facebook has built in ASP.NET. Feel free to check out the online version of the &lt;a href="http://demo.componentone.com/ASPNET/PopularUI/FacebookAppBar/"&gt;application bar&lt;/a&gt;. It isn&amp;#39;t quite as complex as Facebook&amp;#39;s, but you get the gist of it. There are some other cool things we could do to make this even more like the Facebook application bar. Here are some of the ideas I can think of...&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Add drag and drop to move items in the menu &lt;/li&gt;

  &lt;li&gt;Use AJAX to change content on the page when items are clicked &lt;/li&gt;

  &lt;li&gt;Call a web service to check for updates and notify the user if there are &lt;/li&gt;

  &lt;li&gt;Load the chat list dynamically &lt;/li&gt;

  &lt;li&gt;Any other ideas? Post a comment! &lt;/li&gt;
&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.componentone.com/CS/aggbug.aspx?PostID=227947" width="1" height="1"&gt;</description></item><item><title>Dynamic Connection Strings</title><link>http://blogs.componentone.com/CS/blogs/windev/archive/2010/01/26/DynamicConnectionStrings.aspx</link><pubDate>Tue, 26 Jan 2010 17:01:00 GMT</pubDate><guid isPermaLink="false">6ffc9ae0-0270-4839-b826-46696419445e:227942</guid><dc:creator>C1_GregL</dc:creator><slash:comments>0</slash:comments><description>&lt;h1&gt;Dynamic Connection Strings&lt;/h1&gt;
&lt;p&gt;This blog post details a solution to the common problem of dynamically setting connection strings. The approach used allows end-users to change database connections at runtime through a friendly user interface, and save the connection for future uses. Provided with this post is source code for the connection form which accesses all SQL servers and databases on a computer and its networks, builds a connection string based upon user selection, and also saves this to an xml file in local data storage (see bottom of post for download).&lt;/p&gt;
&lt;p&gt;&lt;img style="WIDTH:304px;HEIGHT:373px;" title="Connection Wizard Form" alt="Connection Wizard Form" align="middle" src="http://blogs.componentone.com/CS/blogs/windev/DynamicConnectionStrings/ConnectionWizard.jpg" width="304" height="373" /&gt;&lt;/p&gt;
&lt;h2&gt;Scenario: &lt;/h2&gt;
&lt;p&gt;You create a project in Visual Studio which utilizes a backend database.&amp;nbsp;Typically, you first create your database, and then create a connection string in Visual Studio to link to your database, and then you complete the rest of your project. You store the database connection string in the settings of your project.&lt;/p&gt;
&lt;p&gt;&lt;img style="WIDTH:600px;HEIGHT:165px;" title="Project Settings" alt="Project Settings" src="http://blogs.componentone.com/CS/blogs/windev/DynamicConnectionStrings/settings1.jpg" width="600" height="165" /&gt;&lt;/p&gt;
&lt;h2&gt;The Problem:&lt;/h2&gt;
&lt;p&gt;Once you are happy with the application you package and distribute it to your end users. This is when the fun starts as your end users start to say that they can&amp;#39;t make a connection to the database on their server.&amp;nbsp;The reason for this is really quite simple. The connection string that you have created has Application scope and is strongly typed. You need to allow the connection string to be set on the users end.&lt;/p&gt;
&lt;p&gt;Because&amp;nbsp;the connection string is strongly typed, you can do something like:&lt;/p&gt;&lt;pre&gt;[C#] string myString = Properties.Settings.Default.MyConnectionString;&lt;/pre&gt;&lt;pre&gt;[VB.NET] Dim MyString As String = My.Settings.MyConnectionString&lt;/pre&gt;
&lt;p&gt;But if you try and reverse the logic:&lt;/p&gt;&lt;pre&gt;[C#] Properties.Settings.Default.MyConnectionString = &amp;quot;abc&amp;quot;;&lt;/pre&gt;&lt;pre&gt;[VB.NET] My.Settings.MyConnectionString = &amp;quot;abc&amp;quot;&lt;/pre&gt;
&lt;p&gt;You get an error.&lt;/p&gt;
&lt;p&gt;&lt;img style="WIDTH:492px;HEIGHT:104px;" title="Connection Error" alt="Connection Error" align="middle" src="http://blogs.componentone.com/CS/blogs/windev/DynamicConnectionStrings/connectionError.jpg" width="492" height="104" /&gt;&lt;/p&gt;
&lt;p&gt;The problem, of course, lies in the strongly typed connection string that you created when you designed the application. The real problem is that it is strongly typed.&lt;/p&gt;
&lt;p&gt;So how can you get around this?&amp;nbsp; It&amp;#39;s something that you would think has a ready solution available, but strangely there isn&amp;#39;t one.&amp;nbsp;A web search for ‘How do I dynamically reassign the connection string&amp;#39; will return hundreds of results. The realization is that you are not alone.&lt;/p&gt;
&lt;h2&gt;The Solution:&lt;/h2&gt;
&lt;p&gt;Well, it turns out that you can actually play with the settings, but to do this you need to access the settings events.&amp;nbsp;If you return to the Settings page of your project you&amp;#39;ll see a button that allows you to view the code.&lt;/p&gt;
&lt;p&gt;&lt;img style="WIDTH:600px;HEIGHT:165px;" title="Project Settings View Code" alt="Project Settings View Code" src="http://blogs.componentone.com/CS/blogs/windev/DynamicConnectionStrings/settings2.jpg" width="600" height="165" /&gt;&lt;/p&gt;
&lt;p&gt;Now, you still can&amp;#39;t directly assign the connection string here in the code page (because it&amp;#39;s still strongly typed), but you can make use of late binding. The following code is possible (in the Settings Load event):&lt;/p&gt;&lt;pre&gt;[C#] this[&amp;quot;MyConnectionString&amp;quot;] = &amp;quot;abc&amp;quot;;&lt;/pre&gt;&lt;pre&gt;[VB.NET] Me.Item(&amp;quot;MyConnectionString&amp;quot;) = &amp;quot;abc&amp;quot;&lt;/pre&gt;
&lt;p&gt;This is the key to solving the problem. And now that you know that you can change the connection string at runtime, you can expand this process by letting the user build the connection string rather than you, the developer, always being responsible for knowing it. To do this you can create a property in your Settings.cs or Settings.vb page.&lt;/p&gt;&lt;pre&gt;[C#] public string RuntimeSqlConnectionString {
	set
	{
		this[&amp;quot;MyConnectionString&amp;quot;] = value;
	}
}&lt;/pre&gt;&lt;pre&gt;[VB.NET] Public WriteOnly Property RuntimeSqlConnectionString() As String
	Set(ByVal value As String)
		My.Settings(&amp;quot;MyConnectionString&amp;quot;) = value
	End Set
End Property&lt;/pre&gt;
&lt;p&gt;The rest, as they say, is just a case of applying a little logic to your new found freedom.&amp;nbsp; The easiest approach (for you) is just to present the end user with a text box and have them fill in their connection string and assign that value. But to avoid all those future support calls, you should give them as much help as possible.&amp;nbsp; To achieve this you should display a form that actually searches the end user&amp;#39;s computer/network for active SQL Servers, and when they select one, automatically list all of the databases available.&lt;/p&gt;
&lt;p&gt;When they have made a successful test connection you write the information out to an xml file in the user&amp;#39;s application data directory. This approach allows each user to have their own connection string (each user could have different passwords!).&lt;/p&gt;
&lt;p&gt;Finally, on application startup, you read the xml file and dynamically assign the connection string to the property we created earlier. It&amp;#39;s that simple.&lt;/p&gt;
&lt;p&gt;The same logic can be used for other database connection strings, such as OleDb if you&amp;#39;re using C1Reports. Just&amp;nbsp;add another connection string setting and another property in your Settings code.&lt;/p&gt;
&lt;h2&gt;Download Sample:&lt;/h2&gt;
&lt;p&gt;Download source for this sample: &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a title="Download Connection Wizard Sample Source C#" href="http://blogs.componentone.com/CS/blogs/windev/DynamicConnectionStrings/ConnectionWizard.zip"&gt;ConnectionWizard.zip&lt;/a&gt; [C# - VS2008] 
&lt;li&gt;&lt;a title="Download Connection Wizard Sample VB.NET" href="http://blogs.componentone.com/CS/blogs/windev/DynamicConnectionStrings/ConnectionWizardVB.zip"&gt;ConnectionWizardVB.zip&lt;/a&gt; [VB.NET - VS2008] &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;This sample provides the code for accessing all SQL servers and databases on a computer and its networks. It builds a connection string with the option for a password, and also saves the connection string to an xml file in local data storage. It may not look like&amp;nbsp;a &amp;quot;wizard&amp;quot; but you could certainly take the logic used and apply it within a wizard of your own.&lt;/p&gt;
&lt;p&gt;&lt;img style="WIDTH:304px;HEIGHT:373px;" title="Connection Wizard Form" alt="Connection Wizard Form" align="middle" src="http://blogs.componentone.com/CS/blogs/windev/DynamicConnectionStrings/ConnectionWizard.jpg" width="304" height="373" /&gt;&lt;/p&gt;
&lt;p&gt;Thanks to Dom Sinclair (&lt;a href="http://www.viewtolearn.net/"&gt;http://www.viewtolearn.net/&lt;/a&gt;) for submitting the content of this article.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.componentone.com/CS/aggbug.aspx?PostID=227942" width="1" height="1"&gt;</description><category domain="http://blogs.componentone.com/CS/blogs/windev/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.componentone.com/CS/blogs/windev/archive/tags/C1Report/default.aspx">C1Report</category></item><item><title>ComponentOne Toolbar for Silverlight Samples</title><link>http://blogs.componentone.com/CS/blogs/silverlight/archive/2010/01/26/toolbarsample.aspx</link><pubDate>Tue, 26 Jan 2010 13:00:00 GMT</pubDate><guid isPermaLink="false">6ffc9ae0-0270-4839-b826-46696419445e:227878</guid><dc:creator>C1_GregL</dc:creator><slash:comments>1</slash:comments><description>&lt;h2&gt;Overview&lt;/h2&gt;
&lt;p&gt;This article demonstrates simple techniques that can be used to customize the behavior and appearance of the&lt;b&gt; C1Toolbar&lt;/b&gt; control for Silverlight.&lt;/p&gt;
&lt;p&gt;The techniques presented take advantage of the Silverlight (and WPF) compositional nature, which allows developers and designers to combine controls and layout elements with great flexibility. Specifically, the article demonstrates how you can accomplish the following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create compound toolbar buttons that look like regular buttons, but have several clickable areas&lt;/li&gt;
&lt;li&gt;Create dropdown elements that use a Grid element to provide a rich layout&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;Create dropdown elements that appear when the mouse hovers over them, rather than only when the user clicks them&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;These items are not artificial samples designed to show off unique features of the &lt;b&gt;C1Toolbar&lt;/b&gt;. They came from real customers who wanted to implement these features in real applications.&lt;/p&gt;
&lt;h2&gt;1. Creating Compound Buttons&lt;/h2&gt;
&lt;p&gt;To create groups of buttons in a&lt;b&gt; C1Toolbar &lt;/b&gt;control, you would normally use XAML such as this:&lt;/p&gt;&lt;pre&gt;   &amp;lt;c1tb:C1ToolbarStrip &amp;gt;&lt;br /&gt;    &amp;lt;c1tb:C1ToolbarButton Content=&amp;quot;Button1&amp;quot; /&amp;gt;&lt;br /&gt;    &amp;lt;c1tb:C1ToolbarButton Content=&amp;quot;Button2&amp;quot; /&amp;gt;&lt;br /&gt;    &amp;lt;c1tb:C1ToolbarButton Content=&amp;quot;Button3&amp;quot; /&amp;gt;&lt;br /&gt;  &amp;lt;/c1tb:C1ToolbarStrip&amp;gt;    &lt;/pre&gt;
&lt;p&gt;Which would create a toolbar that looks like this:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/blogs/silverlight/C1Toolbar/RegularButtons.png"&gt;&lt;img border="0" src="http://helpcentral.componentone.com/CS/blogs/silverlight/C1Toolbar/RegularButtons.png" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Notice how the edges of the buttons are automatically adjusted so the first and last buttons have rounded corners and the middle one does not.&lt;/p&gt;
&lt;p&gt;Now suppose the application designer wanted to combine the three buttons into a single one. The desired result is something that looks like a regular button, but has three separate clickable areas.&lt;/p&gt;
&lt;p&gt;Thanks to the compositional nature of Silverlight, this turns out to be extremely easy. We can simply add a &lt;b&gt;StackPanel&lt;/b&gt; as the content of a &lt;b&gt;C1ToolbarButton&lt;/b&gt;, place the inner buttons in the toolbar, and remove the borders of the buttons:&lt;/p&gt;&lt;pre&gt;   &amp;lt;c1tb:C1ToolbarStrip &amp;gt;&lt;br /&gt;    &amp;lt;c1tb:C1ToolbarButton &amp;gt;&lt;br /&gt;      &amp;lt;StackPanel Orientation=&amp;quot;Horizontal&amp;quot; &amp;gt;&lt;br /&gt;        &amp;lt;Button Content=&amp;quot;Area 1&amp;quot; IsTabStop=&amp;quot;False&amp;quot; BorderThickness=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;        &amp;lt;Button Content=&amp;quot;Area 2&amp;quot; IsTabStop=&amp;quot;False&amp;quot; BorderThickness=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;        &amp;lt;Button Content=&amp;quot;Area 3&amp;quot; IsTabStop=&amp;quot;False&amp;quot; BorderThickness=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;      &amp;lt;/StackPanel&amp;gt;&lt;br /&gt;    &amp;lt;/c1tb:C1ToolbarButton&amp;gt;&lt;br /&gt;  &amp;lt;/c1tb:C1ToolbarStrip&amp;gt;        &amp;nbsp;&lt;/pre&gt;
&lt;p&gt;The result is very close to what we want:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/blogs/silverlight/C1Toolbar/CompoundAlmost.png"&gt;&lt;img border="0" src="http://helpcentral.componentone.com/CS/blogs/silverlight/C1Toolbar/CompoundAlmost.png" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Unfortunately, even though we specified zero for the &lt;b&gt;BorderThickness&lt;/b&gt;, there is still a white gap between the buttons (you have to look carefully to see it).&lt;/p&gt;
&lt;p&gt;The gap appears because of the template used to build the regular &lt;b&gt;Button &lt;/b&gt;objects. The template contains a &lt;b&gt;Grid&lt;/b&gt; panel named &amp;quot;Background&amp;quot; that has a margin which is not affected by the &lt;b&gt;BorderThickness &lt;/b&gt;property.&lt;/p&gt;
&lt;p&gt;The easiest way to eliminate the undesired gap is to create a new button class that derives from &lt;b&gt;Button &lt;/b&gt;and override the &lt;b&gt;OnApplyTemplate&lt;/b&gt; method to modify the template:&lt;/p&gt;&lt;pre&gt;   public class InnerButton : Button&lt;br /&gt;  {&lt;br /&gt;    public override void OnApplyTemplate()&lt;br /&gt;    {&lt;br /&gt;      base.OnApplyTemplate();&lt;br /&gt;      Grid grid = ((Border)GetTemplateChild(&amp;quot;Background&amp;quot;)).Child as Grid;&lt;br /&gt;      if (grid != null)&lt;br /&gt;      {&lt;br /&gt;        grid.Margin = new Thickness(0);&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;  }        &amp;nbsp;&lt;/pre&gt;
&lt;p&gt;The code is quite simple, but it does assume you know how the base class template is structured.&lt;/p&gt;
&lt;p&gt;We can now use our new &lt;b&gt;InnerButton&lt;/b&gt; class as follows:&lt;/p&gt;&lt;pre&gt;   &amp;lt;c1tb:C1ToolbarStrip &amp;gt;&lt;br /&gt;    &amp;lt;c1tb:C1ToolbarButton &amp;gt;&lt;br /&gt;      &amp;lt;StackPanel Orientation=&amp;quot;Horizontal&amp;quot; &amp;gt;&lt;br /&gt;        &amp;lt;local:InnerButton Content=&amp;quot;Area 1&amp;quot; IsTabStop=&amp;quot;False&amp;quot; BorderThickness=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;        &amp;lt;local:InnerButton Content=&amp;quot;Area 2&amp;quot; IsTabStop=&amp;quot;False&amp;quot; BorderThickness=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;        &amp;lt;local:InnerButton Content=&amp;quot;Area 3&amp;quot; IsTabStop=&amp;quot;False&amp;quot; BorderThickness=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;      &amp;lt;/StackPanel&amp;gt;&lt;br /&gt;    &amp;lt;/c1tb:C1ToolbarButton&amp;gt;&lt;br /&gt;  &amp;lt;/c1tb:C1ToolbarStrip&amp;gt; &amp;nbsp;&lt;/pre&gt;
&lt;p&gt;And this time the result is exactly what we wanted: a single button with three clickable areas:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/blogs/silverlight/C1Toolbar/Compound.png"&gt;&lt;img border="0" src="http://helpcentral.componentone.com/CS/blogs/silverlight/C1Toolbar/Compound.png" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Even though the result looks like a single button, there are three buttons in the toolbar. Each &lt;b&gt;InnerButton &lt;/b&gt;provides visual feedback when the mouse hovers over it, and each has its own &lt;b&gt;Click &lt;/b&gt;event. &lt;/p&gt;
&lt;p&gt;Remember our &lt;b&gt;InnerButton &lt;/b&gt;class inherits from the regular &lt;b&gt;Button&lt;/b&gt;, so you are not limited to showing text in each button. You can also use images or any other element your application requires.&lt;/p&gt;
&lt;h2&gt;2. Using Grid elements as layout elements for dropdowns&lt;br /&gt;&lt;/h2&gt;
&lt;p&gt;In addition to buttons, many toolbars contain dropdown items similar to menus. These are implemented using the &lt;b&gt;C1ToolbarDropDown &lt;/b&gt;class. For example, you could create a simple dropdown using this XAML:&lt;/p&gt;&lt;pre&gt;   &amp;lt;c1tb:C1ToolbarStrip &amp;gt;&lt;br /&gt;    &amp;lt;c1tb:C1ToolbarDropDown Padding=&amp;quot;3&amp;quot; Header=&amp;quot;Regular DropDown&amp;quot;&amp;gt;&lt;br /&gt;      &amp;lt;c1tb:C1ToolbarDropDown.Menu&amp;gt;&lt;br /&gt;        &amp;lt;c1:C1ContextMenu&amp;gt;&lt;br /&gt;          &amp;lt;c1:C1MenuItem Header=&amp;quot;Item1&amp;quot; /&amp;gt;&lt;br /&gt;          &amp;lt;c1:C1MenuItem Header=&amp;quot;Item2&amp;quot; /&amp;gt;&lt;br /&gt;          &amp;lt;c1:C1MenuItem Header=&amp;quot;Item3&amp;quot; /&amp;gt;&lt;br /&gt;        &amp;lt;/c1:C1ContextMenu&amp;gt;&lt;br /&gt;      &amp;lt;/c1tb:C1ToolbarDropDown.Menu&amp;gt;&lt;br /&gt;    &amp;lt;/c1tb:C1ToolbarDropDown&amp;gt;&lt;br /&gt;  &amp;lt;/c1tb:C1ToolbarStrip&amp;gt;&lt;/pre&gt;
&lt;p&gt;Which would create the following:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/blogs/silverlight/C1Toolbar/RegularDropDown.png"&gt;&lt;img border="0" src="http://helpcentral.componentone.com/CS/blogs/silverlight/C1Toolbar/RegularDropDown.png" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;But you are not restricted to simple menus. In addition to the &lt;b&gt;Menu &lt;/b&gt;property used in the example above, the &lt;b&gt;C1ToolbarDropDown&lt;/b&gt; has a &lt;b&gt;Content&lt;/b&gt; property that allows you to use any element as a dropdown. The most flexible option is to use a &lt;b&gt;Grid &lt;/b&gt;panel, which provides virtually unlimited layout options.&lt;/p&gt;
&lt;p&gt;For example, imagine that instead of a simple menu we wanted to display a list of items consisting of some left-aligned text and a right aligned button. This can be accomplished using this XAML:&lt;/p&gt;&lt;pre&gt;&amp;lt;c1tb:C1ToolbarStrip &amp;gt;&lt;br /&gt;  &amp;lt;c1tb:C1ToolbarDropDown Padding=&amp;quot;3&amp;quot; Header=&amp;quot;Grid in DropDown&amp;quot;&amp;gt;&lt;br /&gt;    &amp;lt;Grid&amp;gt;&lt;br /&gt;      &amp;lt;Grid.ColumnDefinitions&amp;gt;&lt;br /&gt;        &amp;lt;ColumnDefinition Width=&amp;quot;200&amp;quot;/&amp;gt;&lt;br /&gt;        &amp;lt;ColumnDefinition Width=&amp;quot;100&amp;quot;/&amp;gt;&lt;br /&gt;      &amp;lt;/Grid.ColumnDefinitions&amp;gt;&lt;br /&gt;      &amp;lt;Grid.RowDefinitions&amp;gt;&lt;br /&gt;        &amp;lt;RowDefinition /&amp;gt;&lt;br /&gt;        &amp;lt;RowDefinition /&amp;gt;&lt;br /&gt;        &amp;lt;RowDefinition /&amp;gt;&lt;br /&gt;      &amp;lt;/Grid.RowDefinitions&amp;gt;&lt;br /&gt;      &amp;lt;TextBlock VerticalAlignment=&amp;quot;Center&amp;quot; Text=&amp;quot;Label 1&amp;quot; /&amp;gt;&lt;br /&gt;      &amp;lt;Button Content=&amp;quot;Button 1&amp;quot; Grid.Column=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;      &amp;lt;TextBlock VerticalAlignment=&amp;quot;Center&amp;quot; Text=&amp;quot;Label 2&amp;quot; Grid.Row=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;      &amp;lt;Button Content=&amp;quot;Button 2&amp;quot; Grid.Row=&amp;quot;1&amp;quot; Grid.Column=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;      &amp;lt;TextBlock VerticalAlignment=&amp;quot;Center&amp;quot; Text=&amp;quot;Label 3&amp;quot; Grid.Row=&amp;quot;2&amp;quot; /&amp;gt;&lt;br /&gt;      &amp;lt;Button Content=&amp;quot;Button 3&amp;quot; Grid.Row=&amp;quot;2&amp;quot; Grid.Column=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;    &amp;lt;/Grid&amp;gt;&lt;br /&gt;  &amp;lt;/c1tb:C1ToolbarDropDown&amp;gt;&lt;br /&gt;&amp;lt;/c1tb:C1ToolbarStrip&amp;gt;    &lt;/pre&gt;
&lt;p&gt;Which would create the following:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/blogs/silverlight/C1Toolbar/GridDropDown.png"&gt;&lt;img border="0" src="http://helpcentral.componentone.com/CS/blogs/silverlight/C1Toolbar/GridDropDown.png" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;The &lt;b&gt;Grid&lt;/b&gt; panel is the most versatile panel available in Silverlight and in WPF. It can host any type of element and lay it out over single cells or cell spans, with the usual choices of vertical and horizontal alignment. You can leverage all this power directly from your &lt;b&gt;C1ToolbarDropDown &lt;/b&gt;elements.&lt;/p&gt;
&lt;h2&gt;3. Creating dropdowns that appear on mouse hover&lt;/h2&gt;
&lt;p&gt;Many web pages have menus that dropdown when the mouse hovers over them (as opposed to when the user clicks them). &lt;/p&gt;
&lt;p&gt;To accomplish the same effect with a &lt;b&gt;C1ToolbarDropDown&lt;/b&gt;, we need to do the following:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Handle the &lt;b&gt;MouseEnter &lt;/b&gt;event of the &lt;b&gt;C1ToolbarDropDown&lt;/b&gt; to show the dropdown.&lt;/li&gt;
&lt;li&gt;Handle the &lt;b&gt;MouseLeave &lt;/b&gt;event of the &lt;b&gt;C1ToolbarDropDown&lt;/b&gt; and of the dropdown itself to start a timer that will close the dropdown. This is better than closing the dropdown immediately because it makes the UI more forgiving. Users can move the mouse away and back to the control without having the dropdown disappear if they make a slightly imprecise move.&lt;/li&gt;
&lt;li&gt;Handle the &lt;b&gt;MouseEnter &lt;/b&gt;event of the &lt;b&gt;C1ToolbarDropDown&lt;/b&gt; and of the dropdown itself to stop the timer and prevent the dropdown from closing if the user moves the mouse back over the dropdown within a short time.&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;As you can see, showing the dropdown is easy. Hiding it at the right time is more difficult.&lt;/p&gt;
&lt;p&gt;To accomplish this, we define a &lt;b&gt;HoverDropDown&lt;/b&gt; class that looks like this:&lt;/p&gt;&lt;pre&gt;   public class HoverDropDown : C1ToolbarDropDown&lt;br /&gt;  {&lt;br /&gt;    Popup _helper;&lt;br /&gt;    Rectangle _rect;&lt;br /&gt;    DispatcherTimer _timer;&lt;br /&gt; &lt;br /&gt;    public HoverDropDown()&lt;br /&gt;    {&lt;br /&gt;      // create timer to hide the dropdown when the mouse moves away&lt;br /&gt;      // from the toolbar item itself and from the dropdown&lt;br /&gt;      _timer = new DispatcherTimer();&lt;br /&gt;      _timer.Interval = TimeSpan.FromSeconds(0.5);&lt;br /&gt;      _timer.Tick += _timer_Tick;&lt;br /&gt; &lt;br /&gt;      // create transparent element to detect mouse movement over the &lt;br /&gt;      // toolbar item&lt;br /&gt;      _rect = new Rectangle();&lt;br /&gt;      _rect.Fill = new SolidColorBrush(Colors.Transparent);&lt;br /&gt;      _helper = new Popup();&lt;br /&gt;      _helper.Child = _rect;&lt;br /&gt; &lt;br /&gt;      // start/stop the timer when mouse leaves/enters the toolbar item&lt;br /&gt;      _rect.MouseLeave += (s, e) =&amp;gt; _timer.Start();&lt;br /&gt;      _rect.MouseEnter += (s, e) =&amp;gt; _timer.Stop();&lt;br /&gt;    }        &amp;nbsp;&lt;/pre&gt;
&lt;p&gt;The &lt;b&gt;HoverDropDown&lt;/b&gt; class derives from &lt;b&gt;C1ToolbarDropDown &lt;/b&gt;and defines a timer to hide the dropdown as described above. In addition to the timer, the class defines a &lt;b&gt;Rectangle &lt;/b&gt;object that will be used to detect mouse movements over the control itself (regardless of its contents).&lt;/p&gt;
&lt;p&gt;When the mouse leaves the &lt;b&gt;Rectangle&lt;/b&gt;, the timer starts ticking. If the mouse returns to the control before the specified delay has elapsed, the timer stops before the dropdown closes.&lt;/p&gt;
&lt;p&gt;Next, we need to attach similar event handlers to the dropdown element itself. This can be done using the &lt;b&gt;OnApplyTemplate&lt;/b&gt; method as shown below:&lt;/p&gt;&lt;pre&gt;   // connect our timer to the dropdown element (popup child)&lt;br /&gt;  public override void OnApplyTemplate()&lt;br /&gt;  {&lt;br /&gt;    // allow default handling&lt;br /&gt;    base.OnApplyTemplate();&lt;br /&gt; &lt;br /&gt;    // get the dropdown element from the template&lt;br /&gt;    var popup = GetTemplateChild(&amp;quot;DropDownPopup&amp;quot;) as Popup;&lt;br /&gt;    var popupChild = (FrameworkElement)popup.Child;&lt;br /&gt; &lt;br /&gt;    // start/stop the timer when mouse leaves/enters the dropdown&lt;br /&gt;    popupChild.MouseLeave += (s, e) =&amp;gt; _timer.Start();&lt;br /&gt;    popupChild.MouseEnter += (s, e) =&amp;gt; _timer.Stop();&lt;br /&gt;  }&lt;/pre&gt;
&lt;p&gt;Next, we need to override the &lt;b&gt;OnMouseEnter &lt;/b&gt;method to show the dropdown and to position the &lt;b&gt;Rectangle&lt;/b&gt; element declared earlier so it will detect mouse movements while the dropdown is visible:&lt;/p&gt;&lt;pre&gt;   // drop down when mouse enters the toolbar item&lt;br /&gt;  // control, setup to detect when the mouse leaves the dropdown element&lt;br /&gt;  protected override void OnMouseEnter(MouseEventArgs e)&lt;br /&gt;  {&lt;br /&gt;    // allow default handling&lt;br /&gt;    base.OnMouseEnter(e);&lt;br /&gt; &lt;br /&gt;    if (!IsDropDownOpen)&lt;br /&gt;    {&lt;br /&gt;      // drop down now&lt;br /&gt;      IsDropDownOpen = true;&lt;br /&gt;        &lt;br /&gt;      // update mouse detector position&lt;br /&gt;      Point pt = TransformToVisual(null).Transform(new Point());&lt;br /&gt;      _rect.Width = ActualWidth;&lt;br /&gt;      _rect.Height = ActualHeight;&lt;br /&gt;      _helper.HorizontalOffset = pt.X;&lt;br /&gt;      _helper.VerticalOffset = pt.Y;&lt;br /&gt;      _helper.IsOpen = true;&lt;br /&gt;    }&lt;br /&gt;  }        &amp;nbsp;&lt;/pre&gt;
&lt;p&gt;And finally, we need to implement the timer&amp;#39;s &lt;b&gt;Tick&lt;/b&gt; event handler which will close the dropdown half a second after the mouse has left the control or the dropdown:&lt;/p&gt;&lt;pre&gt;   // close pop-up 0.5 seconds after the mouse leaves the pop-up area&lt;br /&gt;  void _timer_Tick(object sender, EventArgs e)&lt;br /&gt;  {&lt;br /&gt;    IsDropDownOpen = _helper.IsOpen = false;&lt;br /&gt;  }&lt;br /&gt;&lt;/pre&gt;
&lt;p&gt;That concludes the implementation of the &lt;b&gt;HoverDropDown&lt;/b&gt; class. You can use it in XAML exactly as you would use the base &lt;b&gt;C1ToolbarDropDown &lt;/b&gt;class:&lt;/p&gt;&lt;pre&gt;   &amp;lt;c1tb:C1ToolbarStrip &amp;gt;&lt;br /&gt;    &amp;lt;local:HoverDropDown Padding=&amp;quot;3&amp;quot; Header=&amp;quot;Hover&amp;quot;&amp;gt;&lt;br /&gt;      &amp;lt;StackPanel Orientation=&amp;quot;Vertical&amp;quot;&amp;gt;&lt;br /&gt;        &amp;lt;CheckBox Content=&amp;quot;Check box 1&amp;quot; /&amp;gt;&lt;br /&gt;        &amp;lt;CheckBox Content=&amp;quot;Check box 2&amp;quot; /&amp;gt;&lt;br /&gt;        &amp;lt;CheckBox Content=&amp;quot;Check box 3&amp;quot; /&amp;gt;&lt;br /&gt;      &amp;lt;/StackPanel&amp;gt;&lt;br /&gt;    &amp;lt;/local:HoverDropDown&amp;gt;&lt;br /&gt;  &amp;lt;/c1tb:C1ToolbarStrip&amp;gt;&lt;/pre&gt;
&lt;p&gt;Showing an image would not help illustrate the customized behavior. To see the &lt;b&gt;HoverDropDown &lt;/b&gt;in action, please build and run the sample included with the article.&lt;/p&gt;
&lt;h2&gt;Downloads&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Download Studio for Silverlight: &lt;a href="http://www.componentone.com/SuperProducts/StudioSilverlight/" target="_blank"&gt;Get your 30-day, full-featured trial &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Download C1Toolbar Samples: &lt;a href="http://helpcentral.componentone.com/CS/blogs/silverlight/C1Toolbar_Sample_Projects.zip"&gt;C1Toolbar_Sample_Projects.zip&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.componentone.com/CS/aggbug.aspx?PostID=227878" width="1" height="1"&gt;</description><category domain="http://blogs.componentone.com/CS/blogs/silverlight/archive/tags/XAML/default.aspx">XAML</category><category domain="http://blogs.componentone.com/CS/blogs/silverlight/archive/tags/button/default.aspx">button</category><category domain="http://blogs.componentone.com/CS/blogs/silverlight/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.componentone.com/CS/blogs/silverlight/archive/tags/dropdown/default.aspx">dropdown</category><category domain="http://blogs.componentone.com/CS/blogs/silverlight/archive/tags/toolbar/default.aspx">toolbar</category><category domain="http://blogs.componentone.com/CS/blogs/silverlight/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>Welcome to WPF &amp; Silverlight blog</title><link>http://blogs.componentone.com/CS/blogs/silverlight/archive/2010/01/26/welcome-to-wpf-silverlight-blog.aspx</link><pubDate>Mon, 25 Jan 2010 22:32:00 GMT</pubDate><guid isPermaLink="false">6ffc9ae0-0270-4839-b826-46696419445e:227877</guid><dc:creator>C1_GregL</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;This blog is for anything exciting and new from the ComponentOne WPF &amp;amp; Silverlight development team.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.componentone.com/CS/aggbug.aspx?PostID=227877" width="1" height="1"&gt;</description><category domain="http://blogs.componentone.com/CS/blogs/silverlight/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.componentone.com/CS/blogs/silverlight/archive/tags/ComponentOne/default.aspx">ComponentOne</category><category domain="http://blogs.componentone.com/CS/blogs/silverlight/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>How ComponentOne Web Parts Improve the SharePoint Experience</title><link>http://blogs.componentone.com/CS/blogs/c1buzz/archive/2010/01/22/how-componentone-web-parts-improve-the-sharepoint-experience.aspx</link><pubDate>Fri, 22 Jan 2010 16:55:00 GMT</pubDate><guid isPermaLink="false">6ffc9ae0-0270-4839-b826-46696419445e:227803</guid><dc:creator>C1_EveT</dc:creator><slash:comments>1</slash:comments><description>&lt;font size="2"&gt;
&lt;p&gt;Read this document to learn how our Web Parts are unique and how they will help you. You will learn details about each benefit ComponentOne Web Parts deliver as well as screen shots, and links for documentation, tutorials, and samples. &lt;a href="http://www.componentone.com/newimages/products/datasheets/HowC1WebPartsHelp.pdf"&gt;http://www.componentone.com/newimages/products/datasheets/HowC1WebPartsHelp.pdf&lt;/a&gt;&lt;/p&gt;&lt;/font&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.componentone.com/CS/aggbug.aspx?PostID=227803" width="1" height="1"&gt;</description></item><item><title>Easy Data Views in SharePoint - Studio for SharePoint Just Released!</title><link>http://blogs.componentone.com/CS/blogs/c1buzz/archive/2010/01/20/easy-data-views-in-sharepoint-studio-for-sharepoint-just-released.aspx</link><pubDate>Wed, 20 Jan 2010 21:11:00 GMT</pubDate><guid isPermaLink="false">6ffc9ae0-0270-4839-b826-46696419445e:227690</guid><dc:creator>C1_EveT</dc:creator><slash:comments>0</slash:comments><description>&lt;span style="FONT-SIZE:11pt;FONT-FAMILY:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;
&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;LINE-HEIGHT:normal;mso-margin-top-alt:auto;mso-margin-bottom-alt:auto;"&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:Arial;mso-themecolor:text1;"&gt;Studio for SharePoint includes the only Web Parts (DataGrid, Chart, and Maps) that give you a point-and-click interface to select the data sources and completely configure how the data is displayed. &lt;/span&gt;&lt;/p&gt;&lt;span style="COLOR:black;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-font-family:Arial;mso-themecolor:text1;"&gt;Check it out at: &lt;a href="http://www.componentone.com/SuperProducts/SharePointWebParts/"&gt;http://www.componentone.com/SuperProducts/SharePointWebParts/&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.componentone.com/CS/aggbug.aspx?PostID=227690" width="1" height="1"&gt;</description></item><item><title>Join WritersUA for a 4-day conference on software user assistance</title><link>http://blogs.componentone.com/CS/blogs/c1buzz/archive/2010/01/19/join-writersua-for-a-4-day-conference-on-software-user-assistance.aspx</link><pubDate>Tue, 19 Jan 2010 20:05:00 GMT</pubDate><guid isPermaLink="false">6ffc9ae0-0270-4839-b826-46696419445e:227618</guid><dc:creator>C1_EveT</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;span style="FONT-SIZE:10pt;COLOR:#554e3c;FONT-FAMILY:&amp;#39;Georgia&amp;#39;,&amp;#39;serif&amp;#39;;mso-fareast-font-family:Calibri;mso-fareast-theme-font:minor-latin;mso-bidi-font-family:&amp;#39;Times New Roman&amp;#39;;mso-ansi-language:EN-US;mso-fareast-language:EN-US;mso-bidi-language:AR-SA;"&gt;The focus is on developing the best possible user experience for all types of software applications through well-designed interfaces and helpful and accessible support information. Stop by our booth #7&amp;nbsp;and attend Nicky Bleiel&amp;#39;s (our &amp;quot;Ask the Expert&amp;quot; author) sessions: &amp;quot;Speed Sketching&amp;quot; A Software Documentation Project and the &amp;quot;User Assistance Trends&amp;quot; panel. &lt;a href="http://www.writersua.com/ohc/index.html"&gt;http://www.writersua.com/ohc/index.html&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.componentone.com/CS/aggbug.aspx?PostID=227618" width="1" height="1"&gt;</description></item><item><title>Visual Studio 2010 beta Compatibility </title><link>http://blogs.componentone.com/CS/blogs/c1buzz/archive/2010/01/15/visual-studio-2010-beta-compatibility.aspx</link><pubDate>Fri, 15 Jan 2010 19:46:00 GMT</pubDate><guid isPermaLink="false">6ffc9ae0-0270-4839-b826-46696419445e:227468</guid><dc:creator>C1_EveT</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;a href="http://helpcentral.componentone.com/CS/blogs/windev/archive/2010/01/15/visual-studio-2010-beta-compatibility.aspx"&gt;http://helpcentral.componentone.com/CS/blogs/windev/archive/2010/01/15/visual-studio-2010-beta-compatibility.aspx&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.componentone.com/CS/aggbug.aspx?PostID=227468" width="1" height="1"&gt;</description></item><item><title>Visual Studio 2010 beta Compatibility</title><link>http://blogs.componentone.com/CS/blogs/windev/archive/2010/01/15/visual-studio-2010-beta-compatibility.aspx</link><pubDate>Fri, 15 Jan 2010 17:54:00 GMT</pubDate><guid isPermaLink="false">6ffc9ae0-0270-4839-b826-46696419445e:227462</guid><dc:creator>C1_GregL</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;If you convert an existing project or solution to Visual Studio 2010 beta there should be no problem. But if you are creating new projects within VS2010 beta there are a couple things you need to know when using ComponentOne WinForms controls.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;You cannot target .NET 4.0 Client Profile (which is the default for any new WindowsApplication.)&lt;/li&gt;
&lt;li&gt;The ISupportInitialize BeginInit and EndInit methods do not get generated automatically when you drop a new C1 control on the form.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;
&lt;h2&gt;Workarounds&lt;/h2&gt;
&lt;h3&gt;1. Targeting .NET 4.0 Framework &lt;/h3&gt;
&lt;p&gt;To use &lt;strong&gt;ComponentOne WinForms&lt;/strong&gt; controls under .NET 4, you must target the &lt;strong&gt;full&lt;/strong&gt; .NET 4.0 Framework. By default, new projects are set to target the .NET 4.0 Client Profile. ComponentOne controls depend on the full framework to run properly. If your application is targeting the Client Profile, ComponentOne controls will not appear in the toolbox, and you’ll receive errors regarding System.Design.dll.&lt;/p&gt;
&lt;p&gt;To change this setting for &lt;font color="#009900"&gt;&lt;strong&gt;C# applications&lt;/strong&gt;&lt;/font&gt;: go to the project&amp;#39;s properties (from the Visual Studio menu, select Project | Properties...) and from the Application tab change the Target framework to &amp;quot;.NET Framework 4&amp;quot;.&lt;/p&gt;
&lt;p&gt;To change this setting for &lt;font color="#0066ff"&gt;&lt;strong&gt;VB applications&lt;/strong&gt;&lt;/font&gt;: go to the project&amp;#39;s properties (from the Visual Studio menu, select Project | Properties...) and from the Compile tab click the Advanced Compile Options…. From this window change the Target framework to &amp;quot;.NET Framework 4&amp;quot;.&lt;/p&gt;
&lt;p&gt;Upon changing this you will be prompted to close and reopen the project.&lt;/p&gt;
&lt;h3&gt;2. Adding New Controls to the Form &lt;/h3&gt;
&lt;p&gt;When you&amp;nbsp;add a new C1 control onto your form in Visual Studio 2010 beta, everything should appear fine until you go to run the form. The control will be missing. This is because of a bug in Visual Studio where the ISupportInitialize’s BeginInit and EndInit methods are not added automatically.&lt;/p&gt;
&lt;p&gt;The fix is real simple. Just open up your designer-generated code and add these missing method calls.&lt;/p&gt;
&lt;p&gt;For &lt;font color="#009900"&gt;&lt;strong&gt;C# applications&lt;/strong&gt;&lt;/font&gt;, open up &amp;lt;YourForm&amp;gt;.Designer.cs and add the following two lines of code above the form’s SuspendLayout and ResumeLayout methods (replace c1Chart1 with the name of&amp;nbsp;your control).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;font face="courier new,courier"&gt;((System.ComponentModel.&lt;font color="#00ccff"&gt;ISupportInitialize&lt;/font&gt;)(&lt;font color="#0000ff"&gt;this&lt;/font&gt;.c1Chart1)).BeginInit();&lt;br /&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;.SuspendLayout();&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="courier new,courier"&gt;...&amp;nbsp;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="courier new,courier"&gt;((System.ComponentModel.&lt;font color="#00ccff"&gt;ISupportInitialize&lt;/font&gt;)(&lt;font color="#0000ff"&gt;this&lt;/font&gt;.c1Chart1)).EndInit();&lt;br /&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;.ResumeLayout(&lt;font color="#0000ff"&gt;false&lt;/font&gt;);&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;For &lt;font color="#0066ff"&gt;&lt;strong&gt;VB applications&lt;/strong&gt;&lt;/font&gt;, click the “Show All Files” button from the Solution Explorer and then open &amp;lt;YourForm&amp;gt;.Designer.vb. Add the following two lines of code above the form’s SuspendLayout and ResumeLayout methods (replace C1Chart1 with the name of&amp;nbsp;your control).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;font face="courier new,courier"&gt;&lt;font color="#0000ff"&gt;CType&lt;/font&gt;(&lt;font color="#0000ff"&gt;Me&lt;/font&gt;.C1Chart1, System.ComponentModel.&lt;font color="#00ccff"&gt;ISupportInitialize&lt;/font&gt;).BeginInit()&lt;br /&gt;&lt;font color="#0000ff"&gt;Me&lt;/font&gt;.SuspendLayout()&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="courier new,courier"&gt;...&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font face="courier new,courier"&gt;&lt;font color="#0000ff"&gt;CType&lt;/font&gt;(&lt;font color="#0000ff"&gt;Me&lt;/font&gt;.C1Chart1, System.ComponentModel.&lt;font color="#00ccff"&gt;ISupportInitialize&lt;/font&gt;).EndInit()&lt;br /&gt;&lt;font color="#0000ff"&gt;Me&lt;/font&gt;.ResumeLayout(&lt;font color="#0000ff"&gt;False&lt;/font&gt;)&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;You will need to do this for each C1 control added to your form.&lt;/p&gt;
&lt;p&gt;The good news is this bug will be fixed in the official release of VS2010.&lt;/p&gt;
&lt;h3&gt;Studio for WPF&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;Regarding &lt;strong&gt;ComponentOne WPF&lt;/strong&gt; controls...if you convert your existing project to VS2010 beta you should have no problem. We have reported errors of adding C1Chart and C1DataGrid to the toolbox and dragging them to a new form. These will be addressed for the official release.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.componentone.com/CS/aggbug.aspx?PostID=227462" width="1" height="1"&gt;</description><category domain="http://blogs.componentone.com/CS/blogs/windev/archive/tags/WinForms/default.aspx">WinForms</category><category domain="http://blogs.componentone.com/CS/blogs/windev/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><category domain="http://blogs.componentone.com/CS/blogs/windev/archive/tags/WPF/default.aspx">WPF</category></item></channel></rss>