<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0">
  <channel>
    <title>Tsvetan's blog</title>
    <description>Tsvetan's blog</description>
    <link>http://blogs.telerik.com/TsvetanRaykov/Posts.aspx</link>
    <docs>http://backend.userland.com/rss</docs>
    <item>
      <title>Can your grid control do this? Part II</title>
      <description>&lt;style type="text/css"&gt;
    .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, "Courier New", courier, monospace;
    /*background-color: #ffffff;*/
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }
&lt;/style&gt; &lt;p style="text-align: center;"&gt;&lt;a target="_blank" href="http://blogs.telerik.com/Libraries/MetaBlogLib/WindowsLiveWriter-CanyourgridcontroldothisII_EF95-title_4.sflb"&gt;&lt;img src="http://blogs.telerik.com/Libraries/MetaBlogLib/WindowsLiveWriter-CanyourgridcontroldothisII_EF95-title_thumb_1.sflb" alt="title" style="border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;In my previous &lt;a target="_blank" href="http://blogs.telerik.com/tsvetanraykov/posts/08-11-12/Can_your_grid_control_do_this.aspx"&gt;post&lt;/a&gt; I told you about the new interesting feature in RadGridView for WinForms - Row Layout customization. I also promised to provide some additional details about this feature, so here they are.&lt;/p&gt; &lt;p&gt;The view definition in RadGridView not only changes the row layout, it specifies the behavior and the appearance of the grid. All view definitions implement the &lt;strong&gt;IViewDefinition&lt;/strong&gt; interface and you could create your own definitions, if you wish. To change the default view definition in RadGridView you need just to set the &lt;strong&gt;ViewDefinition&lt;/strong&gt; property:&lt;/p&gt; &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;this&lt;/span&gt;.radGridView1.ViewDefinition = myViewDefinition;&lt;/pre&gt; &lt;p&gt;We have included three different view definitions in our Q3 release. They are: &lt;strong&gt;TableViewDefinition&lt;/strong&gt;, &lt;strong&gt;ColumnGroupsViewDefinition&lt;/strong&gt; and &lt;strong&gt;HtmlViewDefinition&lt;/strong&gt;. We plan to extend their functionality and to add new view definitions (for example the long awaited card view) in near future. Currently there is no graphical tool to customize them, but you should use code to do the magic. We are currently working on a graphical designer for this feature and it will be revealed soon.&lt;/p&gt; &lt;p&gt;Now let me explain how to use the different view definitions:&lt;/p&gt; &lt;p&gt;The &lt;strong&gt;TableViewDefinition&lt;/strong&gt; is the default view. It contains all features of the standard table presentation that existed in the old RadGridView. The data is presented like a table and you can reorder, hide and pin columns. This is a typical table view:&lt;/p&gt; &lt;p style="text-align: center;"&gt;&lt;a target="_blank" href="http://blogs.telerik.com/Libraries/MetaBlogLib/WindowsLiveWriter-CanyourgridcontroldothisII_EF95-table_2.sflb"&gt;&lt;img src="http://blogs.telerik.com/Libraries/MetaBlogLib/WindowsLiveWriter-CanyourgridcontroldothisII_EF95-table_thumb.sflb" alt="table" style="border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;br /&gt;
ColumnGroupsViewDefinition&lt;/strong&gt; - As its name suggests, this view enables grouping of columns. Every column group can have an unlimited number of sub groups or rows containing columns. To start using this view definition you need to add some groups:&lt;/p&gt; &lt;pre class="csharpcode"&gt;ColumnGroupsViewDefinition view = &lt;span class="kwrd"&gt;new&lt;/span&gt; ColumnGroupsViewDefinition();&lt;br /&gt;&lt;br /&gt;view.ColumnGroups.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; GridViewColumnGroup(&lt;span class="str"&gt;"Customer"&lt;/span&gt;));&lt;br /&gt;view.ColumnGroups.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; GridViewColumnGroup(&lt;span class="str"&gt;"Details"&lt;/span&gt;));&lt;br /&gt;view.ColumnGroups[1].Groups.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; GridViewColumnGroup(&lt;span class="str"&gt;"Address"&lt;/span&gt;));&lt;br /&gt;view.ColumnGroups[1].Groups.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; GridViewColumnGroup(&lt;span class="str"&gt;"Contact"&lt;/span&gt;));&lt;/pre&gt; &lt;p&gt;Then add at least one row which to contain the desired columns:&lt;/p&gt; &lt;pre class="csharpcode"&gt;view.ColumnGroups[0].Rows.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; GridViewColumnGroupRow());&lt;br /&gt;view.ColumnGroups[0].Rows[0].Columns.Add(&lt;span class="kwrd"&gt;this&lt;/span&gt;.radGridView1.Columns[&lt;span class="str"&gt;"ID"&lt;/span&gt;]);&lt;br /&gt;view.ColumnGroups[0].Rows[0].Columns.Add(&lt;span class="kwrd"&gt;this&lt;/span&gt;.radGridView1.Columns[&lt;span class="str"&gt;"Name"&lt;/span&gt;]);&lt;br /&gt;view.ColumnGroups[0].Rows[0].Columns.Add(&lt;span class="kwrd"&gt;this&lt;/span&gt;.radGridView1.Columns[&lt;span class="str"&gt;"Family"&lt;/span&gt;]);&lt;/pre&gt; &lt;p&gt;Here is the result:&lt;/p&gt; &lt;p style="text-align: center;"&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlogLib/WindowsLiveWriter-CanyourgridcontroldothisII_EF95-grouping_2.sflb"&gt;&lt;img src="http://blogs.telerik.com/Libraries/MetaBlogLib/WindowsLiveWriter-CanyourgridcontroldothisII_EF95-grouping_thumb.sflb" alt="grouping" style="border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;br /&gt;
Of course, the &lt;strong&gt;ColumnGroupsViewDefinition&lt;/strong&gt; enables resizing of column groups:&lt;/p&gt; &lt;p style="text-align: center;"&gt;&lt;a target="_blank" href="http://blogs.telerik.com/Libraries/MetaBlogLib/WindowsLiveWriter-CanyourgridcontroldothisII_EF95-grouping3_2.sflb"&gt;&lt;img height="280" border="0" width="510" src="http://blogs.telerik.com/Libraries/MetaBlogLib/WindowsLiveWriter-CanyourgridcontroldothisII_EF95-grouping3_thumb.sflb" alt="grouping3" style="border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;br /&gt;
HtmlViewDefinition -&lt;/strong&gt; The name of this view may lead to some confusion. No, RadGridView doesn't support html rendering, and we don't have plans to support it. Nevertheless, this view enables using row layout similar to the one existing in html tables. In fact, you can take an existing html table and use its html code in RadGridView. Sometimes this can save a lot of work. Just change the cell text to be the unique name of the desired column.&lt;/p&gt; &lt;p&gt;To use the HTML view just add rows and cells:&lt;/p&gt; &lt;pre class="csharpcode"&gt;HtmlViewDefinition view = &lt;span class="kwrd"&gt;new&lt;/span&gt; HtmlViewDefinition();&lt;br /&gt;&lt;br /&gt;view.RowTemplate.Rows.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; RowDefinition());&lt;br /&gt;view.RowTemplate.Rows.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; RowDefinition());&lt;br /&gt;&lt;br /&gt;view.RowTemplate.Rows[0].Cells.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; CellDefinition(&lt;span class="str"&gt;"ID"&lt;/span&gt;));&lt;br /&gt;view.RowTemplate.Rows[0].Cells.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; CellDefinition(&lt;span class="str"&gt;"Name"&lt;/span&gt;));&lt;br /&gt;view.RowTemplate.Rows[0].Cells.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; CellDefinition(&lt;span class="str"&gt;"City"&lt;/span&gt;));&lt;br /&gt;view.RowTemplate.Rows[0].Cells.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; CellDefinition(&lt;span class="str"&gt;"Country"&lt;/span&gt;));&lt;br /&gt;view.RowTemplate.Rows[1].Cells.Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; CellDefinition(&lt;span class="str"&gt;"Phone"&lt;/span&gt;));&lt;br /&gt;&lt;br /&gt;Then we could specify some row and column spans:&lt;br /&gt;view.RowTemplate.Rows[0].Cells[2].RowSpan = 2;&lt;br /&gt;view.RowTemplate.Rows[0].Cells[3].RowSpan = 2;&lt;br /&gt;view.RowTemplate.Rows[1].Cells[0].ColSpan = 2;&lt;/pre&gt; &lt;p&gt;The code above can be replaced with the following html:&lt;/p&gt; &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;table&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt; &amp;lt;&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;   &amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;ID&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;   &amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Name&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;   &amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt; &lt;span class="attr"&gt;rowspan&lt;/span&gt;&lt;span class="kwrd"&gt;=""&lt;/span&gt;&lt;span class="attr"&gt;2&lt;/span&gt;&lt;span class="kwrd"&gt;""&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;City&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;   &amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt; &lt;span class="attr"&gt;rowspan&lt;/span&gt;&lt;span class="kwrd"&gt;=""&lt;/span&gt;&lt;span class="attr"&gt;2&lt;/span&gt;&lt;span class="kwrd"&gt;""&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Country&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt; &amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="kwrd"&gt; &amp;lt;&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;   &amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt; &lt;span class="attr"&gt;colspan&lt;/span&gt;&lt;span class="kwrd"&gt;=""&lt;/span&gt;&lt;span class="attr"&gt;2&lt;/span&gt;&lt;span class="kwrd"&gt;""&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;Phone&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt; &amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;tr&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;table&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt; &lt;p&gt;You should use the ReadXml method of &lt;strong&gt;HtmlViewDefinition&lt;/strong&gt; to load the definition.&lt;/p&gt; &lt;p&gt;And the result:&lt;/p&gt; &lt;p style="text-align: center;"&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlogLib/WindowsLiveWriter-CanyourgridcontroldothisII_EF95-html_2.sflb"&gt;&lt;img src="http://blogs.telerik.com/Libraries/MetaBlogLib/WindowsLiveWriter-CanyourgridcontroldothisII_EF95-html_thumb.sflb" alt="html" style="border-width: 0px;" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&amp;nbsp;&lt;br /&gt;
Note:&lt;/strong&gt; I should point out that we support only a small piece of the functionality of the real html table. For example we don't support table headers or CSS.&lt;/p&gt; &lt;p&gt;These are our first steps in customizing row layouts and we intend to extend the functionality in our upcoming releases. Therefore, your feedback is highly appreciated. Any ideas, comments or suggestions are welcome.&lt;/p&gt;
</description>
      <link>http://blogs.telerik.com/TsvetanRaykov/Posts/08-11-26/Can_your_grid_control_do_this_Part_II.aspx</link>
      <author>Tsvetan Raykov</author>
      <comments>http://blogs.telerik.com/TsvetanRaykov/Posts/08-11-26/Can_your_grid_control_do_this_Part_II.aspx</comments>
      <guid isPermaLink="false">7e0353ea-5204-4be9-b188-83e2b97098e2</guid>
      <pubDate>Wed, 26 Nov 2008 17:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Can your grid control do this?</title>
      <description>&lt;p&gt;&amp;nbsp;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-Canyourgridcontroldothis_B72D-0_2.sflb"&gt;&lt;img height="303" border="0" width="483" src="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-Canyourgridcontroldothis_B72D-0_thumb.sflb" alt="0" style="border-width: 0px;" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;In &lt;a target="_blank" href="http://weblogs.asp.net/scottgu/archive/2008/02/22/first-look-at-silverlight-2.aspx"&gt;"First Look at Silverlight 2"&lt;/a&gt; Scott Gu showed how easy is to change the visual appearance of a Silverlight application using the standard features of the Silverlight Grid control: &lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-Canyourgridcontroldothis_B72D-2_2.sflb"&gt;&lt;img height="249" border="0" width="304" src="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-Canyourgridcontroldothis_B72D-2_thumb_2.sflb" alt="2" style="border-width: 0px;" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;While reading the blog, it occurred to me that it would be very easy to achieve similar effects with RadGridView for WinForms. With the latest version of &lt;strong&gt;RadGridView&lt;/strong&gt; you can change the row layout using different view definitions in a very simplistic and easy way: &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-Canyourgridcontroldothis_B72D-layouts_4.sflb"&gt;&lt;img height="361" border="0" width="481" src="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-Canyourgridcontroldothis_B72D-layouts_thumb_1.sflb" alt="layouts" style="border: 0px none ;" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Using parts and ideas from Scott's article, I compiled a small application that gets a list of article from &lt;a target="_blank" href="http://www.digg.com"&gt;digg.com&lt;/a&gt; via web services and shows them in RadGridView similar to the way Scott does it: &lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-Canyourgridcontroldothis_B72D-1_4.sflb"&gt;&lt;img height="357" border="0" width="495" src="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-Canyourgridcontroldothis_B72D-1_thumb_1.sflb" alt="1" style="border-width: 0px;" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;To achieve this effect I used the new HTML view definition in RadGridView. It positions grid cells exactly like in an HTML table. Actually, it can read and parse tables in HTML-like syntax, which simplifies and shortens the process of specifying the grid layout (and no, we don't plan to extend this feature to support full HTML syntax). &lt;/p&gt; &lt;p&gt;To create the example I defined the row layout: &lt;/p&gt; &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; rowLayout = &lt;span class="str"&gt;@"&amp;lt;table&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&amp;lt;td colspan="&lt;/span&gt;&lt;span class="str"&gt;"3"&lt;/span&gt;&lt;span class="str"&gt;"&amp;gt;title&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&amp;lt;td rowspan="&lt;/span&gt;&lt;span class="str"&gt;"2"&lt;/span&gt;&lt;span class="str"&gt;"&amp;gt;diggs&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;description&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;image&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;author&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;link&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;"&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;HtmlViewDefinition definition = &lt;span class="kwrd"&gt;new&lt;/span&gt; HtmlViewDefinition();&lt;br /&gt;&lt;span class="kwrd"&gt;using&lt;/span&gt; (MemoryStream ms = &lt;span class="kwrd"&gt;new&lt;/span&gt; MemoryStream(ASCIIEncoding.Default.GetBytes(rowLayout)))&lt;br /&gt;{&lt;br /&gt;    definition.RowTemplate.ReadXml(ms);&lt;br /&gt;}&lt;/pre&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Afterwards, assigning the view definition to RadGridView is simple. You need just to set the &lt;strong&gt;ViewDefinition&lt;/strong&gt; property after setting the &lt;strong&gt;DataSource&lt;/strong&gt;: &lt;/p&gt; &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;this&lt;/span&gt;.radGridView1.DataSource = table;&lt;br /&gt;&lt;span class="kwrd"&gt;this&lt;/span&gt;.radGridView1.ViewDefinition = definition; &lt;/pre&gt; &lt;p&gt;Additionally I used code to set different row heights and to modify some column properties: &lt;/p&gt; &lt;pre class="csharpcode"&gt;definition.RowTemplate.Rows[0].Height = 35;&lt;br /&gt;definition.RowTemplate.Rows[1].Height = 80;&lt;br /&gt;definition.RowTemplate.Rows[2].Height = 30;  &lt;/pre&gt; &lt;p&gt;&amp;nbsp; &lt;br /&gt;
I also disabled some features like column headers and added formatting to some cells in order to achieve a better visual effect. Please, take in consideration that I am not a designer. &lt;/p&gt; &lt;p&gt;You can download the application and the source code from &lt;a title="DiggDemo.zip" href="~/Libraries/Tsetso_s_files/DiggDemo.sflb"&gt;here&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;In my next blog post I will give you more details on how to use view definitions in RadGridView. I hope that this feature will be useful for many of you. Any feedback you have is welcome. &lt;/p&gt;
</description>
      <link>http://blogs.telerik.com/TsvetanRaykov/Posts/08-11-12/Can_your_grid_control_do_this.aspx</link>
      <author>raikov</author>
      <comments>http://blogs.telerik.com/TsvetanRaykov/Posts/08-11-12/Can_your_grid_control_do_this.aspx</comments>
      <guid isPermaLink="false">e9c969d9-362f-4297-a602-8ea3efa01987</guid>
      <pubDate>Wed, 12 Nov 2008 13:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Tips &amp;amp; tricks: Grouping in RadGridView for WinForms</title>
      <description>&lt;style type="text/css"&gt;
    .csharpcode, .csharpcode pre
    {
    font-size: small;
    color: black;
    font-family: consolas, "Courier New", courier, monospace;
    /*white-space: pre;*/
    }
    .csharpcode pre { margin: 0em; }
    .csharpcode .rem { color: #008000; }
    .csharpcode .kwrd { color: #0000ff; }
    .csharpcode .str { color: #006080; }
    .csharpcode .op { color: #0000c0; }
    .csharpcode .preproc { color: #cc6633; }
    .csharpcode .asp { background-color: #ffff00; }
    .csharpcode .html { color: #800000; }
    .csharpcode .attr { color: #ff0000; }
    .csharpcode .alt
    {
    background-color: #f4f4f4;
    width: 100%;
    margin: 0em;
    }
    .csharpcode .lnum { color: #606060; }
&lt;/style&gt; &lt;p&gt;Hi all, my name is Tsvetan Raykov and I'm a developer on the WinForms RadGridView team. With this post I am starting a thread that will explain some of the great, but less known features of RadGridView for WinForms.&lt;/p&gt; &lt;p&gt;One of the commonly used features in RadGridView is &lt;strong&gt;Grouping&lt;/strong&gt;. Many of our users have requested having the option to change its default format and appearance. This is finally possible in the latest Q2 2008 version and I am going to cover the formatting basics in this post. The example and code shown here are available for download at the bottom of this post.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;&lt;strong&gt;Creating Groups&lt;/strong&gt;&lt;/h4&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Let's start with the obvious - creating groups. In order to group the grid, you need to add at least one &lt;strong&gt;GridGroupByExpression&lt;/strong&gt;:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;pre class="csharpcode"&gt;GridGroupByExpression expression = &lt;br /&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; GridGroupByExpression(&lt;span class="str"&gt;"City GroupBy City"&lt;/span&gt;);&lt;br /&gt;&lt;span class="kwrd"&gt;this&lt;/span&gt;.radGridView1.MasterGridViewTemplate.GroupByExpressions.Add(expression);&lt;/pre&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;In our example we have added grouping by city:&lt;/p&gt; &lt;p style="text-align: center;"&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-TipstricksGroupinginRadGridViewforWinFor_88AB-grid_grouping1_4.sflb" target="_blank"&gt;&lt;img height="289" border="0" width="429" style="border-width: 0px;" alt="grid_grouping1" src="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-TipstricksGroupinginRadGridViewforWinFor_88AB-grid_grouping1_thumb_1.sflb" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;&lt;strong&gt;Formatting the Group Headers&lt;/strong&gt;&lt;/h4&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;By default, RadGridView comes with preset group header formatting. However, it is simple to change it by using the &lt;strong&gt;FormatString&lt;/strong&gt; property of the expression:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;pre class="csharpcode"&gt;expression.DefaultFormatString = &lt;span class="str"&gt;"Group by: {0}, Value: {1}"&lt;/span&gt;;&lt;/pre&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;where the &lt;strong&gt;{0}&lt;/strong&gt; parameter of the format string is the name of the column that is grouped, and the &lt;strong&gt;{1}&lt;/strong&gt; parameter is the value. If you want to have full control of what is displayed in the group headers, you should process the &lt;strong&gt;GroupSumaryEvaluate&lt;/strong&gt; event:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; radGridView1_GroupSumaryEvaluate(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, &lt;br /&gt;    GroupSummaryEvaluationEventArgs e)&lt;br /&gt;{&lt;br /&gt;     e.FormatString = &lt;span class="str"&gt;""&lt;/span&gt; + e.Value + &lt;span class="str"&gt;" has "&lt;/span&gt; + e.Group.RowCount + &lt;span class="str"&gt;" row(s)."&lt;/span&gt;;&lt;br /&gt;}&lt;/pre&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;To change the group header visual appearance, we can use the &lt;strong&gt;ViewRowFormatting &lt;/strong&gt;event:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; radGridView1_ViewRowFormatting(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, RowFormattingEventArgs e)&lt;br /&gt;{&lt;br /&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (e.RowElement &lt;span class="kwrd"&gt;is&lt;/span&gt; GridGroupHeaderRowElement)&lt;br /&gt;    {&lt;br /&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (e.RowElement.IsCurrent)&lt;br /&gt;        {&lt;br /&gt;            e.RowElement.GradientStyle = Telerik.WinControls.GradientStyles.Solid;&lt;br /&gt;            e.RowElement.BackColor = Color.FromArgb(255, 255, 198);&lt;br /&gt;            e.RowElement.DrawFill = &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt; &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;        {&lt;br /&gt;            e.RowElement.DrawFill = &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The image below shows the changed grouping style:&lt;/p&gt; &lt;p style="text-align: center;"&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-TipstricksGroupinginRadGridViewforWinFor_88AB-grid_grouping2_2_1.sflb" target="_blank"&gt;&lt;img height="289" border="0" width="429" style="border-width: 0px;" alt="grid_grouping2" src="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-TipstricksGroupinginRadGridViewforWinFor_88AB-grid_grouping2_thumb_1.sflb" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h4&gt;&lt;strong&gt;Group Summaries&lt;/strong&gt;&lt;/h4&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;It is also possible to present more complex information in the group header by using &lt;strong&gt;Group Summaries&lt;/strong&gt;. For example we can show the sum of the values of a specific column inside the group. To do this we need to add a &lt;strong&gt;GridViewSummaryItem&lt;/strong&gt; that will calculate the sum:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;this&lt;/span&gt;.radGridView1.MasterGridViewTemplate.SummaryRowGroupHeaders[0].&lt;br /&gt;     Add(&lt;span class="kwrd"&gt;new&lt;/span&gt; GridViewSummaryItem(&lt;span class="str"&gt;"Experience"&lt;/span&gt;, &lt;span class="str"&gt;"; sum {0}"&lt;/span&gt;, GridAggregateFunction.Sum));&lt;/pre&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Now we can do a little trick and get the calculated value by iterating through the &lt;strong&gt;Aggregates&lt;/strong&gt; collection of the &lt;strong&gt;DataGroup&lt;/strong&gt;:&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;void&lt;/span&gt; radGridView1_GroupSumaryEvaluate(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, GroupSummaryEvaluationEventArgs e)&lt;br /&gt;{&lt;br /&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (e.SummaryItem.FieldName == &lt;span class="str"&gt;"Experience"&lt;/span&gt;)&lt;br /&gt;    {&lt;br /&gt;        e.FormatString = &lt;span class="str"&gt;" "&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt; &lt;span class="kwrd"&gt;else&lt;/span&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (e.SummaryItem.FieldName == &lt;span class="str"&gt;"City"&lt;/span&gt;)&lt;br /&gt;    {&lt;br /&gt; &lt;span class="kwrd"&gt;decimal&lt;/span&gt; sum = 0;&lt;br /&gt; &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (Aggregate aggregate &lt;span class="kwrd"&gt;in&lt;/span&gt; e.Group.Aggregates)&lt;br /&gt;        {&lt;br /&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (aggregate.AggregateFunction == GridAggregateFunction.Sum &lt;br /&gt;                    &amp;amp;&amp;amp; aggregate.FieldName == &lt;span class="str"&gt;"Experience"&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                sum = (&lt;span class="kwrd"&gt;decimal&lt;/span&gt;)aggregate.Value;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt; &lt;span class="kwrd"&gt;if&lt;/span&gt; (e.Group.RowCount == 1)&lt;br /&gt;        {&lt;br /&gt;            e.FormatString = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;br /&gt; &lt;span class="str"&gt;"{0} team has one member and his work experience is {1} year(s)."&lt;/span&gt;,&lt;br /&gt;       e.Value, sum);&lt;br /&gt;        }&lt;br /&gt; &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;        {&lt;br /&gt;            e.FormatString = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;br /&gt; &lt;span class="str"&gt;"{0} team contains {1} members with summary work experience of {2} year(s)."&lt;/span&gt;,&lt;br /&gt;       e.Value, e.Group.RowCount, sum);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/pre&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;And here is the result:&lt;/p&gt; &lt;p style="text-align: center;"&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-TipstricksGroupinginRadGridViewforWinFor_88AB-grid_grouping3_4.sflb" target="_blank"&gt;&lt;img height="266" border="0" width="429" style="border-width: 0px;" alt="grid_grouping3" src="http://blogs.telerik.com/Libraries/MetaBlog/WindowsLiveWriter-TipstricksGroupinginRadGridViewforWinFor_88AB-grid_grouping3_thumb_1.sflb" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;You can download the source files from&amp;nbsp;&lt;a href="~/Libraries/Tsetso_s_files/GroupingSampleSources.sflb"&gt;here&lt;/a&gt; .&lt;/p&gt; &lt;p&gt;I know this feature will be very useful to many of you, so I'll be very happy to have your feedback.&lt;/p&gt;
</description>
      <link>http://blogs.telerik.com/TsvetanRaykov/Posts/08-09-05/Tips_amp_tricks_Grouping_in_RadGridView_for_WinForms.aspx</link>
      <author>raikov</author>
      <comments>http://blogs.telerik.com/TsvetanRaykov/Posts/08-09-05/Tips_amp_tricks_Grouping_in_RadGridView_for_WinForms.aspx</comments>
      <guid isPermaLink="false">f5f638c5-c205-4e94-b9ec-460827f16647</guid>
      <pubDate>Fri, 05 Sep 2008 03:05:14 GMT</pubDate>
    </item>
  </channel>
</rss>