<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.infragistics.com/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/"><channel><title>Sung Kim</title><link>http://blogs.infragistics.com/blogs/sung_kim/default.aspx</link><description>E. All of the above</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>Putting Anything in a Cell? - Custom Editor Provider for WebDataGrid</title><link>http://blogs.infragistics.com/blogs/sung_kim/archive/2009/03/17/putting-anything-in-a-cell-custom-editor-provider-for-webdatagrid.aspx</link><pubDate>Tue, 17 Mar 2009 15:10:00 GMT</pubDate><guid isPermaLink="false">7a8b7c76-b7ad-48e0-9694-5b04ca132ed0:82610</guid><dc:creator>[Infragistics] Sung Kim</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.infragistics.com/blogs/sung_kim/rsscomments.aspx?PostID=82610</wfw:commentRss><comments>http://blogs.infragistics.com/blogs/sung_kim/archive/2009/03/17/putting-anything-in-a-cell-custom-editor-provider-for-webdatagrid.aspx#comments</comments><description>&lt;p&gt;Have you already considered the &lt;a href="http://samples.infragistics.com/2008.3/WebFeatureBrowser/contents.aspx?showCode=True&amp;amp;t=WebDataGrid/Templates/WebDataGridEditRow.aspx~srcview.aspx?path=~srcview.aspx?path=WebDataGrid/Templates/WebDataGridEditRow.src"&gt;RowEditTemplate&lt;/a&gt; and &lt;a href="http://samples.infragistics.com/2008.3/WebFeatureBrowser/contents.aspx?showCode=True&amp;amp;t=WebDataGrid/Templates/WebDataGrid_TemplatesCellColumn.aspx~srcview.aspx?path=~srcview.aspx?path=WebDataGrid/Templates/WebDataGrid_TemplatesCellColumn.src"&gt;Templated Column&lt;/a&gt; features but would rather use a custom &lt;a href="http://samples.infragistics.com/2008.3/WebFeatureBrowser/contents.aspx?showCode=True&amp;amp;t=WebDataGrid/Editing/WebDataGrid_EditRowDefault.aspx~srcview.aspx?path=~srcview.aspx?path=WebDataGrid/Editing/WebDataGrid_EditRowDefault.src"&gt;editor provider&lt;/a&gt;?&amp;nbsp; Do you want to use a &lt;a href="http://samples.infragistics.com/2008.3/WebFeatureBrowser/contents.aspx?showCode=True&amp;amp;t=WebHtmlEditor/WebHtmlEditorWithWebSpellChecker/WebHtmlEditorWithWebSpellChecker.aspx~srcview.aspx?path=../webfeaturebrowservb/WebHtmlEditor/WebHtmlEditorWithWebSpellChecker/WebHtmlEditorWithWebSpellChecker.src~srcview.aspx?path=WebHtmlEditor/WebHtmlEditorWithWebSpellChecker/WebHtmlEditorWithWebSpellChecker.src"&gt;WebHtmlEditor&lt;/a&gt; to edit a cell?&amp;nbsp; How about a &lt;a href="http://samples.infragistics.com/2008.3/WebFeatureBrowser/contents.aspx?showCode=True&amp;amp;t=WebCharts/Gallery/Pie/Pie.aspx~srcview.aspx?path=../webfeaturebrowservb/WebCharts/Gallery/Pie/Pie.src~srcview.aspx?path=WebCharts/Gallery/Pie/Pie.src"&gt;chart&lt;/a&gt;?&amp;nbsp; Well our &lt;a href="http://www.infragistics.com/dotnet/netadvantage/aspnet/webdatagrid.aspx#Overview"&gt;WebDataGrid&lt;/a&gt; was built from the ground up to allow customer to do such customization without having to rewrite our control.&amp;nbsp; In this post, I am going to show you the basics in making the Microsoft DropDownList become an editor provider for the WebDataGrid.&amp;nbsp; If you aren&amp;rsquo;t interested in the details, here&amp;rsquo;s how you would use my DropDownProvider class in your WebDataGrid: &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:43c74dd4-0052-4259-9e88-601318de300e" class="wlWriterEditableSmartContent"&gt;
&lt;pre name="code" class="c#"&gt;protected void Page_Load(object sender, EventArgs e)
{
    //reference to the custom provider
    DropDownProvider ddprov = null;

    if (!IsPostBack)
    {
        //creates a new provider and adds it to the grid
        ddprov = new DropDownProvider();
        ddprov.ID = &amp;quot;DropDownProvider1&amp;quot;;
        this.WebDataGrid1.EditorProviders.Add(ddprov);
        //hooks up the provider to the column by key
        EditingColumnSetting colSet = new EditingColumnSetting();
        colSet.ColumnKey = &amp;quot;Country&amp;quot;;
        colSet.EditorID = ddprov.ID;
        this.WebDataGrid1.Behaviors.EditingCore.Behaviors.CellEditing.ColumnSettings.Add(colSet);
    }
    else
    {
        //gets a reference to the provider when posting back
        foreach (EditorProviderBase epd in this.WebDataGrid1.EditorProviders)
        {
            if (epd.ID == &amp;quot;DropDownProvider1&amp;quot;)
            {
                ddprov = (DropDownProvider)epd;
            }
        }
    }
    //gets the DropDownList and binds it
    DropDownList ddl = (DropDownList)ddprov.GetEditor();
    ddl.DataSource = getCountries();
    ddl.DataBind();
    ddl.ID = &amp;quot;editor1&amp;quot;;
}&lt;/pre&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The above code is similar &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/WebDataGrid_Using_Editor_Providers.html"&gt;to this documentation on using the built in editor providers&lt;/a&gt;.&amp;nbsp; The difference being that there is no design time support.&amp;nbsp; If you want the sample, it is at the bottom of this post.&amp;nbsp; If&amp;nbsp; you want to know how this is done so that you could do one of your own, read on.&lt;/p&gt;
&lt;h3&gt;Where to Start&lt;/h3&gt;
&lt;p&gt;Getting started is one of the hardest things.&amp;nbsp; Without a guide on how to do something, it is a lot of trial and error.&amp;nbsp; When I started on this, I was thinking to myself &amp;ldquo;how am I supposed to do this?&amp;rdquo;&amp;nbsp; Then I realized, we have &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/WebDataGrid_About_Editor_Providers.html"&gt;ten editor providers that shipped with the product&lt;/a&gt;!&lt;/p&gt;
&lt;h3&gt;Looking at the Source Code&lt;/h3&gt;
&lt;p&gt;As long as you have a subscription to our product, you have the source code for it.&amp;nbsp; If you want to follow along, go get it in your &lt;a href="https://www.infragistics.com/Membership/Default.aspx?panel=Downloads#Downloads"&gt;downloads section of our website&lt;/a&gt;.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Looking at the source code is not easy.&amp;nbsp; You really have to invest the time to understand it.&amp;nbsp; All of our ASP.NET AJAX controls are in the &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/Web_API_Reference_Guide_Infragistics_Web.html"&gt;Infragistics.Web&lt;/a&gt; assembly.&amp;nbsp; Once you open that solution, and go to the Infragistics35.Web.UI project,&amp;nbsp; navigate to the GridControls &amp;ndash;&amp;gt; WebDataGrid &amp;ndash;&amp;gt; EditorProviders folder.&amp;nbsp; In there you will find the code for how we did our editor providers.&amp;nbsp; I looked through a couple of them and noticed that the &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/Infragistics2.Web.v8.3~Infragistics.Web.UI.GridControls.SliderProvider.html"&gt;one for the WebSlider&lt;/a&gt; was fairly simple.&amp;nbsp; All it did was inherit from EditorProvider&amp;lt;Type&amp;gt; and overrode two items.&amp;nbsp; I did the same, hooked up my custom provider to the grid and ran the project.&amp;nbsp; I double clicked on a cell and there was my dropdown list being used as a provider.&lt;/p&gt;
&lt;div style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:1a570a71-a0e5-4221-abb0-d4e5e35f70d2" class="wlWriterEditableSmartContent"&gt;
&lt;pre name="code" class="c#"&gt;public class DropDownProvider : EditorProvider&amp;lt;DropDownList&amp;gt;
{
    //the types that this editor provider can edit
    protected override bool CanEditType(Type t)
    {
        string name = t.FullName;
        if (t.Name == &amp;quot;String&amp;quot;)
            return true;
        return false;
    }
    //class name that defines behavior on the client side
    protected override string ClientObjectClassName
    {
        get
        {
            return &amp;quot;Infragistics.Web.UI.DropDownProvider&amp;quot;;
        }
    }
}&lt;/pre&gt;
&lt;/div&gt;
&lt;h3&gt;The Client Side&lt;/h3&gt;
&lt;p&gt;I was ecstatic that such little code was needed to get my control in the cell.&amp;nbsp; My enthusiasm soon died when I realized that I have to write the JavaScript to send data to and from my DropDownList and the grid.&amp;nbsp; I went back to the source code and found the relevant code in igWebDataGridEditorProviders.js under the GridControls &amp;ndash;&amp;gt; WebDataGrid &amp;ndash;&amp;gt; js folder.&amp;nbsp; In there, I saw that certain methods were overridden depending on the editor provider.&amp;nbsp; I copied some of the code and changed the class names and ran it.&amp;nbsp; Not so lucky this time.&amp;nbsp; I ran into some JavaScript errors.&amp;nbsp; Apparently, my JavaScript needed to be executed after the initialization of our code because of namespaces.&amp;nbsp; I moved the link to my JavaScript file to the end of the body section.&amp;nbsp; After I got past that error, I started debugging the scripts and wrote the code specific to my DropDownList.&amp;nbsp; I made the most changes to get_value, set_value, and _show methods.&amp;nbsp; The get_value and set_value methods are called when passing the values to and from the grid to the editor provider.&amp;nbsp; I changed this to work with the selectedindex property.&amp;nbsp; The _show method, called when showing the editor, was modified to find the grid&amp;rsquo;s table element.&amp;nbsp; This is necessary so that the control will be hidden when clicking in the grid region, ending edit mode.&amp;nbsp; After these mild changes, the values were getting passed correctly to and from the editor and my editor provider was done or so I thought&amp;hellip;&lt;/p&gt;
&lt;div style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:156c1e6d-4a2f-4809-9d02-e9bd19861829" class="wlWriterEditableSmartContent"&gt;
&lt;pre name="code" class="js"&gt;    $IG.DropDownProvider.prototype =
{
    get_value: function() {
        /// &amp;lt;summary&amp;gt;
        /// Overrides the EditorProvider object&amp;#39;s property.
        /// Gets/sets the value to/from the underlying DropDownList. 
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;returns type=&amp;quot;Object&amp;quot;&amp;gt;Current value in editor.&amp;lt;/returns&amp;gt;
        var val = this._editor ? this._editor[this._editor.selectedIndex].text : this._old;
        return this._areEqual(val, this._old) ? this._old0 : val;
    },
    set_value: function(val) {
        /// &amp;lt;summary&amp;gt;Sets initial value in editor.&amp;lt;/summary&amp;gt;
        /// &amp;lt;param name=&amp;quot;val&amp;quot;&amp;gt;Value for editor.&amp;lt;/param&amp;gt;
        this._old0 = this._old = val;
        var editor = this._editor;
        if (!editor)
            return;
        for (var x = 0; x &amp;lt; editor.length; x++) {
            if (editor[x].text == val) {
                editor.selectedIndex = x;
            }
        }
        this._old = editor[editor.selectedIndex].text;
    }&lt;/pre&gt;
&lt;/div&gt;
&lt;h3&gt;More Changes&lt;/h3&gt;
&lt;p&gt;This sample really started because of a support case.&amp;nbsp; After a few days, my solution came back with a problem.&amp;nbsp; It would give an exception when posting back.&amp;nbsp; Looking through the stack trace, I traced it back to a GetType method call on the full name of my custom class.&amp;nbsp; Since the &lt;a href="http://blogs.msdn.com/suzcook/archive/2003/05/30/using-type-gettype-typename.aspx"&gt;GetType method will only look in the current assembly&lt;/a&gt; (Infragistics.Web), that method was returning null and made the application crash.&amp;nbsp; After some additional digging, the origin of the class name was traced back to a member of &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/Infragistics2.Web.v8.3~Infragistics.Web.UI.ICollectionObject.html"&gt;ICollectionObject&lt;/a&gt; called &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/Infragistics2.Web.v8.3~Infragistics.Web.UI.ICollectionObject~GetObjectType.html"&gt;GetObjectType&lt;/a&gt;.&amp;nbsp; I implemented that interface and overwrote that method to return the full name in addition to the assembly.&amp;nbsp; Done! Right? Nope.&amp;nbsp; The assembly name seemed to contain the &amp;lsquo;~&amp;rsquo; character.&amp;nbsp; Since, we use that character internally as a separator, I moved my class to a separate class library.&amp;nbsp; It compiled, ran and everything was fine.&amp;nbsp; &lt;/p&gt;
&lt;div style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:91bc9b03-a36b-4ec4-884f-a84d8c60afdc" class="wlWriterEditableSmartContent"&gt;
&lt;pre name="code" class="c#"&gt;string ICollectionObject.GetObjectType()
{
    return (this.GetType().FullName + &amp;quot;, &amp;quot; + this.GetType().Assembly.FullName).Replace(&amp;#39;.&amp;#39;, &amp;#39;~&amp;#39;);
}&lt;/pre&gt;
&lt;/div&gt;
&lt;h3&gt;Cleaning it up&lt;/h3&gt;
&lt;p&gt;Since it was already being separated into a separate class library, it didn&amp;rsquo;t make much sense to have to link JavaScript files in my ASP.NET website.&amp;nbsp; So I moved that file and started the process of &lt;a href="http://bchavez.bitarmory.com/archive/2008/07/28/understanding-scriptresource-and-webresource-in-asp.net.aspx"&gt;registering it as a resource in my code behind of my aspx&lt;/a&gt;.&amp;nbsp; I never had to embed resources before so I had to do some digging to find out how to do it.&amp;nbsp; It is fairly straight forward, you need to set an WebResource attribute in your class and you have to set the BuildAction property on the file to be an Embedded Resource.&amp;nbsp; I used the ScriptReference object and added it to my ScriptManager.&amp;nbsp; I ran it and got JavaScript errors due to timing.&amp;nbsp; I decided to wrap my JavaScript definitions in a method and used RegisterStartupScript to execute my method to initialize my editor provider on the client side.&amp;nbsp; Happiness returned momentarily as the application runs without issues.&lt;/p&gt;
&lt;div style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:a3bd0d73-1c31-4916-b156-b848f2187097" class="wlWriterEditableSmartContent"&gt;
&lt;pre name="code" class="c#"&gt;[assembly: System.Web.UI.WebResource(&amp;quot;CustomProviders.js.CustomProviders.js&amp;quot;, &amp;quot;text/javascript&amp;quot;)]
&lt;/pre&gt;
&lt;/div&gt;
&lt;h3&gt;Never really done&lt;/h3&gt;
&lt;p&gt;I realized that I may have moved the link to the script out of the aspx but it was still in the application.&amp;nbsp; I looked for a way to remove all references to my script from my application and came across the &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/Infragistics2.Web.v8.3~Infragistics.Web.UI.GridControls.EditorProviderBase~InitializeEditor.html"&gt;InitializeEditor method&lt;/a&gt;.&amp;nbsp; After realizing I needed a reference to the Page and ScriptManager, I made a constructor that received those two items as parameters.&amp;nbsp; You probably know what going to happen next.&amp;nbsp; You guessed it.&amp;nbsp; It works until I posted back.&lt;/p&gt;
&lt;p&gt;The error message read something like &amp;ldquo;The object does not have a parameterless constructor&amp;rdquo;.&amp;nbsp; Sigh.&amp;nbsp; If I can&amp;rsquo;t pass in my references to the page and scriptmanager, how am i going to register my script?&amp;nbsp; The only link I have to my parent (the grid) was internal and I did not have access in my class.&amp;nbsp; I had a reference to my editor but it did not yet belong to the page.&amp;nbsp; After some tinkering, I decided to leverage the DropDownList and handle its PreRender event.&amp;nbsp; At that time, it was late enough that everything was added to the page.&amp;nbsp; I used the static GetCurrent method off the ScriptManager class to obtain the current ScriptManager and I was finally done.&lt;/p&gt;
&lt;div style="padding-right:0px;display:inline;padding-left:0px;float:none;padding-bottom:0px;margin:0px;padding-top:0px;" id="scid:812469c5-0cb0-4c63-8c15-c81123a09de7:c92dc541-cb4c-477b-ae22-2985ea0a3793" class="wlWriterEditableSmartContent"&gt;
&lt;pre name="code" class="c#"&gt;protected override void InitializeEditor()
{
    ((DropDownList)this.EditorControl).PreRender += new EventHandler(DropDownProvider_PreRender);
    base.InitializeEditor();
}

void DropDownProvider_PreRender(object sender, EventArgs e)
{
    Page page = this.EditorControl.Page;
    ScriptManager sm = ScriptManager.GetCurrent(page);

    ScriptReference sr = new ScriptReference(&amp;quot;CustomProviders.js.CustomProviders.js&amp;quot;, this.GetType().Assembly.FullName);

    sm.Scripts.Add(sr);
    ScriptManager.RegisterStartupScript(page, typeof(Page), &amp;quot;initDDP&amp;quot;, @&amp;quot;&amp;lt;script type=&amp;#39;text/javascript&amp;#39;&amp;gt;initDropDownProvider();&amp;lt;/script&amp;gt;&amp;quot;, false);
}&lt;/pre&gt;
&lt;/div&gt;
&lt;h3&gt;Now you know&lt;/h3&gt;
&lt;p&gt;Not only do you know the basics to get started in making one of your own editor providers but you also saw the process that goes into a support case that is on the complicated side.&lt;/p&gt;
&lt;h3&gt;Possible Improvements&lt;/h3&gt;
&lt;p&gt;There are probably a few things that can be done to improve this.&amp;nbsp; Leave comments below with your thoughts.&amp;nbsp; The purpose of this post was to get you started if you needed to use an editor provider over a Templated Column or the RowEditTemplate feature.&amp;nbsp; With this outline, you really should be able to use any control as an editor provider.&amp;nbsp; You may run into issues but at least it won&amp;rsquo;t be the ones I ran into.&lt;/p&gt;
&lt;p&gt;Sample uses NetAdvantage 8.3.20083.1009 CLR 3.5 and Visual Studio 2008&lt;/p&gt;
&lt;p&gt;&lt;a href="http://download.infragistics.com/users/skim/DropDownProviderFullSample_CS.zip"&gt;Full Sample&lt;/a&gt; (contains website and code library project, both must reference the same version of NetAdvantage)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://download.infragistics.com/users/skim/CustomProviders.dll.zip"&gt;Just my CustomProviders dll that contains my DropDownProvider&lt;/a&gt; (references 8.3.20083.1009 CLR 3.5)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infragistics.com/aggbug.aspx?PostID=82610" width="1" height="1"&gt;</description><category domain="http://blogs.infragistics.com/blogs/sung_kim/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.infragistics.com/blogs/sung_kim/archive/tags/WebDataGrid/default.aspx">WebDataGrid</category></item><item><title>Publishing Dynamic Files - PDF/XPS Creation Using the Infragistics Document Library</title><link>http://blogs.infragistics.com/blogs/sung_kim/archive/2009/02/18/publishing-dynamic-files-pdf-xps-creation-using-the-infragistics-document-library.aspx</link><pubDate>Thu, 19 Feb 2009 00:59:00 GMT</pubDate><guid isPermaLink="false">7a8b7c76-b7ad-48e0-9694-5b04ca132ed0:77494</guid><dc:creator>[Infragistics] Sung Kim</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.infragistics.com/blogs/sung_kim/rsscomments.aspx?PostID=77494</wfw:commentRss><comments>http://blogs.infragistics.com/blogs/sung_kim/archive/2009/02/18/publishing-dynamic-files-pdf-xps-creation-using-the-infragistics-document-library.aspx#comments</comments><description>&lt;p&gt;So you want to publish your data to a PDF.&amp;nbsp; You&amp;#39;ve come to the right place to learn about how to not only generate these documents but to manipulate and style them as well.&amp;nbsp; Before we begin, let&amp;#39;s familiarize ourselves with the object that the PDF is going to be generated from.&amp;nbsp; In our toolset, we provide a code library to generate these reports called the &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/Web_Infragistics_Document_Engine.html"&gt;Infragistics Document Engine&lt;/a&gt;.&amp;nbsp; This engine contains all the elements to create and fill a &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/Infragistics2.Documents.v8.3~Infragistics.Documents.Report.Report.html"&gt;Report object&lt;/a&gt; which can then be published to either PDF or XPS, Microsoft&amp;#39;s XML paper specification, through a simple method call.&amp;nbsp; Also, since this is a code library, this can be used in both Web and Win platforms.&amp;nbsp; &lt;/p&gt;
&lt;h4&gt;Explanation regarding content :&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Since this can be done on both platforms, the post will be explained through the ASP.NET point of view.&amp;nbsp; Almost all of the code is identical in a Windows Forms environment.&amp;nbsp; The general outline will be an explanation of content, followed by commented code, and then a screenshot of the result.&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Exporting in 2ish seconds&lt;/h3&gt;
&lt;p&gt;Here at Infragistics, we try to make things easy as possible while at the same time providing rich customization options.&amp;nbsp; You can export your grids to our reports without even looking at the &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/DocumentEngine_API_Overview.html"&gt;Document Engine API&lt;/a&gt;.&amp;nbsp; To accomplish this, you will want to drag a &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/WebGridDocumentExporter.html"&gt;UltraWebGridDocumentExporter&lt;/a&gt; on to your form where you have your &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/WebGrid.html"&gt;UltraWebGrid&lt;/a&gt; that is bound to some data.&amp;nbsp; You will also want to drag on some sort of UI element like a button to initiate the export of the grid&amp;#39;s data.&amp;nbsp; Once you have those components on your design surface, handle the clicking of the button and export the data like so:&lt;/p&gt;
&lt;p&gt;UltraWebGridDocumentExporter1.Export(UltraWebGrid1);&lt;/p&gt;
&lt;p&gt;Generated PDF:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://download.infragistics.com/users/skim/PDF/p1.jpg"&gt;&lt;img border="0" width="404" src="http://download.infragistics.com/users/skim/PDF/tp1.jpg" alt="image" height="245" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;There are some customization options you have off the exporter component.&amp;nbsp; I suggest taking a look at the &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/Infragistics2.WebUI.UltraWebGrid.DocumentExport.v8.3~Infragistics.WebUI.UltraWebGrid.DocumentExport.UltraWebGridDocumentExporter_members.html"&gt;members of the UltraWebGridDocumentExporter&lt;/a&gt; if you want to modify things like &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/Infragistics2.WebUI.UltraWebGrid.DocumentExport.v8.3~Infragistics.WebUI.UltraWebGrid.DocumentExport.UltraWebGridDocumentExporter~Margins.html"&gt;Margin&lt;/a&gt;, &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/Infragistics2.WebUI.UltraWebGrid.DocumentExport.v8.3~Infragistics.WebUI.UltraWebGrid.DocumentExport.UltraWebGridDocumentExporter~TargetPaperOrientation.html"&gt;Orientation&lt;/a&gt;, or &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/Infragistics2.WebUI.UltraWebGrid.DocumentExport.v8.3~Infragistics.WebUI.UltraWebGrid.DocumentExport.UltraWebGridDocumentExporter~AutoSizeRows.html"&gt;AutoResizing&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;The Infragistics Document Library&lt;/h3&gt;
&lt;p&gt;So you now have a document that you can pass around.&amp;nbsp; This was created from one line of code but it involves many different elements that are nested inside of each other.&amp;nbsp; Here is a &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/DocumentEngine_Report_Elements.html"&gt;link to the elements&lt;/a&gt; so you will at least be aware of the cl***I will be talking about.&lt;/p&gt;
&lt;p&gt;Essentially, you have elements that layout the content and have certain restrictions on what can be placed inside of them.&amp;nbsp; The basic hierarchy is Report -&amp;gt; Section -&amp;gt; Layout -&amp;gt; Content.&amp;nbsp; &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/DocumentEngine_Layout_Element_Comparison_Table.html"&gt;Table that shows what can be placed inside of what&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Basically, you create a &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/DocumentEngine_Report.html"&gt;report&lt;/a&gt; then add a &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/DocumentEngine_Section.html"&gt;section&lt;/a&gt;.&amp;nbsp; You can add content like text and images to the section or if you need a more complex layout, use additional layout elements like grids and flows.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;The &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/DocumentEngine_Grids.html"&gt;grid&lt;/a&gt; and &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/DocumentEngine_Tables.html"&gt;table&lt;/a&gt; is essentially very similar with the main difference being the grid requires columns.&lt;/p&gt;
&lt;p&gt;The &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/DocumentEngine_Band.html"&gt;band&lt;/a&gt; and &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/DocumentEngine_Group.html"&gt;group&lt;/a&gt; is essentially the same thing with the main different being the group does not have headers, footers, and dividers.&lt;/p&gt;
&lt;p&gt;The &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/DocumentEngine_Container_and_Condition.html"&gt;container&lt;/a&gt; element allows you to inject xml.&lt;/p&gt;
&lt;p&gt;The &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/DocumentEngine_Flow.html"&gt;flow element&lt;/a&gt; allows you to have content that continues from one column to another (think newspapers).&lt;/p&gt;
&lt;p&gt;The &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/DocumentEngine_Site.html"&gt;site element&lt;/a&gt; allow you to have complete control over positioning (think absolute positioning through css).&lt;/p&gt;
&lt;p&gt;The rest of the elements are pretty self explanatory. &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/DocumentEngine_Chain.html"&gt;Chain&lt;/a&gt; (keeps things together), &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/DocumentEngine_Gap.html"&gt;Gap&lt;/a&gt; (creates gaps), &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/DocumentEngine_Rotator.html"&gt;Rotator&lt;/a&gt; (rotates content), &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/DocumentEngine_Rule.html"&gt;Rule&lt;/a&gt; (creates a rule), &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/DocumentEngine_Stretcher.html"&gt;Stretcher&lt;/a&gt; (fills the rest of the page).&lt;/p&gt;
&lt;p&gt;You also have &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/DocumentEngine_Trees.html"&gt;Trees&lt;/a&gt;, &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/DocumentEngine_Lists.html"&gt;Lists&lt;/a&gt;, and &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/DocumentEngine_Text.html"&gt;Text&lt;/a&gt; to display content.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Finally, you can also add a &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/DocumentEngine_Canvas.html"&gt;Canvas&lt;/a&gt; to almost any element to start drawing circles and other primitives.&lt;/p&gt;
&lt;h3&gt;Common Changes&lt;/h3&gt;
&lt;p&gt;You may need the following using statements for the code samples below:&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; Infragistics.Documents.Report;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; Infragistics.Documents.Report.Section;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; Infragistics.Documents.Report.Text;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; Infragistics.Documents.Graphics;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; Infragistics.Documents.Report.Table;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; Infragistics.Documents.Report.Grid;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; Infragistics.Documents.Report.Band;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; Infragistics.Documents.Report.Flow;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;using&lt;/span&gt; System.Xml;&lt;/p&gt;
&lt;h3&gt;Adding headers and footers&lt;/h3&gt;
&lt;p&gt;Let&amp;#39;s make some customization so it doesn&amp;#39;t look like just a table of data.&amp;nbsp; To do that, we are going to work with the elements described above.&amp;nbsp; Off the &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/WebGridDocumentExporter.html"&gt;UltraWebGridDocumentExporter object&lt;/a&gt;, the &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/Infragistics2.WebUI.UltraWebGrid.DocumentExport.v8.3~Infragistics.WebUI.UltraWebGrid.DocumentExport.UltraWebGridDocumentExporter~Export.html"&gt;export method has a few overloads&lt;/a&gt;, one of which allows you to export to a section.&amp;nbsp; To take advantage of this overload, you want to create a the document then add the section.&amp;nbsp; You then make any customization you need and then export the grid to the specified section.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Code for creating a header and page numbers:&lt;/p&gt;
&lt;div style="font-size:10pt;background:white;color:black;font-family:courier new;"&gt;
&lt;div style="font-size:10pt;background:white;color:black;font-family:courier new;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//creates a report object&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;Report&lt;/span&gt; r = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Report&lt;/span&gt;();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//adds a section to add content to&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;ISection&lt;/span&gt; s1 = r.AddSection();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//sets properties on the section&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//to add page numbers&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;s1.PageNumbering.SkipFirst = &lt;span style="color:blue;"&gt;true&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;s1.PageNumbering.OffsetY = -18;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;s1.PageNumbering.Template = &lt;span style="color:#a31515;"&gt;&amp;quot;Page [Page #] of [TotalPages]&amp;quot;&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//adds a header to the PDF&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;ISectionHeader&lt;/span&gt; s1header = s1.AddHeader();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;s1header.Height = 20;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;s1header.Repeat = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//adds text to the header area&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;IText&lt;/span&gt; s1headertitle = s1header.AddText(0, 0);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;s1headertitle.AddContent(&lt;span style="color:#a31515;"&gt;&amp;quot;Sung&amp;#39;s Awesome PDF&amp;quot;&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;s1headertitle.Alignment = &lt;span style="color:#2b91af;"&gt;TextAlignment&lt;/span&gt;.Center;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;IText&lt;/span&gt; s1headertimestamp = s1header.AddText(0, 0);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;s1headertimestamp.AddContent(&lt;span style="color:#a31515;"&gt;&amp;quot;Produced: &amp;quot;&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;s1headertimestamp.AddDateTime(&lt;span style="color:#a31515;"&gt;&amp;quot;MM/dd/yyyy hh:mm:ss&amp;quot;&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;s1headertimestamp.Alignment = &lt;span style="color:#2b91af;"&gt;TextAlignment&lt;/span&gt;.Right;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//exports the grid to the section&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;this&lt;/span&gt;.UltraWebGridDocumentExporter1.Export(&lt;span style="color:blue;"&gt;this&lt;/span&gt;.UltraWebGrid1, s1);&lt;/p&gt;
&lt;/div&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;PDF with Header:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://download.infragistics.com/users/skim/PDF/p2.jpg"&gt;&lt;img border="0" width="404" src="http://download.infragistics.com/users/skim/PDF/tp2.jpg" alt="image" height="82" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h3&gt;Exact view of rows&lt;/h3&gt;
&lt;p&gt;Now I want to export the data based on the current view.&amp;nbsp; Very similar to a screen print, say you only wanted to export the rows that are current expanded.&amp;nbsp; To accomplish this you will want to handle the &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/Infragistics2.WebUI.UltraWebGrid.DocumentExport.v8.3~Infragistics.WebUI.UltraWebGrid.DocumentExport.UltraWebGridDocumentExporter~InitializeRow_EV.html"&gt;InitializeRow event&lt;/a&gt; of the &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/WebGridDocumentExporter.html"&gt;UltraWebGridDocumentExporter&lt;/a&gt; and see if the row is not expanded.&amp;nbsp; If not, skip the exporting of its children through a simple property setting.&lt;/p&gt;
&lt;div style="font-size:10pt;background:white;color:black;font-family:courier new;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (!e.Row.Expanded)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;{&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.SkipDescendants = &lt;span style="color:blue;"&gt;true&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Exported PDF after only expanding the 2nd row on the ASPX page:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://download.infragistics.com/users/skim/PDF/p3.jpg"&gt;&lt;img border="0" width="404" src="http://download.infragistics.com/users/skim/PDF/tp3.jpg" alt="image" height="392" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h3&gt;Formatting Rows or Cells&lt;/h3&gt;
&lt;p&gt;Now let&amp;#39;s add styling to certain rows.&amp;nbsp; Maybe the end user is interested in the Orders that are associated with a specific Employee.&amp;nbsp; The following uses the &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/Infragistics2.WebUI.UltraWebGrid.DocumentExport.v8.3~Infragistics.WebUI.UltraWebGrid.DocumentExport.UltraWebGridDocumentExporter~InitializeRow_EV.html"&gt;InitializeRow event&lt;/a&gt; as above and formats the &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/Infragistics2.WebUI.UltraWebGrid.v8.3~Infragistics.WebUI.UltraWebGrid.UltraGridRow.html"&gt;UltraWebGrid&amp;#39;s row&lt;/a&gt;.&amp;nbsp; This style is then translated to the PDF when it is created.&lt;/p&gt;
&lt;p&gt;Code for styling the row:&lt;/p&gt;
&lt;div style="font-size:10pt;background:white;color:black;font-family:courier new;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//orders table&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (e.Row.Band.Index == 1)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;{&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//if the cell value in the employeeid column&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//is 1&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt; ((&lt;span style="color:blue;"&gt;int&lt;/span&gt;)(e.Row.Cells.FromKey(&lt;span style="color:#a31515;"&gt;&amp;quot;EmployeeID&amp;quot;&lt;/span&gt;).Value)==1)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//set the style on the row&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//any style set on the row or cell gets applied&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//to the pdf &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.Row.Style.BackColor = System.Drawing.&lt;span style="color:#2b91af;"&gt;Color&lt;/span&gt;.Pink;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin:0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Pink rows in the orders table that have an Employee ID of 1:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://download.infragistics.com/users/skim/PDF/p4.jpg"&gt;&lt;img border="0" width="404" src="http://download.infragistics.com/users/skim/PDF/tp4.jpg" alt="image" height="284" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h3&gt;Adding Hyperlinks to your document&lt;/h3&gt;
&lt;p&gt;Besides displaying information, you may want users to be able to quickly go to a url by clicking on an element inside the PDF.&amp;nbsp; To accomplish this, you will want to handle the &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/Infragistics2.WebUI.UltraWebGrid.DocumentExport.v8.3~Infragistics.WebUI.UltraWebGrid.DocumentExport.UltraWebGridDocumentExporter~CellExporting_EV.html"&gt;CellExporting event&lt;/a&gt; so that you can create your own content for the appropriate cell.&amp;nbsp; After you find the cell you want to modify, make use the hyperlink feature that is available off the &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/DocumentEngine_Text.html"&gt;IText element&lt;/a&gt;.&amp;nbsp; You may also want to style it differently so that the end user knows it can be clicked on.&lt;/p&gt;
&lt;p&gt;Code to replace plain text with a hyperlink in the CustomerID column:&lt;/p&gt;
&lt;div style="font-size:10pt;background:white;color:black;font-family:courier new;"&gt;
&lt;div style="font-size:10pt;background:white;color:black;font-family:courier new;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//if the CustomerID column&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//and its on the first level&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (e.GridCell.Column.Key == &lt;span style="color:#a31515;"&gt;&amp;quot;CustomerID&amp;quot;&lt;/span&gt; &amp;amp; e.GridCell.Band.Index == 0)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;{&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//style for the hyperlink&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Infragistics.Documents.Report.Text.&lt;span style="color:#2b91af;"&gt;Style&lt;/span&gt; bluelink = &lt;span style="color:blue;"&gt;new&lt;/span&gt; Infragistics.Documents.Report.Text.&lt;span style="color:#2b91af;"&gt;Style&lt;/span&gt;(&lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Font&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;Aria&amp;quot;&lt;/span&gt;, 8, &lt;span style="color:#2b91af;"&gt;FontStyle&lt;/span&gt;.Underline), &lt;span style="color:#2b91af;"&gt;Brushes&lt;/span&gt;.Blue);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//adds the text with the hyperlink &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.ReportCell.AddText().AddContent(e.GridCell.Value.ToString(), bluelink, &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Hyperlink&lt;/span&gt;(&lt;span style="color:blue;"&gt;this&lt;/span&gt;.Request.Url.ToString() + &lt;span style="color:#a31515;"&gt;@&amp;quot;?ID=&amp;quot;&lt;/span&gt; + e.GridCell.Value.ToString()));&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//cancels the creation of the normal output&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//for this cell&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.Cancel = &lt;span style="color:blue;"&gt;true&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;} &lt;/p&gt;
&lt;/div&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Links in PDF:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://download.infragistics.com/users/skim/PDF/p5.jpg"&gt;&lt;img border="0" width="404" src="http://download.infragistics.com/users/skim/PDF/tp5.jpg" alt="image" height="440" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;ASP.NET page is shown when clicking on the &amp;quot;ANATR&amp;quot; hyperlink:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://download.infragistics.com/users/skim/PDF/p6.jpg"&gt;&lt;img border="0" width="404" src="http://download.infragistics.com/users/skim/PDF/tp6.jpg" alt="image" height="102" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Explanation of PDF generated in the Portfolio Manager Sample&lt;/h3&gt;
&lt;p&gt;There is a great example of PDF customization in our samples browser called the &lt;a href="http://samples.infragistics.com/2008.3/WebShowcase/PortfolioManager/Default.aspx"&gt;Portfolio Manager&lt;/a&gt; written by &lt;a href="http://blogs.infragistics.com/blogs/tony_lombardo/default.aspx"&gt;Tony Lombardo&lt;/a&gt;.&amp;nbsp; You can find the &lt;a href="http://samples.infragistics.com/2008.3/WebShowcase/PortfolioManager/default.aspx?report=yes"&gt;generated PDF here&lt;/a&gt;.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Screenshot of Portfolio Manager PDF:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://download.infragistics.com/users/skim/PDF/p7.jpg"&gt;&lt;img border="0" width="404" src="http://download.infragistics.com/users/skim/PDF/tp7.jpg" alt="image" height="242" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Now that is a great looking pdf.&amp;nbsp; The code is available when you download and install the samples on your machine but I thought I should explain how this is done.&amp;nbsp; There are several events that you want to take advantage of when using our exporter.&amp;nbsp; As we did before this sample makes use of a Export&amp;quot;ing&amp;quot; as opposed to an Export&amp;quot;ed&amp;quot; event.&amp;nbsp; These are the events you want to handle when you want to create your own content for a given region.&amp;nbsp; This following code segment is taken from the &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/Infragistics2.WebUI.UltraWebGrid.DocumentExport.v8.3~Infragistics.WebUI.UltraWebGrid.DocumentExport.UltraWebGridDocumentExporter~RowExporting_EV.html"&gt;RowExporting event&lt;/a&gt; off the &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/WebGridDocumentExporter.html"&gt;UltraWebGridDocumentExporter&lt;/a&gt;.&amp;nbsp; It creates a chart and p***a reference to the current section and the chart it wants exported to the user defined BuildTable method.&lt;/p&gt;
&lt;p&gt;Code in the RowExporting Event:&lt;/p&gt;
&lt;div style="font-size:10pt;background:white;color:black;font-family:courier new;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//if we are exporting the first band/level&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (e.GridRow.Band.Index == 0)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;{&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//table used to provide data to the chart&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#2b91af;"&gt;DataTable&lt;/span&gt; tempTable = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;DataTable&lt;/span&gt;();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tempTable.Columns.Add(&lt;span style="color:#a31515;"&gt;&amp;quot;AccountType&amp;quot;&lt;/span&gt;,&lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(System.&lt;span style="color:#2b91af;"&gt;String&lt;/span&gt;));&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tempTable.Columns.Add(&lt;span style="color:#a31515;"&gt;&amp;quot;Balance&amp;quot;&lt;/span&gt;,&lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(System.&lt;span style="color:#2b91af;"&gt;Decimal&lt;/span&gt;));&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//generate data for the chart&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;for&lt;/span&gt; (&lt;span style="color:blue;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; e.GridRow.Rows.Count; i++)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tempTable.Rows.Add(&lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:blue;"&gt;object&lt;/span&gt;[] { &lt;span style="color:#a31515;"&gt;&amp;quot; &amp;quot;&lt;/span&gt;+e.GridRow.Rows[i].Cells.FromKey(&lt;span style="color:#a31515;"&gt;&amp;quot;AccountType&amp;quot;&lt;/span&gt;).Value, e.GridRow.Rows[i].Cells.FromKey(&lt;span style="color:#a31515;"&gt;&amp;quot;Balance&amp;quot;&lt;/span&gt;).Value });&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//instantiates and sets properties on the chart&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Infragistics.WebUI.UltraWebChart.&lt;span style="color:#2b91af;"&gt;UltraChart&lt;/span&gt; chart = &lt;span style="color:blue;"&gt;new&lt;/span&gt; Infragistics.WebUI.UltraWebChart.&lt;span style="color:#2b91af;"&gt;UltraChart&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;chart&amp;quot;&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; chart.ChartType = Infragistics.UltraChart.Shared.Styles.&lt;span style="color:#2b91af;"&gt;ChartType&lt;/span&gt;.PieChart3D;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; chart.ColorModel.ModelStyle = Infragistics.UltraChart.Shared.Styles.&lt;span style="color:#2b91af;"&gt;ColorModels&lt;/span&gt;.CustomLinear;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; chart.DataSource = tempTable;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; chart.Height = &lt;span style="color:#2b91af;"&gt;Unit&lt;/span&gt;.Pixel(230);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; chart.Width = &lt;span style="color:#2b91af;"&gt;Unit&lt;/span&gt;.Pixel(420);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; chart.TitleBottom.Extent = 0;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; chart.TitleTop.Text = &lt;span style="color:#a31515;"&gt;&amp;quot;Current Asset Allocation&amp;quot;&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; chart.TitleTop.HorizontalAlign = &lt;span style="color:#2b91af;"&gt;StringAlignment&lt;/span&gt;.Center;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; chart.TitleTop.Font = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Font&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;Verdana&amp;quot;&lt;/span&gt;, 15);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; chart.TitleTop.FontColor = &lt;span style="color:#2b91af;"&gt;Color&lt;/span&gt;.Blue;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; chart.TitleTop.Margins.Top = 10;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; chart.Transform3D.Scale = 100;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; chart.DataBind();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; chart.Legend.Margins.Top = 40;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; chart.Legend.Visible = &lt;span style="color:blue;"&gt;true&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; chart.Legend.Location = Infragistics.UltraChart.Shared.Styles.&lt;span style="color:#2b91af;"&gt;LegendLocation&lt;/span&gt;.Right;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; chart.Legend.SpanPercentage = 30;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; chart.Legend.BorderThickness = 0;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; chart.Border.Thickness = 0;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//calls a method to create the layout for each record&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//passing in the section/region of the pdf, grid row information&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//and the chart we just created&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; BuildTable(((&lt;span style="color:#2b91af;"&gt;ISection&lt;/span&gt;)e.ContainingTable.Parent),e.GridRow,chart);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;}&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//sets a booleon so that it does not create the&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//default layout of each row in the PDF&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;e.Cancel = &lt;span style="color:blue;"&gt;true&lt;/span&gt;;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Here is the BuildTable method that creates a Grid element for each row.&amp;nbsp; You will see the use of alternating styles, RowSpan for the last column, and formatting through padding, margin, and size:&lt;/p&gt;
&lt;div style="font-size:10pt;background:white;color:black;font-family:courier new;"&gt;
&lt;div style="font-size:10pt;background:white;color:black;font-family:courier new;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;private&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; BuildTable(Infragistics.Documents.Report.Section.&lt;span style="color:#2b91af;"&gt;ISection&lt;/span&gt; section,Infragistics.WebUI.UltraWebGrid.&lt;span style="color:#2b91af;"&gt;UltraGridRow&lt;/span&gt; row, Infragistics.WebUI.UltraWebChart.&lt;span style="color:#2b91af;"&gt;UltraChart&lt;/span&gt; chart)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;{&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//creates a grid element to layout the contents of each row&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Infragistics.Documents.Report.Grid.&lt;span style="color:#2b91af;"&gt;IGrid&lt;/span&gt; grid = section.AddGrid();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//sets some layout properties on the object&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.Borders.Corners.All= &lt;span style="color:blue;"&gt;new&lt;/span&gt; Infragistics.Documents.Report.&lt;span style="color:#2b91af;"&gt;Corner&lt;/span&gt;(Infragistics.Documents.Graphics.&lt;span style="color:#2b91af;"&gt;Pens&lt;/span&gt;.DodgerBlue, Infragistics.Documents.Utils.&lt;span style="color:#2b91af;"&gt;Converter&lt;/span&gt;.PixelsToPoints(10));&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.Borders.All = &lt;span style="color:blue;"&gt;new&lt;/span&gt; Infragistics.Documents.Report.&lt;span style="color:#2b91af;"&gt;Border&lt;/span&gt;(Infragistics.Documents.Graphics.&lt;span style="color:#2b91af;"&gt;Pens&lt;/span&gt;.DodgerBlue);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.Margins.All = Infragistics.Documents.Utils.&lt;span style="color:#2b91af;"&gt;Converter&lt;/span&gt;.PixelsToPoints(10);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; grid.Paddings.All = Infragistics.Documents.Utils.&lt;span style="color:#2b91af;"&gt;Converter&lt;/span&gt;.PixelsToPoints(10);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//creates 3 columns for laying out the grid&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#2b91af;"&gt;IGridColumn&lt;/span&gt; labels=grid.AddColumn();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#2b91af;"&gt;IGridColumn&lt;/span&gt; data = grid.AddColumn();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#2b91af;"&gt;IGridColumn&lt;/span&gt; chartCol = grid.AddColumn();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//sets the width of each column&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; labels.Width = &lt;span style="color:blue;"&gt;new&lt;/span&gt; Infragistics.Documents.Report.&lt;span style="color:#2b91af;"&gt;RelativeWidth&lt;/span&gt;(15);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; data.Width = &lt;span style="color:blue;"&gt;new&lt;/span&gt; Infragistics.Documents.Report.&lt;span style="color:#2b91af;"&gt;RelativeWidth&lt;/span&gt;(25);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; chartCol.Width = &lt;span style="color:blue;"&gt;new&lt;/span&gt; Infragistics.Documents.Report.&lt;span style="color:#2b91af;"&gt;RelativeWidth&lt;/span&gt;(60);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//cell count is used to designate the amount&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//of rows created&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;int&lt;/span&gt; rows = row.Cells.Count;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//two styles are created to simulate an alternate style&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Infragistics.Documents.Report.&lt;span style="color:#2b91af;"&gt;Background&lt;/span&gt; background1 = &lt;span style="color:blue;"&gt;new&lt;/span&gt; Infragistics.Documents.Report.&lt;span style="color:#2b91af;"&gt;Background&lt;/span&gt;(&lt;span style="color:blue;"&gt;new&lt;/span&gt; Infragistics.Documents.Graphics.&lt;span style="color:#2b91af;"&gt;LinearGradientBrush&lt;/span&gt;(&lt;span style="color:blue;"&gt;new&lt;/span&gt; Infragistics.Documents.Graphics.&lt;span style="color:#2b91af;"&gt;Color&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;Color&lt;/span&gt;.WhiteSmoke), &lt;span style="color:blue;"&gt;new&lt;/span&gt; Infragistics.Documents.Graphics.&lt;span style="color:#2b91af;"&gt;Color&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;Color&lt;/span&gt;.Gainsboro), 2f));&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Infragistics.Documents.Report.&lt;span style="color:#2b91af;"&gt;Background&lt;/span&gt; background2 = &lt;span style="color:blue;"&gt;new&lt;/span&gt; Infragistics.Documents.Report.&lt;span style="color:#2b91af;"&gt;Background&lt;/span&gt;(&lt;span style="color:blue;"&gt;new&lt;/span&gt; Infragistics.Documents.Graphics.&lt;span style="color:#2b91af;"&gt;LinearGradientBrush&lt;/span&gt;(&lt;span style="color:blue;"&gt;new&lt;/span&gt; Infragistics.Documents.Graphics.&lt;span style="color:#2b91af;"&gt;Color&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;Color&lt;/span&gt;.Gainsboro), &lt;span style="color:blue;"&gt;new&lt;/span&gt; Infragistics.Documents.Graphics.&lt;span style="color:#2b91af;"&gt;Color&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;Color&lt;/span&gt;.WhiteSmoke), 2f));&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;for&lt;/span&gt; (&lt;span style="color:blue;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; rows; i++)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//creates a new row on the layout grid for each cell value&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#2b91af;"&gt;IGridRow&lt;/span&gt; irow = grid.AddRow();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//adds a cell for the label&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//and adds a IText&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#2b91af;"&gt;IGridCell&lt;/span&gt; cell = irow.AddCell();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cell.Paddings.All = Infragistics.Documents.Utils.&lt;span style="color:#2b91af;"&gt;Converter&lt;/span&gt;.PixelsToPoints(3);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cell.AddText().AddContent(row.Cells[i].Column.Header.Caption);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//alternates the style applied&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (i % 2 == 0)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cell.Background = background1;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//adds another cell for displaying &lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//the value&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cell = irow.AddCell();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cell.Paddings.All = Infragistics.Documents.Utils.&lt;span style="color:#2b91af;"&gt;Converter&lt;/span&gt;.PixelsToPoints(3);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cell.AddText().AddContent(row.Cells[i] != &lt;span style="color:blue;"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; row.Cells[i].Value != &lt;span style="color:blue;"&gt;null&lt;/span&gt; ? row.Cells[i].Value.ToString() : &lt;span style="color:#a31515;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//alternate style again&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (i % 2 == 0)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cell.Background = background2;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//final cell for displaying the chart&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cell = irow.AddCell();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cell.Paddings.All = Infragistics.Documents.Utils.&lt;span style="color:#2b91af;"&gt;Converter&lt;/span&gt;.PixelsToPoints(10);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cell.Alignment.Horizontal = Infragistics.Documents.Report.&lt;span style="color:#2b91af;"&gt;Alignment&lt;/span&gt;.Right;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//creates a canvas element that the chart&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//can render an image to&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Infragistics.Documents.Report.&lt;span style="color:#2b91af;"&gt;ICanvas&lt;/span&gt; canvas = cell.AddCanvas();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; canvas.Borders.Corners.All = &lt;span style="color:blue;"&gt;new&lt;/span&gt; Infragistics.Documents.Report.&lt;span style="color:#2b91af;"&gt;Corner&lt;/span&gt;(Infragistics.Documents.Graphics.&lt;span style="color:#2b91af;"&gt;Pens&lt;/span&gt;.DimGray, Infragistics.Documents.Utils.&lt;span style="color:#2b91af;"&gt;Converter&lt;/span&gt;.PixelsToPoints(5));&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; canvas.Borders.All=&lt;span style="color:blue;"&gt;new&lt;/span&gt; Infragistics.Documents.Report.&lt;span style="color:#2b91af;"&gt;Border&lt;/span&gt;(Infragistics.Documents.Graphics.&lt;span style="color:#2b91af;"&gt;Pens&lt;/span&gt;.DimGray);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; canvas.Height = &lt;span style="color:blue;"&gt;new&lt;/span&gt; Infragistics.Documents.Report.&lt;span style="color:#2b91af;"&gt;FixedHeight&lt;/span&gt;(Infragistics.Documents.Utils.&lt;span style="color:#2b91af;"&gt;Converter&lt;/span&gt;.PixelsToPoints(307f));&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; canvas.Width=&lt;span style="color:blue;"&gt;new&lt;/span&gt; Infragistics.Documents.Report.&lt;span style="color:#2b91af;"&gt;FixedWidth&lt;/span&gt;(Infragistics.Documents.Utils.&lt;span style="color:#2b91af;"&gt;Converter&lt;/span&gt;.PixelsToPoints(560f));&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//only creates a chart once for each row&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:blue;"&gt;if&lt;/span&gt;(i==0)chart.RenderPdfFriendlyGraphics(canvas.CreateGraphics());&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; cell.RowSpan = rows;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="margin:0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;PDF from scratch&lt;/h3&gt;
&lt;p&gt;Up till now we worked with the exporter component to generate PDF files.&amp;nbsp; We are now going to use a lot of what we went over to create a PDF from scratch.&amp;nbsp; You will need a reference to the &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/Web_API_Reference_Guide_Infragistics_Documents.html"&gt;Infragistics.Document&lt;/a&gt; assembly.&amp;nbsp; All this code is executed in a button click and is broken up into 3 segments.&amp;nbsp; The first segment deals with creating the report and a section.&amp;nbsp; We then add a header, define some styles and add a grid to layout the first level of the header.&amp;nbsp; I chose to use a grid and the ability to span columns so that I didn&amp;#39;t have to define widths.&amp;nbsp; I also use some alignment and some styles on the IText elements.&lt;/p&gt;
&lt;p&gt;Code for part 1:&lt;/p&gt;
&lt;div style="font-size:10pt;background:white;color:black;font-family:courier new;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//creates the report&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;Report&lt;/span&gt; r = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Report&lt;/span&gt;();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//creates the section&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;ISection&lt;/span&gt; sect1 = r.AddSection();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//creates a non repeating header&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;ISectionHeader&lt;/span&gt; sect1Head = sect1.AddHeader();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;sect1Head.Repeat = &lt;span style="color:blue;"&gt;false&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;sect1Head.Height = 80;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//styles used in the header&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;Infragistics.Documents.Report.Text.&lt;span style="color:#2b91af;"&gt;Style&lt;/span&gt; headerstyle = &lt;span style="color:blue;"&gt;new&lt;/span&gt; Infragistics.Documents.Report.Text.&lt;span style="color:#2b91af;"&gt;Style&lt;/span&gt;(&lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Font&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;Old English Text MT&amp;quot;&lt;/span&gt;, 32), &lt;span style="color:#2b91af;"&gt;Brushes&lt;/span&gt;.Black);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;Infragistics.Documents.Report.Text.&lt;span style="color:#2b91af;"&gt;Style&lt;/span&gt; headerSmall = &lt;span style="color:blue;"&gt;new&lt;/span&gt; Infragistics.Documents.Report.Text.&lt;span style="color:#2b91af;"&gt;Style&lt;/span&gt;(&lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Font&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;Arial&amp;quot;&lt;/span&gt;, 8), &lt;span style="color:#2b91af;"&gt;Brushes&lt;/span&gt;.Black);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;Infragistics.Documents.Report.Text.&lt;span style="color:#2b91af;"&gt;Style&lt;/span&gt; headerTiny = &lt;span style="color:blue;"&gt;new&lt;/span&gt; Infragistics.Documents.Report.Text.&lt;span style="color:#2b91af;"&gt;Style&lt;/span&gt;(&lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Font&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;Arial&amp;quot;&lt;/span&gt;, 6), &lt;span style="color:#2b91af;"&gt;Brushes&lt;/span&gt;.Black);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//adds a group to the header to help layout contents&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;IGroup&lt;/span&gt; sect1HeadGroup = sect1Head.AddGroup(0, 0); &lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//using grid to layout first set of elements&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;IGrid&lt;/span&gt; sect1HeadGroupGrid = sect1HeadGroup.AddGrid();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//using the gridpattern to style the grid&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;GridPattern&lt;/span&gt; gridPattern = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;GridPattern&lt;/span&gt;();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;gridPattern.Margins = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Margins&lt;/span&gt;(5);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;gridPattern.Paddings = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Paddings&lt;/span&gt;(10);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;sect1HeadGroupGrid.ApplyPattern(gridPattern);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//adds 5 columns, columns must be added for a grid element&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;sect1HeadGroupGrid.AddColumn();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;sect1HeadGroupGrid.AddColumn();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;sect1HeadGroupGrid.AddColumn();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;sect1HeadGroupGrid.AddColumn();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;sect1HeadGroupGrid.AddColumn();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//frist row of the grid in the header&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;IGridRow&lt;/span&gt; headergridrow1 = sect1HeadGroupGrid.AddRow();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;IGridCell&lt;/span&gt; r1c1 = headergridrow1.AddCell();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;IText&lt;/span&gt; r1c1text = r1c1.AddText();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;r1c1text.AddContent(&lt;span style="color:#a31515;"&gt;&amp;quot;Everything you need to know about NetAdvantage&amp;quot;&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;r1c1.Borders = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Borders&lt;/span&gt;(&lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Pen&lt;/span&gt;(&lt;span style="color:#2b91af;"&gt;Colors&lt;/span&gt;.Black, &lt;span style="color:#2b91af;"&gt;DashStyle&lt;/span&gt;.Solid), 2);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;IGridCell&lt;/span&gt; r1c2 = headergridrow1.AddCell();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;r1c2.ColSpan = 3;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;IText&lt;/span&gt; sect1HeadText = r1c2.AddText();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;sect1HeadText.Alignment = &lt;span style="color:#2b91af;"&gt;TextAlignment&lt;/span&gt;.Center;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;sect1HeadText.AddContent(&lt;span style="color:#a31515;"&gt;&amp;quot;The Sung Kim Times&amp;quot;&lt;/span&gt;, headerstyle);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;IGridCell&lt;/span&gt; r1c5 = headergridrow1.AddCell();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;IText&lt;/span&gt; r1c5text = r1c5.AddText();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;r1c5text.AddContent(&lt;span style="color:#a31515;"&gt;&amp;quot;NetAdvantage 9.1 Releasing Soon!&amp;quot;&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//adds a rule after the grid&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;sect1HeadGroup.AddRule();&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Code needed to export the PDF to the browser:&lt;/p&gt;
&lt;div style="font-size:10pt;background:white;color:black;font-family:courier new;"&gt;
&lt;p style="margin:0px;"&gt;Response.AddHeader(&lt;span style="color:#a31515;"&gt;&amp;quot;Content-Disposition&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;attachment; filename=&amp;quot;&lt;/span&gt; + &lt;span style="color:#a31515;"&gt;&amp;quot;doc.pdf&amp;quot;&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;Response.AddHeader(&lt;span style="color:#a31515;"&gt;&amp;quot;Content-Transfer-Encoding&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;binary&amp;quot;&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;r.Publish(Response.OutputStream, &lt;span style="color:#2b91af;"&gt;FileFormat&lt;/span&gt;.PDF);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;Response.Flush();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;Response.End();&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Generated PDF w/ custom header&lt;/p&gt;
&lt;p&gt;&lt;a href="http://download.infragistics.com/users/skim/PDF/p8.jpg"&gt;&lt;img border="0" width="404" src="http://download.infragistics.com/users/skim/PDF/tp8.jpg" alt="image" height="56" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;The 2nd part deals with adding an additional level of of the header.&amp;nbsp; I chose to use two separate grids so that I could use the rule element and split the content.&amp;nbsp; For the 2nd section, I do more of the same with adding text to cells with some styling.&lt;/p&gt;
&lt;p&gt;Code for 2nd part:&lt;/p&gt;
&lt;div style="font-size:10pt;background:white;color:black;font-family:courier new;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//2nd grid for the 2nd row of content&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;IGrid&lt;/span&gt; sect1HeadGroupGrid2 = sect1HeadGroup.AddGrid();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;sect1HeadGroupGrid2.AddColumn();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;sect1HeadGroupGrid2.AddColumn();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;sect1HeadGroupGrid2.AddColumn();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;sect1HeadGroupGrid2.AddColumn();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;sect1HeadGroupGrid2.AddColumn();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//adds text to various cells with some styles&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;IGridRow&lt;/span&gt; headergridrow2 = sect1HeadGroupGrid2.AddRow();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;headergridrow2.AddCell().AddText().AddContent(&lt;span style="color:#a31515;"&gt;&amp;quot;VOL. I....No. 1&amp;quot;&lt;/span&gt;, headerSmall);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;headergridrow2.AddCell().AddText().AddContent(&lt;span style="color:#a31515;"&gt;&amp;quot;Copyright 2009 The Sung Kim Times&amp;quot;&lt;/span&gt;, headerTiny);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;headergridrow2.AddCell().AddText().AddContent(&lt;span style="color:#a31515;"&gt;&amp;quot;TUESDAY, JANUARY 27, 2009&amp;quot;&lt;/span&gt;, headerSmall);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;headergridrow2.AddCell();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;headergridrow2.AddCell().AddText().AddContent(&lt;span style="color:#a31515;"&gt;&amp;quot;Printed in New Jersey, ONE DOLLAR&amp;quot;&lt;/span&gt;, headerTiny);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//adds a rule to seperate content&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;sect1HeadGroup.AddRule();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;sect1.PageMargins = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Margins&lt;/span&gt;(20);&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Generated PDF w/ two Grids in the headers:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://download.infragistics.com/users/skim/PDF/p9.jpg"&gt;&lt;img border="0" width="404" src="http://download.infragistics.com/users/skim/PDF/tp9.jpg" alt="image" height="74" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Now that the header is done, this last part creates the content for the newsletter.&amp;nbsp; Again, I create some styles and add a flow element to the section.&amp;nbsp; I chose to use the flow so that I could emulate the newsletter outline.&amp;nbsp; I load a rss feed into an XmlDocument and filter out the unnecessary data.&amp;nbsp; I then go through each article and create text elements for the pertinent data.&amp;nbsp; I chose to use the table element here so that I could keep content,author and published date, on the same line and also use the KeepSolid property to keep the title, author, and date all together (not split between columns/pages).&amp;nbsp; For the title of each article, I also used a hyperlink so that one could navigate to the actual article by clicking.&amp;nbsp; The description/article portion is relatively long so I add that as a separate IText element.&amp;nbsp; Also, I am using the &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.3/CLR2.0/html/Infragistics2.Documents.v8.3~Infragistics.Documents.Report.Text.IText~AddRichContent.html"&gt;AddRichContent method&lt;/a&gt; as opposed to AddContent method since the description element contains html.&amp;nbsp; If you were to use AddContent, you would have all the tags rendered in your pdf.&lt;/p&gt;
&lt;p&gt;Code for the content of the newletter:&lt;/p&gt;
&lt;div style="font-size:10pt;background:white;color:black;font-family:courier new;"&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//styles used in the report&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;Infragistics.Documents.Report.Text.&lt;span style="color:#2b91af;"&gt;Style&lt;/span&gt; postTitle = &lt;span style="color:blue;"&gt;new&lt;/span&gt; Infragistics.Documents.Report.Text.&lt;span style="color:#2b91af;"&gt;Style&lt;/span&gt;(&lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Font&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;Arial&amp;quot;&lt;/span&gt;, 18, &lt;span style="color:#2b91af;"&gt;FontStyle&lt;/span&gt;.Underline), &lt;span style="color:#2b91af;"&gt;Brushes&lt;/span&gt;.Blue);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;Infragistics.Documents.Report.Text.&lt;span style="color:#2b91af;"&gt;Style&lt;/span&gt; postDescrip = &lt;span style="color:blue;"&gt;new&lt;/span&gt; Infragistics.Documents.Report.Text.&lt;span style="color:#2b91af;"&gt;Style&lt;/span&gt;(&lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Font&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;Arial&amp;quot;&lt;/span&gt;, 10), &lt;span style="color:#2b91af;"&gt;Brushes&lt;/span&gt;.Black);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;Infragistics.Documents.Report.Text.&lt;span style="color:#2b91af;"&gt;Style&lt;/span&gt; dateStyle = &lt;span style="color:blue;"&gt;new&lt;/span&gt; Infragistics.Documents.Report.Text.&lt;span style="color:#2b91af;"&gt;Style&lt;/span&gt;(&lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Font&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;Aria&amp;quot;&lt;/span&gt;, 8, &lt;span style="color:#2b91af;"&gt;FontStyle&lt;/span&gt;.Italic), &lt;span style="color:#2b91af;"&gt;Brushes&lt;/span&gt;.Black);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//flow used to layout content&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;IFlow&lt;/span&gt; flow = sect1.AddFlow();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//adding two columns to the flow&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;IFlowColumn&lt;/span&gt; flowcolumn1 = flow.AddColumn();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;flowcolumn1.Width = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;RelativeWidth&lt;/span&gt;(50);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;flowcolumn1.Margins.Top = 10;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;flowcolumn1.Margins.Right = 10;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;IFlowColumn&lt;/span&gt; flowcolumn2 = flow.AddColumn();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;flowcolumn2.Width = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;RelativeWidth&lt;/span&gt;(50);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;flowcolumn2.Margins.Top = 10;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;flowcolumn2.Margins.Left = 10;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//loading data from a rss feed&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;XmlDocument&lt;/span&gt; myfeed = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;XmlDocument&lt;/span&gt;();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//use the following if you do not have a dropdownlist with urls&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//myfeed.Load(@&amp;quot;http://blogs.infragistics.com/blogs/MainFeed.aspx?GroupID=15&amp;amp;Type=AllBlogs&amp;quot;);&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;myfeed.Load(&lt;span style="color:blue;"&gt;this&lt;/span&gt;.DropDownList1.SelectedItem.Value);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//selects the articles from the feed&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:#2b91af;"&gt;XmlNodeList&lt;/span&gt; articles = myfeed.SelectNodes(&lt;span style="color:#a31515;"&gt;&amp;quot;rss/channel/item&amp;quot;&lt;/span&gt;);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:green;"&gt;//goes through each article&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color:#2b91af;"&gt;XmlNode&lt;/span&gt; article &lt;span style="color:blue;"&gt;in&lt;/span&gt; articles)&lt;/p&gt;
&lt;p style="margin:0px;"&gt;{&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//table used to keep the title and author together&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#2b91af;"&gt;ITable&lt;/span&gt; table = flow.AddTable();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:green;"&gt;//keeps content from splitting&lt;/span&gt;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; table.KeepSolid = &lt;span style="color:blue;"&gt;true&lt;/span&gt;;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#2b91af;"&gt;ITableRow&lt;/span&gt; tabler0 = table.AddRow();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#2b91af;"&gt;ITableCell&lt;/span&gt; tabler0c0 = tabler0.AddCell();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#2b91af;"&gt;IText&lt;/span&gt; title = tabler0c0.AddText();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; title.AddContent(article[&lt;span style="color:#a31515;"&gt;&amp;quot;title&amp;quot;&lt;/span&gt;].InnerText, postTitle, &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;Hyperlink&lt;/span&gt;(article[&lt;span style="color:#a31515;"&gt;&amp;quot;link&amp;quot;&lt;/span&gt;].InnerText));&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#2b91af;"&gt;ITableRow&lt;/span&gt; tabler1 = table.AddRow();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#2b91af;"&gt;ITableCell&lt;/span&gt; tabler1c1 = tabler1.AddCell();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tabler1c1.Width = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;FixedWidth&lt;/span&gt;(100);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tabler1c1.AddText().AddContent(&lt;span style="color:#a31515;"&gt;&amp;quot;by: &amp;quot;&lt;/span&gt; + article[&lt;span style="color:#a31515;"&gt;&amp;quot;dc:creator&amp;quot;&lt;/span&gt;].InnerText);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#2b91af;"&gt;ITableCell&lt;/span&gt; tabler1c2 = tabler1.AddCell();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tabler1c2.Width = &lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;RelativeWidth&lt;/span&gt;(100);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; tabler1c2.AddText().AddContent(&lt;span style="color:#a31515;"&gt;&amp;quot;published: &amp;quot;&lt;/span&gt; + article[&lt;span style="color:#a31515;"&gt;&amp;quot;pubDate&amp;quot;&lt;/span&gt;].InnerText, dateStyle);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color:#2b91af;"&gt;IText&lt;/span&gt; description = flow.AddText();&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; description.Style = postDescrip;&lt;/p&gt;
&lt;p style="margin:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; description.AddRichContent(article[&lt;span style="color:#a31515;"&gt;&amp;quot;description&amp;quot;&lt;/span&gt;].InnerText);&lt;/p&gt;
&lt;p style="margin:0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Final PDF with the header, two columns using the Flow element, and html content through the AddRichContent method:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://download.infragistics.com/users/skim/PDF/p10.jpg"&gt;&lt;img border="0" width="404" src="http://download.infragistics.com/users/skim/PDF/tp10.jpg" alt="image" height="520" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Additional Comments&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://blogs.infragistics.com/blogs/taz/archive/2008/12/12/webdatagrid-how-to-import-data-from-excel-export-it-to-excel-pdf-or-xps.aspx"&gt;You can also export out latest and greatest WebDataGrid to PDF, XPS, and Excel.&amp;nbsp; Take a look at this post&lt;/a&gt; by our &lt;a href="http://blogs.infragistics.com/blogs/taz/default.aspx"&gt;ASP.NET Product Manager Murtaza Abdeali&lt;/a&gt;.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sample uses the following:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;-Infragistics NetAdvantage 2008 Volume 3 CLR 3.5&lt;/p&gt;
&lt;p&gt;-Visual Studio 2008&lt;/p&gt;
&lt;p&gt;Get full sample &lt;a href="http://download.infragistics.com/users/skim/PDFSample_CS.zip"&gt;here&lt;/a&gt;. (388kb)&lt;/p&gt;
&lt;p&gt;Just get the Newsletter Sample &lt;a href="http://download.infragistics.com/users/skim/TheTimes_CS.zip"&gt;here&lt;/a&gt;. (7kb)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infragistics.com/aggbug.aspx?PostID=77494" width="1" height="1"&gt;</description></item><item><title>Chart University - Chart 101 and Some 201 301 401 Stuff</title><link>http://blogs.infragistics.com/blogs/sung_kim/archive/2008/09/05/chart-university-chart-101-and-some-201-301-401-stuff.aspx</link><pubDate>Fri, 05 Sep 2008 23:41:00 GMT</pubDate><guid isPermaLink="false">7a8b7c76-b7ad-48e0-9694-5b04ca132ed0:77480</guid><dc:creator>[Infragistics] Sung Kim</dc:creator><slash:comments>20</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.infragistics.com/blogs/sung_kim/rsscomments.aspx?PostID=77480</wfw:commentRss><comments>http://blogs.infragistics.com/blogs/sung_kim/archive/2008/09/05/chart-university-chart-101-and-some-201-301-401-stuff.aspx#comments</comments><description>&lt;p&gt;Charts are fun and apparently useful.&amp;nbsp; They give people the ability to relate information quickly and effectively.&amp;nbsp; They show trends and patterns through the use of polygons in different locations and of varying sizes.&amp;nbsp; Most will probably agree with me on what I have said so far except for the fun part.&amp;nbsp; If you have ever tried to make your own chart, it is definitely not fun.&amp;nbsp; If you succeed, it will look primitive at best and unless you spent a great deal of resources to architect it to be easily extensible, any changes you require down the road will only add more code and bloat your custom control.&amp;nbsp; That is why using our &lt;a href="http://www.infragistics.com/hot/charting.aspx#ChartingampGauges"&gt;UltraChart control&lt;/a&gt;, included in both &lt;a href="http://www.infragistics.com/dotnet/netadvantage/winforms.aspx#Overview"&gt;NetAdvantage for Windows Forms&lt;/a&gt; or &lt;a href="http://www.infragistics.com/dotnet/netadvantage/aspnet.aspx#Overview"&gt;NetAdvantage for ASP.NET&lt;/a&gt;, will make your job much simpler and will impress stubborn crowds with minimal effort.&lt;/p&gt;
&lt;h3&gt;Where to start...&lt;/h3&gt;
&lt;p&gt;This post is going to show you the steps required to get familiar with our chart and will show some of the extensibility built into our UltraChart control.&amp;nbsp; Now, before I continue, I want to mention that anything I talk about here will apply to both &lt;a href="http://www.infragistics.com/dotnet/netadvantage/winforms/winchart.aspx#Overview"&gt;WinChart&lt;/a&gt; and &lt;a href="http://www.infragistics.com/dotnet/netadvantage/aspnet/webchart.aspx#Overview"&gt;WebChart&lt;/a&gt;.&amp;nbsp; Since both are built on the same core code base, your WinChart code will affect your WebChart in the same manner and vice versa.&amp;nbsp; Also, I will use UltraChart to refer to both WinChart and WebChart.&amp;nbsp; A warning, this post is fairly long.&amp;nbsp; Even though this post shows the evolution of an UltraChart as we continue to add to it, you may jump around as each part does not depend on another.&amp;nbsp; Finally, it would be useful to bring in the following namespaces in your using statements:&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;using&lt;/span&gt; Infragistics.UltraChart.Core.Primitives;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;using&lt;/span&gt; Infragistics.UltraChart.Resources.Appearance;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;using&lt;/span&gt; Infragistics.UltraChart.Core;&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;ChartType&lt;/h3&gt;
&lt;p&gt;I usually learn by doing.&amp;nbsp; So let&amp;#39;s do by dragging on a chart control onto your design surface.&amp;nbsp; One of the first properties you should get aquainted with is the &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Infragistics2.Win.UltraWinChart.v8.2~Infragistics.Win.UltraWinChart.UltraChart~ChartType.html"&gt;ChartType&lt;/a&gt; property.&amp;nbsp; This property will dictate the type of chart that is shown to the user to visualize your data.&amp;nbsp; There are many different values for the ChartType enumeration, &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Chart_About_2D_Line_Charts.html"&gt;Line&lt;/a&gt;, &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Chart_About_2D_Bar_Charts.html"&gt;Bar&lt;/a&gt;, &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Chart_About_2D_Column_Charts.html"&gt;Column&lt;/a&gt;, &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Chart_About_2D_Funnel_Charts.html"&gt;Funnel&lt;/a&gt;, &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Chart_About_Candle_Charts.html"&gt;Candle&lt;/a&gt;, &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Chart_About_2D_Bubble_Charts.html"&gt;Bubble&lt;/a&gt;, &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Chart_About_Treemap_Charts.html"&gt;Treemap&lt;/a&gt;, &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Chart_About_Radar_Charts.html"&gt;Radar&lt;/a&gt;, &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Chart_About_2D_Heat_Map_Charts.html"&gt;Heat Map&lt;/a&gt;, &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Chart_About_2D_Pie_Charts.html"&gt;Pie&lt;/a&gt;, &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Chart_About_2D_Histogram_Charts.html"&gt;Histogram&lt;/a&gt;, and &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Chart_About_Gantt_Charts.html"&gt;Gantt&lt;/a&gt; to name some.&amp;nbsp; In addition, there are 3D and 2D variations to some of these charts.&amp;nbsp; For learning purposes, I am going to pick the 2D Column Chart.&amp;nbsp; Complete list here for &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Chart_2D_Charts.html"&gt;2D&lt;/a&gt; and &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Chart_3D_Charts.html"&gt;3D&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://download.infragistics.com/users/skim/ChartU/c1.jpg"&gt;&lt;img border="0" width="604" src="http://download.infragistics.com/users/skim/ChartU/tc1.jpg" alt="chartstep0" height="436" style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h3&gt;Data.DataSource&lt;/h3&gt;
&lt;p&gt;So, we know how we want to visualize the data.&amp;nbsp; But what good is a chart if it has nothing to plot?&amp;nbsp; There are many ways to provide the UltraChart data.&amp;nbsp; You can use an &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Chart_Binding_to_an_Array.html"&gt;array&lt;/a&gt;, &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Chart_Binding_to_Classes_Derived_from_CollectionBase.html"&gt;class derived from CollectionBase&lt;/a&gt;, &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Chart_Binding_to_a_DataSet_DataView_or_DataTable.html"&gt;DataSet, DataView, DataTable&lt;/a&gt;, &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Chart_Binding_to_IBindingList_or_IList.html"&gt;IBindingList, IList&lt;/a&gt;, &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Chart_Binding_to_an_XML_File.html"&gt;XML file&lt;/a&gt;, or &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Chart_Series_Collection.html"&gt;Series object&lt;/a&gt;.&amp;nbsp; We are going to use a DataTable in this sample, but you can click on any of the above types to go to a help article that walks you through&amp;nbsp; consuming the other types of data sources.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Another step completed.&amp;nbsp; We know where we are going to get the data from and which ChartType will render that data.&amp;nbsp; But, we do not know what kind of arrangement of data or the datatypes the chart expects.&amp;nbsp; This brings us to..&lt;/p&gt;
&lt;h3&gt;Chart Data Requirements&lt;/h3&gt;
&lt;p&gt;Here are the requirements for &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Chart_Data_Requirements_for_2D_Charts.html"&gt;2D&lt;/a&gt; and &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Chart_Data_Requirements_for_3D_Charts.html"&gt;3D&lt;/a&gt; charts.&amp;nbsp; You will see that there are various requirements for each chart type.&amp;nbsp; Some are more demanding than others.&amp;nbsp; And it&amp;#39;s a good thing the Column chart is not one of those demanding types as it only requires one numeric column.&amp;nbsp; So let&amp;#39;s create a DataTable with one numeric column.&amp;nbsp; We should be good to go, right?&amp;nbsp; Yes, if you want a chart to render.&amp;nbsp; No, if you want to render in a specific way.&amp;nbsp; By saying no, I am not talking about little tweaks to make the chart to look perfect, but instead you not only need to know what kind of data is necessary but how the UltraChart will interpret that data.&amp;nbsp; In the &amp;quot;&lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Chart_Chart_Types.html"&gt;ChartTypes&lt;/a&gt;&amp;quot; section of the documentation, there are &amp;quot;Working with (insert ChartType here) Data&amp;quot; articles under each ChartType.&amp;nbsp; These articles will give you a sample DataTable and a rendered chart to show you how the data will be represented by that specific chart type.&amp;nbsp; &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Chart_Working_with_2D_Column_Chart_Data.html"&gt;Here&amp;#39;s&lt;/a&gt; the article for the 2D Column Chart.&amp;nbsp; Based on that example, I created the DataTable shown below.&lt;/p&gt;
&lt;p&gt;Code for my DataTable that I will be using:&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:#2b91af;"&gt;DataTable&lt;/span&gt; dt = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;DataTable&lt;/span&gt;();&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;dt.Columns.Add(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;Month&amp;quot;&lt;/span&gt;, &lt;span style="COLOR:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR:blue;"&gt;string&lt;/span&gt;));&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;dt.Columns.Add(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;Leads&amp;quot;&lt;/span&gt;, &lt;span style="COLOR:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR:blue;"&gt;int&lt;/span&gt;));&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;dt.Columns.Add(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;Sales&amp;quot;&lt;/span&gt;, &lt;span style="COLOR:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="COLOR:blue;"&gt;int&lt;/span&gt;));&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;dt.Rows.Add(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;January&amp;quot;&lt;/span&gt;, 120, 50);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;dt.Rows.Add(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;February&amp;quot;&lt;/span&gt;, 90, 44);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;dt.Rows.Add(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;March&amp;quot;&lt;/span&gt;, 70, 22);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;dt.Rows.Add(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;April&amp;quot;&lt;/span&gt;, 66, 21);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;dt.Rows.Add(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;May&amp;quot;&lt;/span&gt;, 80, 42);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;dt.Rows.Add(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;June&amp;quot;&lt;/span&gt;, 85, 48);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;ultraChart1.Data.DataSource = dt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;ultraChart1.Data.DataBind();&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Here is what my Chart looks like:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://download.infragistics.com/users/skim/ChartU/c2.jpg"&gt;&lt;img border="0" width="404" src="http://download.infragistics.com/users/skim/ChartU/tc2.jpg" alt="image" height="332" style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h3&gt;Minor Customizations (201)&lt;/h3&gt;
&lt;p&gt;Now that you should be able to make a chart of any type, let&amp;#39;s go into some minor customizations that each of those charts may require.&lt;/p&gt;
&lt;h4&gt;Custom Axis Range&lt;/h4&gt;
&lt;p&gt;By default, the axis will scale based on the lowest and highest values, 21 and 120 in this case.&amp;nbsp; If you wanted to set it to show from 0 to 200, you can do that by setting the &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Infragistics2.Win.UltraWinChart.v8.2~Infragistics.UltraChart.Resources.Appearance.AxisAppearance~RangeType.html"&gt;RangeType&lt;/a&gt; to Custom, &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Infragistics2.Win.UltraWinChart.v8.2~Infragistics.UltraChart.Resources.Appearance.AxisAppearance~RangeMax.html"&gt;RangeMax&lt;/a&gt; to 200, and &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Infragistics2.Win.UltraWinChart.v8.2~Infragistics.UltraChart.Resources.Appearance.AxisAppearance~RangeMin.html"&gt;RangeMin&lt;/a&gt; to 0&amp;nbsp; on the Y axis.&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;ultraChart1.Axis.Y.RangeType = Infragistics.UltraChart.Shared.Styles.&lt;span style="COLOR:#2b91af;"&gt;AxisRangeType&lt;/span&gt;.Custom;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;ultraChart1.Axis.Y.RangeMax = 200;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;ultraChart1.Axis.Y.RangeMin = 0;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Chart after modification:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://download.infragistics.com/users/skim/ChartU/c3.jpg"&gt;&lt;img border="0" width="404" src="http://download.infragistics.com/users/skim/ChartU/tc3.jpg" alt="image" height="332" style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h4&gt;ColorModel&lt;/h4&gt;
&lt;p&gt;There are many different ways to control the coloring scheme of chart elements.&amp;nbsp; To do so you want to modify the &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Infragistics2.Win.UltraWinChart.v8.2~Infragistics.UltraChart.Resources.Appearance.ColorAppearance~ModelStyle.html"&gt;ColorModel.ModelStyle&lt;/a&gt; property to the setting you wish to use.&amp;nbsp; I am going to demonstrate the CustomLinear setting in this sample but you can see the other various ways to modify the appearance being used &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Chart_Appearance.html"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;ultraChart1.ColorModel.ModelStyle = Infragistics.UltraChart.Shared.Styles.&lt;span style="COLOR:#2b91af;"&gt;ColorModels&lt;/span&gt;.CustomLinear;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;ultraChart1.ColorModel.CustomPalette = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;Color&lt;/span&gt;[]{&lt;span style="COLOR:#2b91af;"&gt;Color&lt;/span&gt;.Orange, &lt;span style="COLOR:#2b91af;"&gt;Color&lt;/span&gt;.Orchid, &lt;span style="COLOR:#2b91af;"&gt;Color&lt;/span&gt;.PapayaWhip};&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Chart after modification:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://download.infragistics.com/users/skim/ChartU/c4.jpg"&gt;&lt;img border="0" width="404" src="http://download.infragistics.com/users/skim/ChartU/tc4.jpg" alt="image" height="332" style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h4&gt;Legend&lt;/h4&gt;
&lt;p&gt;It really isn&amp;#39;t too necessary in this sample.&amp;nbsp; But there are cases where a legend can make a chart much more readable.&amp;nbsp; To make use of a legend, simply set it to be visible and set its location like so:&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;ultraChart1.Legend.Visible = &lt;span style="COLOR:blue;"&gt;true&lt;/span&gt;;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;ultraChart1.Legend.Location = Infragistics.UltraChart.Shared.Styles.&lt;span style="COLOR:#2b91af;"&gt;LegendLocation&lt;/span&gt;.Bottom;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Chart after modification:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://download.infragistics.com/users/skim/ChartU/c5.jpg"&gt;&lt;img border="0" width="404" src="http://download.infragistics.com/users/skim/ChartU/tc5.jpg" alt="image" height="332" style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h4&gt;TitleTop&lt;/h4&gt;
&lt;p&gt;You may also want to give your chart a title and you can make use of our &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Infragistics2.Win.UltraWinChart.v8.2~Infragistics.Win.UltraWinChart.UltraChart~TitleTop.html"&gt;TitleTop&lt;/a&gt;, &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Infragistics2.Win.UltraWinChart.v8.2~Infragistics.Win.UltraWinChart.UltraChart~TitleBottom.html"&gt;TitleBottom&lt;/a&gt;, &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Infragistics2.Win.UltraWinChart.v8.2~Infragistics.Win.UltraWinChart.UltraChart~TitleLeft.html"&gt;TitleLeft&lt;/a&gt;, and &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Infragistics2.Win.UltraWinChart.v8.2~Infragistics.Win.UltraWinChart.UltraChart~TitleRight.html"&gt;TitleRight&lt;/a&gt; properties.&amp;nbsp; You will want to set the Visible property to true and the Text property for what you wish to display.&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;ultraChart1.TitleTop.Visible = &lt;span style="COLOR:blue;"&gt;true&lt;/span&gt;;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;ultraChart1.TitleTop.Text = &lt;span style="COLOR:#a31515;"&gt;&amp;quot;Leads and Sales for Q1 and Q2 of 2008&amp;quot;&lt;/span&gt;;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Chart after Modification:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://download.infragistics.com/users/skim/ChartU/c6.jpg"&gt;&lt;img border="0" width="404" src="http://download.infragistics.com/users/skim/ChartU/tc6.jpg" alt="image" height="332" style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h3&gt;Modifications that Require More than 3 Lines of Code (301)&lt;/h3&gt;
&lt;p&gt;There are also some modifications that are not as simple as flipping a property.&amp;nbsp; These require using some of the events of the UltraChart and some knowledge of elements that make up one of these charts.&lt;/p&gt;
&lt;h4&gt;Changing the Color of an Item Based on a Condition (2D only)&lt;/h4&gt;
&lt;p&gt;To change the color of an element, known as a &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Infragistics2.Win.UltraWinChart.v8.2~Infragistics.UltraChart.Core.Primitives.Primitive.html"&gt;Primitive&lt;/a&gt; in the UltraChart world, you want to handle the &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Infragistics2.Win.UltraWinChart.v8.2~Infragistics.Win.UltraWinChart.UltraChart~ChartDrawItem_EV.html"&gt;ChartDrawItem&lt;/a&gt; event.&amp;nbsp; In this event, you can check the properties and settings of the current primitive to see if you want to make any modifications.&amp;nbsp; Here are some common properties&amp;nbsp; and conditions you would look at:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;e.HasData - if the Primitive being drawn is tied to any data &lt;/li&gt;
&lt;li&gt;e.Primitive.&lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Infragistics2.Win.UltraWinChart.v8.2~Infragistics.UltraChart.Core.Primitives.Primitive~Path.html"&gt;Path&lt;/a&gt; - Path is a string that signifies where a element lies 
&lt;ul&gt;
&lt;li&gt;Border.Title.Top is for the Primitive for TitleTop &lt;/li&gt;
&lt;li&gt;Border.Title.Grid.Y is for something on the Y Axis &lt;/li&gt;
&lt;li&gt;Border.Title.Legend is for something in the Legend &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;e.Primitive.&lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Infragistics2.Win.UltraWinChart.v8.2~Infragistics.UltraChart.Core.Primitives.Primitive~Value.html"&gt;Value&lt;/a&gt; - value associated with the given element, usually the data value for a bar or line &lt;/li&gt;
&lt;li&gt;certain type of primitive - some &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Infragistics2.Win.UltraWinChart.v8.2~Infragistics.UltraChart.Core.Primitives_namespace.html"&gt;types&lt;/a&gt; of primitives 
&lt;ul&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;if&lt;/span&gt; (e.Primitive &lt;span style="COLOR:blue;"&gt;is&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;Polyline&lt;/span&gt;)&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;{&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:green;"&gt;//do this&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="FONT-SIZE:10pt;BACKGROUND:white;MARGIN:0px;COLOR:black;FONT-FAMILY:courier new;"&gt;&lt;span style="COLOR:blue;"&gt;private&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;void&lt;/span&gt; ultraChart1_ChartDrawItem(&lt;span style="COLOR:blue;"&gt;object&lt;/span&gt; sender, Infragistics.UltraChart.Shared.Events.&lt;span style="COLOR:#2b91af;"&gt;ChartDrawItemEventArgs&lt;/span&gt; e)&lt;/p&gt;
&lt;p style="FONT-SIZE:10pt;BACKGROUND:white;MARGIN:0px;COLOR:black;FONT-FAMILY:courier new;"&gt;{&lt;/p&gt;
&lt;p style="FONT-SIZE:10pt;BACKGROUND:white;MARGIN:0px;COLOR:black;FONT-FAMILY:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:green;"&gt;//try casting the current primitive&lt;/span&gt;&lt;/p&gt;
&lt;p style="FONT-SIZE:10pt;BACKGROUND:white;MARGIN:0px;COLOR:black;FONT-FAMILY:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:green;"&gt;//being drawn to a Box&lt;/span&gt;&lt;/p&gt;
&lt;p style="FONT-SIZE:10pt;BACKGROUND:white;MARGIN:0px;COLOR:black;FONT-FAMILY:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#2b91af;"&gt;Box&lt;/span&gt; b = e.Primitive &lt;span style="COLOR:blue;"&gt;as&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;Box&lt;/span&gt;;&lt;/p&gt;
&lt;p style="FONT-SIZE:10pt;BACKGROUND:white;MARGIN:0px;COLOR:black;FONT-FAMILY:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:green;"&gt;//if current primitive is not a&lt;/span&gt;&lt;/p&gt;
&lt;p style="FONT-SIZE:10pt;BACKGROUND:white;MARGIN:0px;COLOR:black;FONT-FAMILY:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:green;"&gt;//box, return&lt;/span&gt;&lt;/p&gt;
&lt;p style="FONT-SIZE:10pt;BACKGROUND:white;MARGIN:0px;COLOR:black;FONT-FAMILY:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;if&lt;/span&gt; (b == &lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;)&lt;/p&gt;
&lt;p style="FONT-SIZE:10pt;BACKGROUND:white;MARGIN:0px;COLOR:black;FONT-FAMILY:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="FONT-SIZE:10pt;BACKGROUND:white;MARGIN:0px;COLOR:black;FONT-FAMILY:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;return&lt;/span&gt;;&lt;/p&gt;
&lt;p style="FONT-SIZE:10pt;BACKGROUND:white;MARGIN:0px;COLOR:black;FONT-FAMILY:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="FONT-SIZE:10pt;BACKGROUND:white;MARGIN:0px;COLOR:black;FONT-FAMILY:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:green;"&gt;//if path is null&lt;/span&gt;&lt;/p&gt;
&lt;p style="FONT-SIZE:10pt;BACKGROUND:white;MARGIN:0px;COLOR:black;FONT-FAMILY:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;if&lt;/span&gt; (b.Path == &lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;)&lt;/p&gt;
&lt;p style="FONT-SIZE:10pt;BACKGROUND:white;MARGIN:0px;COLOR:black;FONT-FAMILY:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="FONT-SIZE:10pt;BACKGROUND:white;MARGIN:0px;COLOR:black;FONT-FAMILY:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:green;"&gt;//if the value is below 30&lt;/span&gt;&lt;/p&gt;
&lt;p style="FONT-SIZE:10pt;BACKGROUND:white;MARGIN:0px;COLOR:black;FONT-FAMILY:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;if&lt;/span&gt; ((&lt;span style="COLOR:blue;"&gt;double&lt;/span&gt;)b.Value &amp;lt; 30)&lt;/p&gt;
&lt;p style="FONT-SIZE:10pt;BACKGROUND:white;MARGIN:0px;COLOR:black;FONT-FAMILY:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="FONT-SIZE:10pt;BACKGROUND:white;MARGIN:0px;COLOR:black;FONT-FAMILY:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:green;"&gt;//change the fill and fillstopcolor to red&lt;/span&gt;&lt;/p&gt;
&lt;p style="FONT-SIZE:10pt;BACKGROUND:white;MARGIN:0px;COLOR:black;FONT-FAMILY:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:green;"&gt;//setting both since gradients are being used&lt;/span&gt;&lt;/p&gt;
&lt;p style="FONT-SIZE:10pt;BACKGROUND:white;MARGIN:0px;COLOR:black;FONT-FAMILY:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b.PE.Fill = &lt;span style="COLOR:#2b91af;"&gt;Color&lt;/span&gt;.Red;&lt;/p&gt;
&lt;p style="FONT-SIZE:10pt;BACKGROUND:white;MARGIN:0px;COLOR:black;FONT-FAMILY:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; b.PE.FillStopColor = &lt;span style="COLOR:#2b91af;"&gt;Color&lt;/span&gt;.Red;&lt;/p&gt;
&lt;p style="FONT-SIZE:10pt;BACKGROUND:white;MARGIN:0px;COLOR:black;FONT-FAMILY:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="FONT-SIZE:10pt;BACKGROUND:white;MARGIN:0px;COLOR:black;FONT-FAMILY:courier new;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="FONT-SIZE:10pt;BACKGROUND:white;MARGIN:0px;COLOR:black;FONT-FAMILY:courier new;"&gt;}&lt;/p&gt;
&lt;p&gt;Chart after Modification:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://download.infragistics.com/users/skim/ChartU/c7.jpg"&gt;&lt;img border="0" width="404" src="http://download.infragistics.com/users/skim/ChartU/tc7.jpg" alt="image" height="332" style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h4&gt;Adding Text to the Bars/Columns/Points (2D only)&lt;/h4&gt;
&lt;p&gt;Charts can be used for getting a general feel for the data or getting exact figures.&amp;nbsp; If the latter is required, you would make use of a &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Infragistics2.Win.UltraWinChart.v8.2~Infragistics.UltraChart.Resources.Appearance.ChartTextAppearance.html"&gt;ChartTextAppearance&lt;/a&gt; object and add it to to the ChartText collection for that ChartType.&amp;nbsp; For a column chart, it would be chart.ColumnChart.ChartText.&amp;nbsp; For a line chart, it would be chart.LineChart.ChartText.&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:#2b91af;"&gt;ChartTextAppearance&lt;/span&gt; cta = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;ChartTextAppearance&lt;/span&gt;();&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;cta.Visible = &lt;span style="COLOR:blue;"&gt;true&lt;/span&gt;;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:green;"&gt;//-2 signifies all rows or all columns&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;cta.Row = -2;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;cta.Column = -2;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;ultraChart1.ColumnChart.ChartText.Add(cta);&lt;/p&gt;
&lt;/div&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Chart after Modification:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://download.infragistics.com/users/skim/ChartU/c8.jpg"&gt;&lt;img border="0" width="404" src="http://download.infragistics.com/users/skim/ChartU/tc8.jpg" alt="image" height="332" style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h4&gt;Adding Various Primitives to the Chart (2D only)&lt;/h4&gt;
&lt;p&gt;Sometimes you need to add extra elements that are not provided in the data source or even if the data was available, the chart would not interpret that extra information in the manner necessary.&amp;nbsp; To clarify, imagine if you needed to add a target line to your sales chart.&amp;nbsp; If this value was in your table, your column chart would try to make a column out of it as there is no way to specify that value as a target line.&amp;nbsp; Since this line is not directly related to your data, you would have to draw this line in yourself.&amp;nbsp; To do that, you would handle the &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Infragistics2.Win.UltraWinChart.v8.2~Infragistics.Win.UltraWinChart.UltraChart~FillSceneGraph_EV.html"&gt;FillSceneGraph&lt;/a&gt; event, create primitives and add them to the &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Infragistics2.Win.UltraWinChart.v8.2~Infragistics.UltraChart.Core.SceneGraph.html"&gt;SceneGraph&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Code to add a red target line to a column chart:&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;private&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;void&lt;/span&gt; ultraChart1_FillSceneGraph(&lt;span style="COLOR:blue;"&gt;object&lt;/span&gt; sender, Infragistics.UltraChart.Shared.Events.&lt;span style="COLOR:#2b91af;"&gt;FillSceneGraphEventArgs&lt;/span&gt; e)&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;{&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:green;"&gt;//gets the X and Y axis&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#2b91af;"&gt;IAdvanceAxis&lt;/span&gt; x = (&lt;span style="COLOR:#2b91af;"&gt;IAdvanceAxis&lt;/span&gt;)e.Grid[&lt;span style="COLOR:#a31515;"&gt;&amp;quot;X&amp;quot;&lt;/span&gt;];&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#2b91af;"&gt;IAdvanceAxis&lt;/span&gt; y = (&lt;span style="COLOR:#2b91af;"&gt;IAdvanceAxis&lt;/span&gt;)e.Grid[&lt;span style="COLOR:#a31515;"&gt;&amp;quot;Y&amp;quot;&lt;/span&gt;];&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:green;"&gt;//checks if axis exist&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;if&lt;/span&gt; (x != &lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;)&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:green;"&gt;//figures out the coordinate to draw &lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:green;"&gt;//a line at y=100&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;int&lt;/span&gt; target = 100;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;int&lt;/span&gt; yVal = (&lt;span style="COLOR:blue;"&gt;int&lt;/span&gt;)y.Map(target);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:green;"&gt;//note: the x axis is a string axis&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:green;"&gt;//that means that 0 stands for the first &lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:green;"&gt;//column and 50 stands for the 50th &lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:green;"&gt;//column&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;int&lt;/span&gt; xStart = (&lt;span style="COLOR:blue;"&gt;int&lt;/span&gt;)x.Map(0);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;int&lt;/span&gt; xEnd = (&lt;span style="COLOR:blue;"&gt;int&lt;/span&gt;)x.Map(50);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:green;"&gt;//creates the line primitive based&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:green;"&gt;//on the coordinates&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:#2b91af;"&gt;Line&lt;/span&gt; l = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;Line&lt;/span&gt;(&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;Point&lt;/span&gt;(xStart, yVal), &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;Point&lt;/span&gt;(xEnd, yVal));&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:green;"&gt;//sets the color of the line&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; l.PE.Stroke = &lt;span style="COLOR:#2b91af;"&gt;Color&lt;/span&gt;.Red;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:green;"&gt;//adds it to the scene&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; e.SceneGraph.Add(l);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Chart after Modification:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://download.infragistics.com/users/skim/ChartU/c9.jpg"&gt;&lt;img border="0" width="404" src="http://download.infragistics.com/users/skim/ChartU/tc9.jpg" alt="image" height="332" style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Customizations that are Considered Advanced (401)&lt;/h3&gt;
&lt;p&gt;There are certain changes that are not necessarily difficult but take a few steps to complete.&amp;nbsp; I will go into a couple of them here.&lt;/p&gt;
&lt;h4&gt;Custom Labels&lt;/h4&gt;
&lt;p&gt;There are many areas of text in a chart, whether it is axis tickmark labels, series labels, items labels, chart text, or tooltips.&amp;nbsp; These can be configured to show different text based on a &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Infragistics2.Win.UltraWinChart.v8.2~Infragistics.UltraChart.Resources.Appearance.WinTooltipAppearance~FormatString.html"&gt;FormatString&lt;/a&gt; property off that object.&amp;nbsp; There are some tokens that you can make use of such as &amp;lt;DATA_VALUE&amp;gt; or &amp;lt;ITEM_LABEL&amp;gt; (complete list &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Chart_Use_Predefined_and_Custom_Label_Styles.html"&gt;here&lt;/a&gt;) but they do not encompass other more complex scenarios.&amp;nbsp; That&amp;#39;s where the &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Infragistics2.Win.UltraWinChart.v8.2~Infragistics.UltraChart.Resources.IRenderLabel.html"&gt;IRenderLabel&lt;/a&gt; interface comes in.&amp;nbsp; It allows you to customize any of the text on a chart that is configurable via the FormatString property.&lt;/p&gt;
&lt;p&gt;To implement this feature, you have to have a class that implements IRenderLabel.&amp;nbsp; This interface has one member, &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Infragistics2.Win.UltraWinChart.v8.2~Infragistics.UltraChart.Resources.IRenderLabel~ToString.html"&gt;ToString&lt;/a&gt;, which will be responsible for returning the string you want displayed given the context being passed in.&amp;nbsp; In this method, you will have access to things like the value of the element you are setting the text for, the row and column the element corresponds to in your table, and even things like the item and series labels that correspond to the given element.&amp;nbsp; Using this information, which is passed in as a hashtable, you can determine your output string and simply return that string.&amp;nbsp; This string will then show up in your chart.&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;using&lt;/span&gt; System;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;using&lt;/span&gt; System.Linq;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;using&lt;/span&gt; System.Text;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;using&lt;/span&gt; Infragistics.UltraChart.Resources;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;namespace&lt;/span&gt; WinChart101&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;{&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;class&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;CustomToolTips&lt;/span&gt;:&lt;span style="COLOR:#2b91af;"&gt;IRenderLabel&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #region&lt;/span&gt; IRenderLabel Members&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;string&lt;/span&gt; ToString(System.Collections.&lt;span style="COLOR:#2b91af;"&gt;Hashtable&lt;/span&gt; context)&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;return&lt;/span&gt; (&lt;span style="COLOR:blue;"&gt;string&lt;/span&gt;)context[&lt;span style="COLOR:#a31515;"&gt;&amp;quot;ITEM_LABEL&amp;quot;&lt;/span&gt;] +&lt;span style="COLOR:#a31515;"&gt;&amp;quot;: &amp;quot;&lt;/span&gt;+ ((&lt;span style="COLOR:blue;"&gt;double&lt;/span&gt;)context[&lt;span style="COLOR:#a31515;"&gt;&amp;quot;DATA_VALUE&amp;quot;&lt;/span&gt;]).ToString(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;#&amp;quot;&lt;/span&gt;)+ &lt;span style="COLOR:#a31515;"&gt;&amp;quot; Thousand&amp;quot;&lt;/span&gt;;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;}&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;Once you have your class set up,&amp;nbsp;you have to hook it up to your chart.&amp;nbsp; You can do that by doing the following:&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:green;"&gt;//Create a hash table. This table will be used to associate a &lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:green;"&gt;//IRenderLabel object with a particular format string&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:#2b91af;"&gt;Hashtable&lt;/span&gt; myHashTable = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;Hashtable&lt;/span&gt;();&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:green;"&gt;//Add a custom label string. &lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:green;"&gt;//The first param is the string&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:green;"&gt;//The second param is the IRenderLabel object which will translate the string into the text the user will see on the screen.&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:green;"&gt;//Note that this example is only creating one custom label. You can create as many different custom labels as you want. &lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:green;"&gt;//For each custom label, create a seperate IRenderLabel class and &lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:green;"&gt;//add an entry to the hash table linking the custom label string to the renderer.&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;myHashTable.Add(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;MyLabel&amp;quot;&lt;/span&gt;, &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;CustomToolTips&lt;/span&gt;());&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:green;"&gt;//Attach the Hash table to the Chart&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;.ultraChart1.LabelHash = myHashTable;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:green;"&gt;//Assign the custom label to the ToolTip&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;.ultraChart1.Tooltips.Format = Infragistics.UltraChart.Shared.Styles.&lt;span style="COLOR:#2b91af;"&gt;TooltipStyle&lt;/span&gt;.Custom;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;.ultraChart1.Tooltips.FormatString = &lt;span style="COLOR:#a31515;"&gt;&amp;quot;&amp;lt;MyLabel&amp;gt;&amp;quot;&lt;/span&gt;;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;old Chart Tooltips:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://download.infragistics.com/users/skim/ChartU/c10.jpg"&gt;&lt;img border="0" width="404" src="http://download.infragistics.com/users/skim/ChartU/tc10.jpg" alt="image" height="336" style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;NEW Chart Tooltips:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://download.infragistics.com/users/skim/ChartU/c11.jpg"&gt;&lt;img border="0" width="404" src="http://download.infragistics.com/users/skim/ChartU/tc11.jpg" alt="image" height="336" style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Note: This could have been done just by using the following:&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;.ultraChart1.Tooltips.Format = Infragistics.UltraChart.Shared.Styles.&lt;span style="COLOR:#2b91af;"&gt;TooltipStyle&lt;/span&gt;.Custom;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;.ultraChart1.Tooltips.FormatString = &lt;span style="COLOR:#a31515;"&gt;&amp;quot;&amp;lt;ITEM_LABEL&amp;gt;: &amp;lt;DATA_VALUE:#&amp;gt; Thousand&amp;quot;&lt;/span&gt;;&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;The above was to show how you can set your chart to use a class that implements IRenderLabel.&amp;nbsp; Typically, you would use this for when the context is not readily available, ie. when data is in another table.&lt;/p&gt;
&lt;h4&gt;Composite Charts (2D only)&lt;/h4&gt;
&lt;p&gt;Composite charts are&amp;nbsp;comprised of various 2D chart layers placed either next to or overlapping each other.&amp;nbsp; Essentially, you can take a candle chart layer, representing the high and low prices, and a column chart layer,representing the volume, and place them on a single chart control making use of the CompositeChart ChartType.&amp;nbsp; To create one of these charts you would have to create the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Infragistics2.Win.UltraWinChart.v8.2~Infragistics.UltraChart.Resources.Appearance.ChartArea.html"&gt;ChartArea&lt;/a&gt; - canvas where charts are placed &lt;/li&gt;
&lt;li&gt;&lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Infragistics2.Win.UltraWinChart.v8.2~Infragistics.UltraChart.Resources.Appearance.AxisItem.html"&gt;AxisItem&lt;/a&gt; - represents the X or Y axis, &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Chart_Axis_Requirements_for_Composite_Charts.html"&gt;requirements&lt;/a&gt; based on the ChartType of the ChartLayerAppearance &lt;/li&gt;
&lt;li&gt;&lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Infragistics2.Win.UltraWinChart.v8.2~Infragistics.UltraChart.Resources.Appearance.ChartLayerAppearance.html"&gt;ChartLayerAppearance&lt;/a&gt; - represents the ChartType layer, ie ColumnChart or ScatterChart &lt;/li&gt;
&lt;li&gt;&lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Infragistics2.Win.UltraWinChart.v8.2~Infragistics.UltraChart.Data.Series.ISeries.html"&gt;Series&lt;/a&gt; - provides data to each layer, &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Chart_Requirements_for_Series_Binding.html"&gt;types&lt;/a&gt; of Series that should be used with various ChartTypes &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;One thing to note, when working with a composite chart you have to provide&amp;nbsp;data through the use of Series objects.&amp;nbsp; Series objects are essentially just a single set of data, that can be bound or not bound.&amp;nbsp; To help visualize what it would represent, think of each line being a series object in a LineChart and the orange columns being one series while the purple columns being another series in my column chart example above.&amp;nbsp; Also, these Series objects can be used with all chart types, not just composite.&lt;/p&gt;
&lt;p&gt;Since the code for creating these is quite long, I am not including any code for them here.&amp;nbsp; You can take a look at the &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Chart_Creating_a_Composite_Chart.html"&gt;walkthroughs&lt;/a&gt; in our documentation where there are complete articles on creating these charts through the wizard, designer, and code.&lt;/p&gt;
&lt;p&gt;Examples of Composite Charts (pictures only)&lt;/p&gt;
&lt;p&gt;Composite Chart w/ Composite Legend:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://download.infragistics.com/users/skim/ChartU/c12.jpg"&gt;&lt;img border="0" width="404" src="http://download.infragistics.com/users/skim/ChartU/tc12.jpg" alt="comp1" height="372" style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Multiple Y-Axis w/ Line Layers:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://download.infragistics.com/users/skim/ChartU/c13.jpg"&gt;&lt;img border="0" width="404" src="http://download.infragistics.com/users/skim/ChartU/tc13.jpg" alt="comp2" height="311" style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Area and Line Chart in Top Area w/ Spline and Spline Area Chart on Bottom Area:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://download.infragistics.com/users/skim/ChartU/c14.jpg"&gt;&lt;img border="0" width="404" src="http://download.infragistics.com/users/skim/ChartU/tc14.jpg" alt="comp3" height="372" style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Pop Quiz!&lt;/h3&gt;
&lt;p&gt;&amp;quot;Huh?&amp;quot; Don&amp;#39;t &amp;quot;huh&amp;quot; me.&amp;nbsp; What would a university be without pop quizzes? (that wasn&amp;#39;t the pop quiz)&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;How do you specify different icons for the scatter chart? &lt;/li&gt;
&lt;li&gt;How can I set up my chart to have drill down (where you can click on a chart element to get a chart with further detailed information)? &lt;/li&gt;
&lt;li&gt;How can I set up the chart to allow zooming/scaling? &lt;/li&gt;
&lt;li&gt;How to I get a chart into a PDF document? &lt;/li&gt;
&lt;li&gt;How can I use the chart to plot just one or two values effectively? (think gauges, like a thermometer) &lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Answers (no looking before attempting the questions!)&lt;/h3&gt;
&lt;p&gt;So, how&amp;#39;d you do?&amp;nbsp; Don&amp;#39;t feel too bad if you didn&amp;#39;t know any of the them. I really didn&amp;#39;t cover any of those topics.&amp;nbsp; I just was showing you that there are lots more to charts and this post does not cover &lt;strong&gt;everything&lt;/strong&gt; that has to do with chart.&amp;nbsp; If you come up with any more questions that you can&amp;#39;t find the answer to after reviewing the &lt;a href="http://help.infragistics.com/NetAdvantage/NET/2008.2/CLR2.0"&gt;documentation&lt;/a&gt;, &lt;a href="http://blogs.infragistics.com/"&gt;community site&lt;/a&gt;, and &lt;a href="http://devcenter.infragistics.com/Support/KnowledgeBase.aspx"&gt;knowledge base&lt;/a&gt;, make use of the resources you have available, our &lt;a href="http://www.infragistics.com/support/submitrequest.aspx"&gt;support team&lt;/a&gt; and the &lt;a href="http://forums.infragistics.com/forums/default.aspx"&gt;forums&lt;/a&gt;.&amp;nbsp; For the questions above, here are the answers.&amp;nbsp; &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Each ChartType has a different set of properties that affect it.&amp;nbsp; In the &amp;quot;&lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Chart_Chart_Types.html"&gt;ChartTypes&lt;/a&gt;&amp;quot; section of the documentation, there are &amp;quot;(insert ChartType here) - Specific Properties&amp;quot; articles under each ChartType.&amp;nbsp; For the ScatterChart, there is a &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Infragistics2.Win.UltraWinChart.v8.2~Infragistics.UltraChart.Resources.Appearance.ScatterChartAppearance~Icon.html"&gt;Icon&lt;/a&gt; property that controls which icon is used. &lt;/li&gt;
&lt;li&gt;You can implement the IDrillDown interface.&amp;nbsp; Help articles that explains this &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Chart_Drilldown.html"&gt;here&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;Different answers for Win or Web &lt;ol&gt;
&lt;li&gt;Win - can be set for x, y or both
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;ultraChart1.Axis.X.ScrollScale.Visible = &lt;span style="COLOR:blue;"&gt;true&lt;/span&gt;;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;ultraChart1.Axis.X.ScrollScale.Scale = .5;&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;Web - must set at design time so that the control will copy over the necessary scrollbar images
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;UltraChart1.EnableScrollBar = &lt;span style="COLOR:blue;"&gt;true&lt;/span&gt;;&lt;/p&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;There is a &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Infragistics2.Win.UltraWinChart.v8.2~Infragistics.Win.UltraWinChart.UltraChart~RenderPdfFriendlyGraphics.html"&gt;RenderPdfFriendlyGraphics&lt;/a&gt; method that you would call passing in a graphics object off the pdf. (Note: Requires a reference to the Infragistics.Documents assembly) &lt;ol&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:#2b91af;"&gt;Report&lt;/span&gt; r = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;Report&lt;/span&gt;();&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;ultraChart1.RenderPdfFriendlyGraphics(r.AddSection().AddCanvas().CreateGraphics());&lt;/p&gt;
&lt;/div&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;Kind of a trick question, you could just give it that one value and it would plot just fine.&amp;nbsp; However, you are probably better off using a gauge.&amp;nbsp; There are three different variations, radial, linear, or digital.&amp;nbsp; Like the UltraChart, you can also layer different types of gauges on top of each other (think your car speedometer that has an odometer also). &lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img width="512" src="http://www.infragistics.com/uploadedImages/Products/NetAdvantage_for_NET/gaugeShotRadial.png" height="384" alt="" /&gt;&lt;/p&gt;
&lt;h3&gt;Graduation Day&lt;/h3&gt;
&lt;p&gt;If you read and understood every topic in this post, you have enough information to make most of the charts you will need in your application.&amp;nbsp; Congratulations, you are now a graduate of Chart University.&amp;nbsp; You will not be getting a paper diploma nor a diploma at all for that matter, just charts that will effectively convey information without causing too much stress.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Windows Forms sample uses the following:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;-Infragistics NetAdvantage 2008 Volume 2 CLR 2.0&lt;/p&gt;
&lt;p&gt;-Visual Studio 2008&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Minimum requirements:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;-Infragistics NetAdvantage (various version depending on feature being used)&lt;/p&gt;
&lt;p&gt;Get Windows Forms Sample &lt;a href="http://download.infragistics.com/users/skim/WinChart101.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ASP.NET sample uses the following:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;-Infragistics NetAdvantage 2008 Volume 2 CLR 3.5&lt;/p&gt;
&lt;p&gt;-Visual Studio 2008&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Minimum requirements:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;-Infragistics NetAdvantage (various version depending on feature being used)&lt;/p&gt;
&lt;p&gt;Get ASP.NET Sample &lt;a href="http://download.infragistics.com/users/skim/WebChart101.zip"&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infragistics.com/aggbug.aspx?PostID=77480" width="1" height="1"&gt;</description><category domain="http://blogs.infragistics.com/blogs/sung_kim/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://blogs.infragistics.com/blogs/sung_kim/archive/tags/Windows+Forms/default.aspx">Windows Forms</category></item><item><title>Poof Goes the NavigationOverflowButtonAreaUIElement - Creation Filter Explained</title><link>http://blogs.infragistics.com/blogs/sung_kim/archive/2008/08/28/poof-goes-the-navigationoverflowbuttonareauielement-creation-filter-explained.aspx</link><pubDate>Thu, 28 Aug 2008 20:57:00 GMT</pubDate><guid isPermaLink="false">7a8b7c76-b7ad-48e0-9694-5b04ca132ed0:77479</guid><dc:creator>[Infragistics] Sung Kim</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.infragistics.com/blogs/sung_kim/rsscomments.aspx?PostID=77479</wfw:commentRss><comments>http://blogs.infragistics.com/blogs/sung_kim/archive/2008/08/28/poof-goes-the-navigationoverflowbuttonareauielement-creation-filter-explained.aspx#comments</comments><description>&lt;h3&gt;Rising Cost of Real Estate - Adding (not covered) or Removing&amp;nbsp; Elements in your Windows Forms Application&lt;/h3&gt;
&lt;p&gt;So you have only so much screen space to work with and you could really do without that extra bar at the bottom of the Outlook style &lt;a href="http://www.infragistics.com/dotnet/netadvantage/winforms/winexplorerbar.aspx#Overview"&gt;UltraExplorerBar&lt;/a&gt;.&amp;nbsp; You really do not have the time to go into the source code and recompile everything for such a feature.&amp;nbsp; There has to be a better alternative.&amp;nbsp; Right?&amp;nbsp; Since you decided to use the Infragistics toolset, you are in luck.&amp;nbsp; Since our controls are built on top of our &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Win_Presentation_Layer_Framework_PLF.html"&gt;Presentation Layer Framework&lt;/a&gt;, you can take advantage of a feature called a &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Win_Creation_Filter.html"&gt;creation filter&lt;/a&gt; which allows you to keep certain elements from being created and/or allows you to create your own elements that you can embed in various areas of your controls.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;To better explain, you have this:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://blogs.infragistics.com/blogs/skim/WindowsLiveWriter/CustomizingElementsinyourWindowsFormsApp_E8D3/image_2.png"&gt;&lt;img style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="404" alt="image" src="http://blogs.infragistics.com/blogs/skim/WindowsLiveWriter/CustomizingElementsinyourWindowsFormsApp_E8D3/image_thumb.png" width="604" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;but want this:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://blogs.infragistics.com/blogs/skim/WindowsLiveWriter/CustomizingElementsinyourWindowsFormsApp_E8D3/image_8.png"&gt;&lt;img style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="404" alt="image" src="http://blogs.infragistics.com/blogs/skim/WindowsLiveWriter/CustomizingElementsinyourWindowsFormsApp_E8D3/image_thumb_3.png" width="604" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;h3&gt;Getting Started&lt;/h3&gt;
&lt;p&gt;Because this deals with removing an element,&amp;nbsp; you know you have to use a creation filter to accomplish this task.&amp;nbsp; First you create your class and have it implement the IUIElementCreationFilter interface.&amp;nbsp; It will generate two method stubs where you can hook into the various levels of elements in our controls.&amp;nbsp; &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Infragistics2.Win.v8.2~Infragistics.Win.IUIElementCreationFilter~BeforeCreateChildElements.html"&gt;BeforeCreateChildElements&lt;/a&gt; will be called for every element before child elements of the current element is created.&amp;nbsp; &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Infragistics2.Win.v8.2~Infragistics.Win.IUIElementCreationFilter~AfterCreateChildElements.html"&gt;AfterCreateChildElements&lt;/a&gt; will be called after all the child elements are created and positioned.&lt;/p&gt;
&lt;p&gt;Here is what your class will look like:&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;using&lt;/span&gt; System;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;using&lt;/span&gt; System.Linq;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;using&lt;/span&gt; System.Text;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;using&lt;/span&gt; Infragistics.Win;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;namespace&lt;/span&gt; ExplorerBar_CreationFilterCS&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;{&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;class&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;XPBar_CreationFilter&lt;/span&gt;:&lt;span style="COLOR:#2b91af;"&gt;IUIElementCreationFilter&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #region&lt;/span&gt; IUIElementCreationFilter Members&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;void&lt;/span&gt; AfterCreateChildElements(&lt;span style="COLOR:#2b91af;"&gt;UIElement&lt;/span&gt; parent)&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;bool&lt;/span&gt; BeforeCreateChildElements(&lt;span style="COLOR:#2b91af;"&gt;UIElement&lt;/span&gt; parent)&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;return&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;false&lt;/span&gt;;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;}&lt;/p&gt;&lt;/div&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;
&lt;h3&gt;Hook it up&lt;/h3&gt;
&lt;p&gt;You have your class but now you have to tell the UltraExplorerBar to use that class.&amp;nbsp; This step is very simple but sometimes forgotten.&amp;nbsp; To do this, you just assign an instance of your class to the CreationFilter property off the control like so:&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;ultraExplorerBar1.CreationFilter = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;XPBar_CreationFilter&lt;/span&gt;();&lt;/p&gt;&lt;/div&gt;
&lt;h3&gt;But that didn&amp;#39;t do anything&lt;/h3&gt;
&lt;p&gt;Well we still didn&amp;#39;t write any logic, so yes, we really haven&amp;#39;t done anything yet.&amp;nbsp; To figure out what we need to do, we need to make use of a utility call the Infragistics UIElementViewer Utility.&amp;nbsp; More information on the tool and the download link can be found on Devin Rader&amp;#39;s Blog &lt;a href="http://geekswithblogs.net/devin/archive/2005/11/17/60406.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Doing Something&lt;/h3&gt;
&lt;p&gt;So let&amp;#39;s use this spiffy new tool. Add the dialog to your toolbox (through drag drop or choose items) and drag the dialog onto your form.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.infragistics.com/blogs/skim/WindowsLiveWriter/CustomizingElementsinyourWindowsFormsApp_E8D3/image_4.png"&gt;&lt;img style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="385" alt="image" src="http://blogs.infragistics.com/blogs/skim/WindowsLiveWriter/CustomizingElementsinyourWindowsFormsApp_E8D3/image_thumb_1.png" width="245" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Once on your form, you can show the dialog by calling the show method like so:&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;uiElementViewerDialog1.Show();&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;You then use the dialog by clicking on the binoculars and dragging it over the various areas of the Infragistics controls.&amp;nbsp; This will show you the current &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Infragistics2.Win.v8.2~Infragistics.Win.UIElement.html"&gt;UIElement&lt;/a&gt; being inspected and where the current element exists in the tree of elements. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.infragistics.com/blogs/skim/WindowsLiveWriter/CustomizingElementsinyourWindowsFormsApp_E8D3/image_6.png"&gt;&lt;img style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="384" alt="image" src="http://blogs.infragistics.com/blogs/skim/WindowsLiveWriter/CustomizingElementsinyourWindowsFormsApp_E8D3/image_thumb_2.png" width="604" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Using the information of the class name that represents each element and the hierarchy used to construct the control, you can begin to write the logic to remove that bottom element from your control. &lt;/p&gt;
&lt;h3&gt;Writing the Code&lt;/h3&gt;
&lt;p&gt;One of the simplest creation filters you can write is when you just remove an element.&amp;nbsp; To do that, in the BeforeCreateChildElements method, you check for the parent element and return true.&amp;nbsp; You can only do this if the element you are trying to remove does not have any siblings.&amp;nbsp; This is because the siblings will not be created in addition to the element you are interested in.&amp;nbsp; Since the element we are trying to remove does have a sibling we have to take an alternative method.&lt;/p&gt;
&lt;p&gt;So BeforeCreateChildElements is out of the equation.&amp;nbsp; Let&amp;#39;s take a look at AfterCreateChildElements.&amp;nbsp; In here, you want to do the same where you check for the parent type which is the NavigationAreaUIElement type in this case.&amp;nbsp; In that condition, you then call GetDescendant to retrieve the object so you can remove it from the ChildElements collection of the parent.&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;void&lt;/span&gt; AfterCreateChildElements(&lt;span style="COLOR:#2b91af;"&gt;UIElement&lt;/span&gt; parent)&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;{&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:green;"&gt;//checks to see if we have currently drawn the NavigationAreaUIElement&amp;#39;s children&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:green;"&gt;//so we have access to its children which we need to modify&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;if&lt;/span&gt; (parent &lt;span style="COLOR:blue;"&gt;is&lt;/span&gt; Infragistics.Win.UltraWinExplorerBar.&lt;span style="COLOR:#2b91af;"&gt;NavigationAreaUIElement&lt;/span&gt;)&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:green;"&gt;//gets the NavigationOverflowButtonAreaUIElement so that we can remove it&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Infragistics.Win.&lt;span style="COLOR:#2b91af;"&gt;UIElement&lt;/span&gt; overarea = parent.GetDescendant(&lt;span style="COLOR:blue;"&gt;typeof&lt;/span&gt;(Infragistics.Win.UltraWinExplorerBar.&lt;span style="COLOR:#2b91af;"&gt;NavigationOverflowButtonAreaUIElement&lt;/span&gt;));&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:green;"&gt;//if such a child exists we remove it and note its height&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;if&lt;/span&gt; (overarea != &lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;)&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; parent.ChildElements.Remove(overarea);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="MARGIN:0px;"&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; &lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;}&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;When you run this code, you will notice that the control does not look quite as you would expect.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.infragistics.com/blogs/skim/WindowsLiveWriter/CustomizingElementsinyourWindowsFormsApp_E8D3/image_10.png"&gt;&lt;img style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="404" alt="image" src="http://blogs.infragistics.com/blogs/skim/WindowsLiveWriter/CustomizingElementsinyourWindowsFormsApp_E8D3/image_thumb_4.png" width="604" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Since Windows Forms elements are essentially absolutely positioned, you have to reposition/resize all the other elements like so:&lt;/p&gt;
&lt;div style="FONT-SIZE:10pt;BACKGROUND:white;COLOR:black;FONT-FAMILY:courier new;"&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;using&lt;/span&gt; System;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;using&lt;/span&gt; System.Linq;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;using&lt;/span&gt; System.Text;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;using&lt;/span&gt; Infragistics.Win;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;namespace&lt;/span&gt; ExplorerBar_CreationFilterCS&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;{&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;class&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;XPBar_CreationFilter&lt;/span&gt; : &lt;span style="COLOR:#2b91af;"&gt;IUIElementCreationFilter&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;private&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;int&lt;/span&gt; offsetHeight;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #region&lt;/span&gt; IUIElementCreationFilter Members&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;void&lt;/span&gt; AfterCreateChildElements(&lt;span style="COLOR:#2b91af;"&gt;UIElement&lt;/span&gt; parent)&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:green;"&gt;//checks to see if we have currently drawn the NavigationAreaUIElement&amp;#39;s children&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:green;"&gt;//so we have access to its children which we need to modify&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;if&lt;/span&gt; (parent &lt;span style="COLOR:blue;"&gt;is&lt;/span&gt; Infragistics.Win.UltraWinExplorerBar.&lt;span style="COLOR:#2b91af;"&gt;NavigationAreaUIElement&lt;/span&gt;)&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="MARGIN:0px;"&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; &lt;span style="COLOR:green;"&gt;//gets the NavigationOverflowButtonAreaUIElement so that we can remove it&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&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; Infragistics.Win.&lt;span style="COLOR:#2b91af;"&gt;UIElement&lt;/span&gt; overarea = parent.GetDescendant(&lt;span style="COLOR:blue;"&gt;typeof&lt;/span&gt;(Infragistics.Win.UltraWinExplorerBar.&lt;span style="COLOR:#2b91af;"&gt;NavigationOverflowButtonAreaUIElement&lt;/span&gt;));&lt;/p&gt;
&lt;p style="MARGIN:0px;"&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; &lt;span style="COLOR:green;"&gt;//if such a child exists we remove it and note its height&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&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; &lt;span style="COLOR:blue;"&gt;if&lt;/span&gt; (overarea != &lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;)&lt;/p&gt;
&lt;p style="MARGIN:0px;"&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; {&lt;/p&gt;
&lt;p style="MARGIN:0px;"&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; offsetHeight = overarea.Rect.Height;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&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; parent.ChildElements.Remove(overarea);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&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; }&lt;/p&gt;
&lt;p style="MARGIN:0px;"&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; &lt;span style="COLOR:green;"&gt;//gets the area that shows the groups contents&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&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; Infragistics.Win.&lt;span style="COLOR:#2b91af;"&gt;UIElement&lt;/span&gt; GroupArea = parent.Parent.GetDescendant(&lt;span style="COLOR:blue;"&gt;typeof&lt;/span&gt;(Infragistics.Win.UltraWinExplorerBar.&lt;span style="COLOR:#2b91af;"&gt;GroupUIElement&lt;/span&gt;));&lt;/p&gt;
&lt;p style="MARGIN:0px;"&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; &lt;span style="COLOR:green;"&gt;//gets the splitter used by the group buttons and the group content area&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&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; Infragistics.Win.&lt;span style="COLOR:#2b91af;"&gt;UIElement&lt;/span&gt; splitter = parent.Parent.GetDescendant(&lt;span style="COLOR:blue;"&gt;typeof&lt;/span&gt;(Infragistics.Win.UltraWinExplorerBar.&lt;span style="COLOR:#2b91af;"&gt;NavigationSplitterBarUIElement&lt;/span&gt;));&lt;/p&gt;
&lt;p style="MARGIN:0px;"&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; &lt;span style="COLOR:green;"&gt;//gets the area which houses the group buttons&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&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; Infragistics.Win.&lt;span style="COLOR:#2b91af;"&gt;UIElement&lt;/span&gt; area = parent.Parent.GetDescendant(&lt;span style="COLOR:blue;"&gt;typeof&lt;/span&gt;(Infragistics.Win.UltraWinExplorerBar.&lt;span style="COLOR:#2b91af;"&gt;NavigationAreaUIElement&lt;/span&gt;));&lt;/p&gt;
&lt;p style="MARGIN:0px;"&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; &lt;span style="COLOR:green;"&gt;//offsets the group button area at the bottom by the offset amount&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&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; area.Offset(0, offsetHeight);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&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; &lt;span style="COLOR:green;"&gt;//offsets the splitter by the offset amount&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&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; splitter.Offset(0, offsetHeight);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&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; &lt;span style="COLOR:green;"&gt;//resizes the group contents area to expand to fill the empty space based on the offset amount&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&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; GroupArea.Rect = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; System.Drawing.&lt;span style="COLOR:#2b91af;"&gt;Rectangle&lt;/span&gt;(GroupArea.Rect.Left, GroupArea.Rect.Top, GroupArea.Rect.Width, GroupArea.Rect.Height + offsetHeight);&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;public&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;bool&lt;/span&gt; BeforeCreateChildElements(&lt;span style="COLOR:#2b91af;"&gt;UIElement&lt;/span&gt; parent)&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="COLOR:blue;"&gt;return&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;false&lt;/span&gt;;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&lt;span style="COLOR:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #endregion&lt;/span&gt;&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/p&gt;
&lt;p style="MARGIN:0px;"&gt;}&lt;/p&gt;&lt;/div&gt;
&lt;p&gt;This is a very powerful tool that lets you do virtually anything with our Windows Forms controls.&amp;nbsp; No property for that visual feature you want?&amp;nbsp; No problem.&amp;nbsp; Use a filter.&lt;/p&gt;
&lt;h3&gt;Oh By The Way...&lt;/h3&gt;
&lt;p&gt;There are three other types of filters out there.&amp;nbsp; I may write something on them in the future, but here are some links if you want a head start:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Win_Draw_Filter.html"&gt;Draw Filter&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Win_Cursor_Filter.html"&gt;Cursor Filter&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Win_Selection_Strategy_Filter.html"&gt;Selection Strategy Filter&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Some Samples in our Knowledge Base:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://devcenter.infragistics.com/Support/KnowledgeBaseResults.aspx?type=Full&amp;amp;query=(creationfilter+or+creation)&amp;amp;articletypes=0&amp;amp;age=0&amp;amp;sort=LastModifiedDate&amp;amp;samplesonly=0"&gt;Creation Filters&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://devcenter.infragistics.com/Support/KnowledgeBaseResults.aspx?type=Full&amp;amp;query=(drawfilter)&amp;amp;articletypes=0&amp;amp;age=0&amp;amp;sort=LastModifiedDate&amp;amp;samplesonly=0"&gt;Draw Filters&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sample uses the following:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;-Infragistics NetAdvantage 2008 Volume 2 CLR 2.0&lt;/p&gt;
&lt;p&gt;-Visual Studio 2008&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Minimum requirements:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;-Infragistics NetAdvantage&lt;/p&gt;
&lt;p&gt;Get Sample &lt;a href="http://download.infragistics.com/users/skim/ExplorerBar_CreationFilterCS.zip"&gt;here&lt;/a&gt;.&lt;a title="http://download.infragistics.com/users/skim/IGDragDrop.zip" href="http://download.infragistics.com/users/skim/IGDragDrop.zip"&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infragistics.com/aggbug.aspx?PostID=77479" width="1" height="1"&gt;</description><category domain="http://blogs.infragistics.com/blogs/sung_kim/archive/tags/Windows+Forms/default.aspx">Windows Forms</category></item><item><title>Special Delivery from the Microsoft Convention Center - Devscovery Slides and Demos</title><link>http://blogs.infragistics.com/blogs/sung_kim/archive/2008/08/22/special-delivery-from-the-microsoft-convention-center-devscovery-slides-and-demos.aspx</link><pubDate>Fri, 22 Aug 2008 04:59:27 GMT</pubDate><guid isPermaLink="false">7a8b7c76-b7ad-48e0-9694-5b04ca132ed0:77478</guid><dc:creator>[Infragistics] Sung Kim</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.infragistics.com/blogs/sung_kim/rsscomments.aspx?PostID=77478</wfw:commentRss><comments>http://blogs.infragistics.com/blogs/sung_kim/archive/2008/08/22/special-delivery-from-the-microsoft-convention-center-devscovery-slides-and-demos.aspx#comments</comments><description>&lt;p&gt;Here are the &lt;a href="http://download.infragistics.com/users/skim/CSOM.zip"&gt;slides&lt;/a&gt; and &lt;a href="http://download.infragistics.com/users/skim/CSOM_Devscovery.zip"&gt;demos&lt;/a&gt; from my &lt;a href="http://blogs.infragistics.com/blogs/skim/archive/2008/08/15/making-your-web-pages-dance-intro-to-client-side-object-model-programming.aspx"&gt;CSOM&lt;/a&gt; presentation that I gave this morning at &lt;a href="http://www.devscovery.com/"&gt;Devscovery&lt;/a&gt; - Redmond.&amp;#160; I added some comments in the code so that it should be easier to understand.&lt;/p&gt;  &lt;p&gt;So that you kind of know what each sample is about, here is a brief overview on the samples and what each of them accomplish.&lt;/p&gt;  &lt;p&gt;Aikido_Slider.aspx - Simple use of a slider updating a textbox through use of the ValueChanging event&lt;/p&gt;  &lt;p&gt;Tree_Recursive_Checkbox.aspx - Use of recursion to check all children&lt;/p&gt;  &lt;p&gt;WebDateChooser_SmartNavigate.aspx - Autoselect days when navigating to different months in the dropdown &lt;/p&gt;  &lt;p&gt;WebGrid_FillOrders.aspx - Filter webcombo controls in each column based on selection of previous column (based on this &lt;a href="http://samples.infragistics.com/2008.2/webfeaturebrowser/contents.aspx?showCode=True&amp;amp;t=WebGrid/AdjustableCombo/AdjustableCombo.aspx~srcview.aspx?path=../webfeaturebrowservb/WebGrid/AdjustableCombo/AdjustableCombo.src~srcview.aspx?path=WebGrid/AdjustableCombo/AdjustableCombo.src"&gt;sample&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;WebGrid_HandlingCRUDErrors.aspx - Use WebDialogWindow to notify the end user of errors when updating the database (based on this &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/WebGrid_Handling_CRUD_Errors_with_a_SQL_Data_Source.html"&gt;help article&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;WebTabGridDialogEditor_PageMethod.aspx - Use of Page Methods to show performant AJAX operations in conjunction with tab events and our dialog window (based on this &lt;a href="http://samples.infragistics.com/2008.2/webfeaturebrowser/contents.aspx?showCode=True&amp;amp;t=WebTabs/CustomerViewer/WebForm1.aspx~srcview.aspx?path=../webfeaturebrowservb/WebTabs/CustomerViewer/WebForm1.src~srcview.aspx?path=WebTabs/CustomerViewer/WebForm1.src"&gt;sample&lt;/a&gt; but uses PageMethods)&lt;/p&gt;  &lt;p&gt;Drag and Drop from UltraWebTree to WebSchedule - sample and walkthrough can be found &lt;a href="http://blogs.infragistics.com/blogs/skim/archive/2008/08/08/drop-it-like-its-windows-drag-and-drop-on-the-web.aspx"&gt;here&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Notes: Make sure to change the connection string in the web.config to your Northwind.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Sample uses the following (can also use CLR 2.0 version and/or Visual Studio 2005):&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;-Infragistics NetAdvantage 2008 Volume 2 CLR 3.5&lt;/p&gt;  &lt;p&gt;-Visual Studio 2008&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://download.infragistics.com/users/skim/CSOM.zip"&gt;Slides&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://download.infragistics.com/users/skim/CSOM_Devscovery.zip"&gt;Demo&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infragistics.com/aggbug.aspx?PostID=77478" width="1" height="1"&gt;</description></item><item><title>Making Your Web Pages Dance - Intro to Client Side Object Model Programming</title><link>http://blogs.infragistics.com/blogs/sung_kim/archive/2008/08/15/making-your-web-pages-dance-intro-to-client-side-object-model-programming.aspx</link><pubDate>Sat, 16 Aug 2008 02:11:00 GMT</pubDate><guid isPermaLink="false">7a8b7c76-b7ad-48e0-9694-5b04ca132ed0:77476</guid><dc:creator>[Infragistics] Sung Kim</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.infragistics.com/blogs/sung_kim/rsscomments.aspx?PostID=77476</wfw:commentRss><comments>http://blogs.infragistics.com/blogs/sung_kim/archive/2008/08/15/making-your-web-pages-dance-intro-to-client-side-object-model-programming.aspx#comments</comments><description>&lt;h3&gt;“Why Would I want to make my Web Pages Dance?”&lt;/h3&gt;
&lt;p&gt;Well not really dance, but be alive and react. Using our &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Web_Client_Side_Object_Model_CSOM_Reference_Guide.html"&gt;CSOM&lt;/a&gt;, you can make your pages more responsive to user actions without having to post back to the server. This is all possible with JavaScript and the custom objects we expose. These custom objects represent our server side controls and has a lot of methods and properties that you can access on the client side. You would retrieve our objects through utility functions and work with them in the context of the any page or element event including the custom events available within each control.&lt;/p&gt;
&lt;h3&gt;Simple Scenario from Conception to Realization&lt;/h3&gt;
&lt;p&gt;So in case none of that made sense. Let’s start with a simple sample. Let’s say we have an Infragistics &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/WebDateChooser.html"&gt;WebDateChooser&lt;/a&gt;, a date time picker with a calendar dropdown.&lt;/p&gt;
&lt;p&gt;WebDateChooser:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://blogs.infragistics.com/blogs/skim/WindowsLiveWriter/MakingYourWebPagesDanceIntrotoClientSide_FBEC/WebDateChooser.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="226" alt="WebDateChooser" src="http://blogs.infragistics.com/blogs/skim/WindowsLiveWriter/MakingYourWebPagesDanceIntrotoClientSide_FBEC/WebDateChooser_thumb.jpg" width="234" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;One day, your boss comes to you and adds a new requirement. When you navigate to a different month, he wants the control to auto pick the first date for that month if no date is already selected. If a date is already selected, a date that matches the same day should be selected. So if, 8/28/2008 is selected and we navigate to June, we want 6/28/2008 to be selected. Oh and by the way, no post back.&lt;/p&gt;
&lt;p&gt;At this point you’re probably scratching your head and saying, “Now, how do you want me to do that?” Using our CSOM, you will not only have access to pertinent data that will help you accomplish this task but will automatically persist the values you set for when you do go back to the server.&lt;/p&gt;
&lt;h3&gt;Obtaining the Custom Object&lt;/h3&gt;
&lt;p&gt;In order to obtain a custom object you have to pass the client id of a control to the utility function. There is a one or more utility functions for each control and they will be different depending on the control. The &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/WebDateChooser_Utility_Functions_CSOM.html"&gt;WebDateChooser utility function&lt;/a&gt; looks like the following:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;var&lt;/code&gt;&lt;code&gt; oCombo = igdrp_getComboById(‘&amp;lt;%= WebDateChooser1.ClientID %&amp;gt;&amp;#39;);&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Once we call this line of JavaScript, we now have a reference to the WebDateChooser object in the oCombo variable. Since we have the object, we also have access to all the &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/WebDateChooser_Object_CSOM.html"&gt;members&lt;/a&gt; of that object.&lt;/p&gt;
&lt;h3&gt;Implementing the Solution&lt;/h3&gt;
&lt;p&gt;Now that we know how to get the object, we have to figure out where we need to access this object so we can do our custom action. If you look at the &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/WebDateChooser_Client_Side_Events_CSOM.html"&gt;Client-Side Events&lt;/a&gt; for the WebDateChooser, one of them will stick out, CalendarMonthChanged. This makes sense since we want to execute our logic when the month is changed. To handle this event, we go to the ClientSideEvents property in Visual Studio, find the CalendarMonthChanged property and go to AddHandler.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.infragistics.com/blogs/skim/WindowsLiveWriter/MakingYourWebPagesDanceIntrotoClientSide_FBEC/AddHandler_4.jpg"&gt;&lt;img style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height="224" alt="AddHandler" src="http://blogs.infragistics.com/blogs/skim/WindowsLiveWriter/MakingYourWebPagesDanceIntrotoClientSide_FBEC/AddHandler_thumb_1.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Adding the handler via Properties Grid is the equivalent of doing the following in your aspx markup:&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:#a31515;"&gt;igsch&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;"&gt;:&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:#a31515;"&gt;WebDateChooser&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;"&gt; &lt;span style="COLOR:red;"&gt;ID&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;WebDateChooser1&amp;quot;&lt;/span&gt; &lt;span style="COLOR:red;"&gt;runat&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;server&amp;quot;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;ClientSideEvents&lt;/span&gt; &lt;span style="COLOR:red;"&gt;CalendarMonthChanged&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;=&amp;quot;WebDateChooser1_CalendarMonthChanged&amp;quot;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="COLOR:#a31515;"&gt;ClientSideEvents&lt;/span&gt;&lt;span style="COLOR:blue;"&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;LINE-HEIGHT:115%;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:#a31515;LINE-HEIGHT:115%;"&gt;igsch&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;LINE-HEIGHT:115%;"&gt;:&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:#a31515;LINE-HEIGHT:115%;"&gt;WebDateChooser&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;LINE-HEIGHT:115%;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Once, you handle the event you can add the necessary JavaScript code to accomplish the task.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;"&gt;function&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;"&gt; WebDateChooser1_CalendarMonthChanged(oCalendar, oDate, oEvent) { &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:green;"&gt;//grabs the value if any of the WebDateChooser &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;var&lt;/span&gt; oldValue = igdrp_getComboById(&lt;span style="COLOR:#a31515;"&gt;&amp;#39;&amp;lt;%= WebDateChooser1.ClientID %&amp;gt;&amp;#39;&lt;/span&gt;).getValue(); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:green;"&gt;//checks if a value exists &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;if&lt;/span&gt; (oldValue != &lt;span style="COLOR:blue;"&gt;null&lt;/span&gt;) { &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:green;"&gt;//gets the Date for the old value, ie. 28,29 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;var&lt;/span&gt; date = oldValue.getDate(); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:green;"&gt;//gets the month value for the new date &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;var&lt;/span&gt; newMonth = oDate.getMonth(); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:green;"&gt;//sets the Date portion on the new date &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;oDate.setDate(date); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:green;"&gt;//if the month value changes, go into this loop &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:green;"&gt;//month value would change if the date was not &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:green;"&gt;//available for that month, ie. February 30 does not exist &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:green;"&gt;//will leave when the date being set is valid for that month &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;while&lt;/span&gt; (newMonth != oDate.getMonth()) { &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:green;"&gt;//resets the mont to the month it should be &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;oDate.setMonth(newMonth); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:green;"&gt;//decrements the date by 1 &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;date = date - 1; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:green;"&gt;//sets the date again &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;oDate.setDate(date);&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;} &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;} &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:green;"&gt;//sets the SelectedDate on the CalendarDropDown &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;oCalendar.setSelectedDate(oDate); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:green;"&gt;//sets the Value on the WebDateChooser &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;igdrp_getComboById(&lt;span style="COLOR:#a31515;"&gt;&amp;#39;&amp;lt;%= WebDateChooser1.ClientID %&amp;gt;&amp;#39;&lt;/span&gt;).setValue(oDate); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE:10pt;LINE-HEIGHT:115%;"&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;But I Want to Auto-Check Child Nodes in My UltraWebTree when a Parent Node is Checked&lt;/h3&gt;
&lt;p&gt;While the above code will not accomplish this task(obviously), it is a scenario that can be accomplished with our CSOM. Using the same procedure above you would look through the various events that are available, obtain our custom objects and work with the various members off those objects. The best thing I can recommend when implementing these solutions is to use the debugger keyword (you can use breakpoints in VS08)&amp;nbsp;so you can break into specific regions of code and examine objects. Now go liven up your pages.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sample uses the following:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;-Infragistics NetAdvantage 2008 Volume 2 CLR 3.5&lt;/p&gt;
&lt;p&gt;-Visual Studio 2008&lt;/p&gt;
&lt;p&gt;Get Sample &lt;a href="http://download.infragistics.com/users/skim/CSOMPart1WebDateChooser.zip"&gt;here&lt;/a&gt;.&lt;a title="http://download.infragistics.com/users/skim/IGDragDrop.zip" href="http://download.infragistics.com/users/skim/IGDragDrop.zip"&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infragistics.com/aggbug.aspx?PostID=77476" width="1" height="1"&gt;</description><category domain="http://blogs.infragistics.com/blogs/sung_kim/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item><item><title>Drop it Like its Windows - Drag and Drop on the Web</title><link>http://blogs.infragistics.com/blogs/sung_kim/archive/2008/08/08/drop-it-like-its-windows-drag-and-drop-on-the-web.aspx</link><pubDate>Fri, 08 Aug 2008 20:40:00 GMT</pubDate><guid isPermaLink="false">7a8b7c76-b7ad-48e0-9694-5b04ca132ed0:77445</guid><dc:creator>[Infragistics] Sung Kim</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.infragistics.com/blogs/sung_kim/rsscomments.aspx?PostID=77445</wfw:commentRss><comments>http://blogs.infragistics.com/blogs/sung_kim/archive/2008/08/08/drop-it-like-its-windows-drag-and-drop-on-the-web.aspx#comments</comments><description>&lt;h3&gt;Drag what on my Web Page?&lt;/h3&gt;
&lt;p&gt;Drag and drop has been prevalent in Windows Forms but not so much in ASP.NET. To bridge that disparity, Microsoft is &lt;a href="http://www.codeplex.com/aspnet/Release/ProjectReleases.aspx?ReleaseId=14924"&gt;working&lt;/a&gt; on a Drag and Drop framework built into ASP.NET AJAX Framework. Leveraging this evolving tool, I am going to show how you how we can incorporate drag and drop functionality into an ASP.NET page, specifically one that uses Infragistics controls.&lt;/p&gt;
&lt;h3&gt;Intro to Drag and Drop&lt;/h3&gt;
&lt;p&gt;To begin, we should familiarize ourselves with the basic usage of this framework. Jeff Prosise wrote a great &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc135985.aspx"&gt;article&lt;/a&gt; on MSDN that explains how to use this framework between several div elements. Going through this article should give you the basics on setting up your page for drag and drop.&amp;nbsp; Please make sure you understand the concepts, such as DragDropManager, IDragSource, and IDropTarget, illustrated in the above article as I do not go over them in this post.&lt;/p&gt;
&lt;h3&gt;Drag and Drop from UltraWebTree to WebDayView &lt;/h3&gt;
&lt;p&gt;So, just setting an UltraWebTree as a drag source and an WebDayView as a drop target should be all you would have to do. Not quite, due to the wealth of information stored in various elements in each of these controls, we have to set up each element that contains relevant information as a drag source and each specific region that can accept a drop as a drop target. The elements you are setting as sources and targets will always change depending on the control you are interfacing with, but the process by which you identify these elements should be relatively similar.&amp;nbsp; Essentially, if it matters where on the control you drag from or drop to, you have to set up each element in that control separately.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note&lt;/em&gt;: &lt;em&gt;We could just set the UltraWebTree as a single drag source and the WebDayView as a single drop target using logic built off the &lt;/em&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms536417(VS.85).aspx"&gt;&lt;em&gt;elementFromPoint&lt;/em&gt;&lt;/a&gt;&lt;em&gt; method, but due to Firefox 2 not having such a method ( exists in Firefox 3), such an implementation would work only in IE and Safari. Based off the cursor position, this method would be used to figure out which specific element you are over inside of each control, removing the need to set up each applicable element as a source/target.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;One way to obtain the element directly under the cursor if you were to register the entire controls as a target/source:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;"&gt;//obtains the element that the mouse is currently over&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="COLOR:blue;"&gt;var&lt;/span&gt; visual=document.elementFromPoint(window._event.clientX,window._event.clientY); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="COLOR:green;"&gt;//when dragging, the visual will be directly under the cursor &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="COLOR:green;"&gt;//so we have to hide the visual first &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;visual.style.display=&lt;span style="COLOR:#a31515;"&gt;&amp;#39;none&amp;#39;&lt;/span&gt;; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="COLOR:green;"&gt;//call the method again to obtain the element that was under the visual &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE:10pt;LINE-HEIGHT:115%;"&gt;&lt;span style="COLOR:blue;"&gt;var&lt;/span&gt; actual=document.elementFromPoint(window._event.clientX,window._event.clientY);&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE:10pt;LINE-HEIGHT:115%;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3&gt;Drag Source Elements in an UltraWebTree&lt;/h3&gt;
&lt;p&gt;To set up certain elements as Drag Sources, we are going to use the &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/Web_Client_Side_Object_Model_CSOM_Reference_Guide.html"&gt;Client Side Object Model&lt;/a&gt; to filter the nodes that can be dragged. For this example, we are only going to allow the first set of children under the root nodes to be a drag source. For each of these node objects, we call the &lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/WebTree_Node_Object_CSOM.html"&gt;getElement&lt;/a&gt; method to obtain the HTML element associated with that object. We then pass each of these elements into the constructor for the drag source with additional information to aid in obtaining this object later in the drop event of the target.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Code for setting each applicable child element of the UltraWebTree as a drag source:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;"&gt;//obtains the id rendered on the client for the UltraWebTree &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;"&gt;var&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;"&gt; treeId=&lt;span style="COLOR:#a31515;"&gt;&amp;#39;&amp;lt;%= UltraWebTree1.ClientID %&amp;gt;&amp;#39;&lt;/span&gt;; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;"&gt;//gets the tree object using the tree utility function &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;"&gt;var&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;"&gt; tree=igtree_getTreeById(treeId); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;"&gt;//gets the first level of nodes &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;"&gt;var&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;"&gt; firstlevel=tree.getNodes(); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;"&gt;var&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;"&gt; children; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;"&gt;var&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;"&gt; source; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;"&gt;//loops through all the first level nodes &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;"&gt;for&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;"&gt;(&lt;span style="COLOR:blue;"&gt;var&lt;/span&gt; i=0;i&amp;lt;firstlevel.length;i++) &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;{ &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:green;"&gt;//gets the children of each first level node &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;children=firstlevel[ i].getChildNodes();&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:green;"&gt;//loops through all the children on the current first level node being examined&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;for&lt;/span&gt;(&lt;span style="COLOR:blue;"&gt;var&lt;/span&gt; j=0;j&amp;lt;children.length;j++) &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;{ &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:green;"&gt;//for each node, we obtain the equivalent html element then obtain the SPAN element that context the text &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:blue;"&gt;var&lt;/span&gt; element=getElementsByAttribute(children[j].getElement(),&lt;span style="COLOR:#a31515;"&gt;&amp;#39;SPAN&amp;#39;&lt;/span&gt;,&lt;span style="COLOR:#a31515;"&gt;&amp;#39;igtxt&amp;#39;&lt;/span&gt;,&lt;span style="COLOR:#a31515;"&gt;&amp;#39;1&amp;#39;&lt;/span&gt;)[0]; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:green;"&gt;//initializes the drag source with the constructor &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;source=&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; IG.UI.AppointmentInfoDragSourceBehavior(element,children[j].Id); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;source.initialize(); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;} &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;} &lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Drop Target Elements in a WebDayView &lt;/h3&gt;
&lt;p&gt;Getting each individual time slot in the WebDayView is not as simple as the previous implementation for the tree. By examining the elements that make up the control using the &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=e59c3964-672d-4511-bb3e-2d5e1db91038&amp;amp;displaylang=en"&gt;IE Developer Toolbar&lt;/a&gt;, you can see that there is an attribute applied to each of these time slots called ‘uie’ and has a value of SLOT before the identification number. The ‘uie’ attribute is actually used extensively through all the WebSchedule views and its various elements that make up the entire control. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;IE Developer Toolbar being used to investigate elements of the WebDayView:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.infragistics.com/blogs/skim/WindowsLiveWriter/DropitlikeitshotDragandDropontheWeb_9C41/dayviewuie_2.jpg"&gt;&lt;img style="BORDER-RIGHT:0px;BORDER-TOP:0px;BORDER-LEFT:0px;BORDER-BOTTOM:0px;" height="532" alt="dayviewuie" src="http://download.infragistics.com/users/skim/drag/dt1.jpg" width="625" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Knowing this information, I found a &amp;quot;getElementsByAttribute&amp;quot; function online that would return these elements based on those criteria of an element that has an attribute of ‘uie’ and the value of that attribute starting with ‘SLOT’. Since the original version checked for an exact match and not a ‘starts with’ condition, I added an extra boolean parameter to modify the regular expression used.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Code for setting each applicable child element of the WebDayView as a drop target:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;"&gt;//obtains the id rendered on the client for the WebDayView&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;"&gt;var&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;"&gt; dayId=&lt;span style="COLOR:#a31515;"&gt;&amp;#39;&amp;lt;%= WebDayView1.ClientID %&amp;gt;&amp;#39;&lt;/span&gt;; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;"&gt;//gets every TD element from the dayview tree that &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;"&gt;//has an attribute of uie that has a value starting with &amp;#39;SLOT&amp;#39; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;"&gt;var&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;"&gt; elemArray = getElementsByAttribute($get(dayId),&lt;span style="COLOR:#a31515;"&gt;&amp;#39;TD&amp;#39;&lt;/span&gt;,&lt;span style="COLOR:#a31515;"&gt;&amp;#39;uie&amp;#39;&lt;/span&gt;,&lt;span style="COLOR:#a31515;"&gt;&amp;#39;SLOT&amp;#39;&lt;/span&gt;); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;"&gt;var&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;"&gt; target; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;"&gt;//loops through retrieved elements and initializes each as a drop target &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;"&gt;for&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;"&gt; (&lt;span style="COLOR:blue;"&gt;var&lt;/span&gt; i=0; i&amp;lt;elemArray.length; i++) &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;{&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;target=&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; IG.UI.AppointmentInfoDropTargetBehavior(elemArray[ i],&lt;span style="COLOR:#a31515;"&gt;&amp;quot;Day&amp;quot;&lt;/span&gt;,dayId); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;target.initialize(); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE:10pt;LINE-HEIGHT:115%;"&gt;}&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;h3&gt;Making the Two Play Nice with the Framework and Each Other&lt;/h3&gt;
&lt;p&gt;With the sources and targets set up, they now have to interact correctly in a drag drop operation. The first thing we should look at is the data being transferred. I could have passed the node’s text as the data in the drag drop operation, but what if I also wanted the node’s key data or text of the child nodes of the source node. To allow for such conditions I passed the actual id of the node so that the node object and its members would be available to me in the drop portion of the operation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Using the UltraWebTree&amp;#39;s &lt;/strong&gt;&lt;a href="http://help.infragistics.com/Help/NetAdvantage/NET/2008.2/CLR2.0/html/WebTree_Utility_Functions_CSOM.html"&gt;&lt;strong&gt;utility function&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; to obtain the node from the id passed through the data context in the drop event:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;LINE-HEIGHT:115%;"&gt;newact.setSubject(igtree_getNodeById(data).getText());&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;On the WebDayView side of things, the time slot elements do not have an id associated with them. With no id to use with our utility functions, you could not work with the information you obtain from these time slots. To remedy this, we passed in the id of the parent control in addition to another string which identifies what type of view the element belongs to.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Obtains the WebDayView and WebScheduleInfo objects in order to create an activity and configure it based on source and target information:&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;"&gt;//gets the number after the string &amp;#39;SLOT&amp;#39; on the uie attribute&lt;/span&gt; &lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;"&gt;var&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;"&gt; slotnum=parseInt(&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;.get_element().attributes[&lt;span style="COLOR:#a31515;"&gt;&amp;#39;uie&amp;#39;&lt;/span&gt;].value.replace(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;SLOT&amp;quot;&lt;/span&gt;,&lt;span style="COLOR:#a31515;"&gt;&amp;quot;&amp;quot;&lt;/span&gt;)); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;"&gt;//gets the dayview object from the id that was passed in through the constructor&lt;/span&gt; &lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;"&gt;var&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;"&gt; dayview=ig_getWebDayViewById(&lt;span style="COLOR:blue;"&gt;this&lt;/span&gt;._parentControlID) ; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;"&gt;//gets the info object &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;info=dayview.getWebScheduleInfo(); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;"&gt;var&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;"&gt; interval=dayview.getTimeSlotInterval(); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;"&gt;//gets the activities collection and creates an activity &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;"&gt;var&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;"&gt; activities = info.getActivities(); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;newact=activities.createActivity(); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:green;"&gt;//set the appropriate time information based on the slotnum and interval &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;COLOR:blue;"&gt;var&lt;/span&gt;&lt;span style="FONT-SIZE:10pt;"&gt; newDate=newact.getStartDateTime();&lt;span style="mso-spacerun:yes;"&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; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;newDate.setHours(slotnum*interval/60); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;newDate.setMinutes(slotnum*interval%60); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;newDate.setFullYear(currentDay.getFullYear()); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;newDate.setMonth(currentDay.getMonth()); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN-BOTTOM:0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-SIZE:10pt;"&gt;newDate.setDate(currentDay.getDate()); &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="FONT-SIZE:10pt;LINE-HEIGHT:115%;"&gt;newact.setDuration(interval);&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;h3&gt;Going Further&lt;/h3&gt;
&lt;p&gt;Once we have everything connected, we can write the code in the drop event to do whatever operation we wanted to speed up. This specific case was to create appointments faster based on nodes in a tree. To do this, we use the slot # of the WebDayView element, translate that to a time, and set that time on a new appointment. In addition, we pull information from the node and set it as the subject of the appointment as well. Finally, we show the appointment dialog with the information we just set. We now have a drag and drop operation that removes several steps in the creation of a new appointment.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Drag and Drop in action:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.infragistics.com/blogs/skim/WindowsLiveWriter/DropitlikeitshotDragandDropontheWeb_9C41/dragdrop_2.jpg"&gt;&lt;img style="BORDER-RIGHT:0px;BORDER-TOP:0px;BORDER-LEFT:0px;BORDER-BOTTOM:0px;" height="468" alt="Drag Drop Operation" src="http://download.infragistics.com/users/skim/drag/dt2.jpg" width="329" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Appointment Dialog Popup after Drop Operation:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.infragistics.com/blogs/skim/WindowsLiveWriter/DropitlikeitshotDragandDropontheWeb_9C41/afterdrop_4.jpg"&gt;&lt;img style="BORDER-RIGHT:0px;BORDER-TOP:0px;BORDER-LEFT:0px;BORDER-BOTTOM:0px;" height="334" alt="Appointment Dialog after Drop Operation" src="http://download.infragistics.com/users/skim/drag/dt3.jpg" width="451" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: In the sample that is available at the bottom, I also added logic for the WebWeekView and the WebMonthView as well.&amp;nbsp; I employed the same strategies to obtain the appropriate elements to set as drop targets.&lt;/em&gt;&lt;/p&gt;
&lt;h3&gt;What Now?&lt;/h3&gt;
&lt;p&gt;Use it of course. Before you stop reading and work on your own implementation, there are some things you want to take into consideration. This is a preview and not in the core framework. I did run into some long running script issues. It may have to do with my implementation or simply the amount of sources and targets that I have. I am not sure as of now since I did not have a chance to look at the underlying source. However, it is a powerful tool and adds an element of coolness to your application in addition to enhanced productivity. Also, this is not the only way to implement drag and drop. One other alternative is the &lt;a href="http://labs.infragistics.com/aikido/DragAndDropFramework/DragDropShoppingCart.aspx?View=Run"&gt;Infragistics drag and drop framework&lt;/a&gt; which is available for sampling in the &lt;a href="http://www.infragistics.com/hot/aikido.aspx"&gt;July 2008 Akido Community Tech Preview&lt;/a&gt;. I did some preliminary work with our framework and did not seem to have the long running script issues. Look for an article on that implementation in the future…&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Sample uses the following:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;-Infragistics NetAdvantage 2008 Volume 2 CLR 3.5&lt;/p&gt;
&lt;p&gt;-Visual Studio 2008&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Minimum requirements:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;-Infragistics NetAdvantage 2007 Volume 1&lt;/p&gt;
&lt;p&gt;-Visual Studio 2005 with &lt;a href="http://www.asp.net/ajax/downloads/"&gt;ASP.NET AJAX 1.0&lt;/a&gt; or Visual Studio 2008&lt;/p&gt;
&lt;p&gt;Get Sample &lt;a href="http://download.infragistics.com/users/skim/IGDragDrop.zip"&gt;here&lt;/a&gt;.&lt;a title="http://download.infragistics.com/users/skim/IGDragDrop.zip" href="http://download.infragistics.com/users/skim/IGDragDrop.zip"&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infragistics.com/aggbug.aspx?PostID=77445" width="1" height="1"&gt;</description><category domain="http://blogs.infragistics.com/blogs/sung_kim/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item><item><title>Who?</title><link>http://blogs.infragistics.com/blogs/sung_kim/archive/2008/08/05/who.aspx</link><pubDate>Tue, 05 Aug 2008 18:09:00 GMT</pubDate><guid isPermaLink="false">7a8b7c76-b7ad-48e0-9694-5b04ca132ed0:77442</guid><dc:creator>[Infragistics] Sung Kim</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.infragistics.com/blogs/sung_kim/rsscomments.aspx?PostID=77442</wfw:commentRss><comments>http://blogs.infragistics.com/blogs/sung_kim/archive/2008/08/05/who.aspx#comments</comments><description>&lt;p class="MsoNormal" style="MARGIN:0in 0in 10pt;"&gt;&lt;font face="Calibri" size="3"&gt;So this is how blogs (or just this blog) are born.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Someone (&lt;/font&gt;&lt;a href="http://blogs.infragistics.com/blogs/tony_lombardo/default.aspx"&gt;&lt;font face="Calibri" size="3"&gt;Anthony Lombardo&lt;/font&gt;&lt;/a&gt;&lt;font face="Calibri" size="3"&gt;) asks if you (me) want to blog and you (me again) say sure.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;And a blog is born.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Seeing as this is a new blog, I feel I should introduce myself so you know who is talking.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;My name is Sung Kim and I work as a &lt;/font&gt;&lt;a href="http://blogs.infragistics.com/blogs/tony_lombardo/archive/2008/02/20/what-exactly-is-a-technical-evangelist.aspx"&gt;&lt;font face="Calibri" size="3"&gt;Technical Evangelist&lt;/font&gt;&lt;/a&gt;&lt;font face="Calibri" size="3"&gt; for Infragistics.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;My professional experience is entirely .NET based and I originally started at this company as a Developer Support Engineer.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;During my time in support, I have gauged areas where customers have most of their difficulties.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Using that knowledge, I will be posting based on those problem areas.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Expect to see anything .NET related in this blog. It will be fairly technical, showing “How-To”s and clarifying confusing topics.&lt;/font&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.infragistics.com/aggbug.aspx?PostID=77442" width="1" height="1"&gt;</description></item></channel></rss>