<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_Just Tiger</title><subtitle type="text">开始不断抛弃沉迷在颓废里,回忆被我撕碎在风中碾成灰,心已渐渐崩溃难以再次去挽回</subtitle><id>http://feed.cnblogs.com/blog/u/12683/rss</id><updated>2010-06-13T16:49:31Z</updated><author><name>zitiger</name><uri>http://www.cnblogs.com/zitiger/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/zitiger/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/12683/rss"/><entry><id>http://www.cnblogs.com/zitiger/archive/2010/06/14/1757842.html</id><title type="text">GroupGridView:支持分组的DataGridView</title><summary type="text">离上一次写blog已经有两年多了，惭愧惭愧。。。前段时间开发一个记账软件记账本，需要一个类似于Outlook的邮件分组显示功能。网上找了好久也没有找到称心的，于是乎就自己动手做了一个，现在做一些简单的总结。此文章同时发布于我的独立blog: http://www.zitiger.com/这个新的控件我把他叫做GroupGridView,主要实现了下面两个功能：把所有数据进行分组显示在右侧显示每个组...</summary><published>2010-06-13T16:47:00Z</published><updated>2010-06-13T16:47:00Z</updated><author><name>zitiger</name><uri>http://www.cnblogs.com/zitiger/</uri></author><link rel="alternate" href="http://www.cnblogs.com/zitiger/archive/2010/06/14/1757842.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/zitiger/archive/2010/06/14/1757842.html"/><content type="html">&lt;p&gt;离上一次写blog已经有两年多了，惭愧惭愧。。。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;前段时间开发一个&lt;a href="http://www.jzben.com"&gt;记账软件记账本&lt;/a&gt;，需要一个类似于Outlook的邮件分组显示功能。网上找了好久也没有找到称心的，于是乎就自己动手做了一个，现在做一些简单的总结。此文章同时发布于我的独立&lt;a href="http://www.zitiger.com/"&gt;blog&lt;/a&gt;: &lt;a href="http://www.zitiger.com/"&gt;http://www.zitiger.com/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;这个新的控件我把他叫做GroupGridView,主要实现了下面两个功能：&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;把所有数据进行分组显示&lt;/li&gt;&#xD;
&lt;li&gt;在右侧显示每个组的附加信息&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/img/zitiger/201006/2010061315475133.png" /&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span id="more-295"&gt;&amp;nbsp;&lt;/span&gt;对于第一个需求网上很容易找到解决方案，但这些方案不能满足第二个需求，于是我就开始创建这个GroupGridView&lt;/p&gt;&#xD;
&lt;p&gt;整个控件主要包括两个类：GroupGridView 和GroupGridGroup。&lt;/p&gt;&#xD;
&lt;p&gt;我们先来看一下GroupGridView类。GroupGridView类继承自DataGridView，为了让GroupGridView看起来像Outlook的分组显示，我们要多对DataGridView进行一些改造：&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&lt;span style="color: #008080; font-style: italic;"&gt;// Control when edit occurs because edit mode shouldn&amp;rsquo;t start when expanding/collapsing&lt;/span&gt;&#xD;
&lt;span style="color: #0600ff;"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;EditMode&lt;/span&gt; &lt;span style="color: #008000;"&gt;=&lt;/span&gt; DataGridViewEditMode.&lt;span style="color: #0000ff;"&gt;EditProgrammatically&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&lt;span style="color: #008080; font-style: italic;"&gt;// This sample does not support adding or deleting rows by the user.&lt;/span&gt;&#xD;
&lt;span style="color: #008080; font-style: italic;"&gt;// From http://www.zitiger.com/&lt;/span&gt;&#xD;
&lt;span style="color: #0600ff;"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;AllowUserToAddRows&lt;/span&gt; &lt;span style="color: #008000;"&gt;=&lt;/span&gt; false&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&lt;span style="color: #0600ff;"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;AllowUserToDeleteRows&lt;/span&gt; &lt;span style="color: #008000;"&gt;=&lt;/span&gt; false&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&#xD;
&lt;span style="color: #008080; font-style: italic;"&gt;//We do not need the row header&lt;/span&gt;&#xD;
&lt;span style="color: #0600ff;"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;RowHeadersVisible&lt;/span&gt; &lt;span style="color: #008000;"&gt;=&lt;/span&gt; false&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&lt;span style="color: #008080; font-style: italic;"&gt;//we only need the horizontal border line like it in outlook&lt;/span&gt;&#xD;
&lt;span style="color: #0600ff;"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;CellBorderStyle&lt;/span&gt; &lt;span style="color: #008000;"&gt;=&lt;/span&gt; DataGridViewCellBorderStyle.&lt;span style="color: #0000ff;"&gt;RaisedHorizontal&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&lt;span style="color: #008080; font-style: italic;"&gt;//only allow the full row select&lt;/span&gt;&#xD;
&lt;span style="color: #0600ff;"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;SelectionMode&lt;/span&gt; &lt;span style="color: #008000;"&gt;=&lt;/span&gt; DataGridViewSelectionMode.&lt;span style="color: #0000ff;"&gt;FullRowSelect&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;接着我们要暴露一个方法CreateGroup用来创建Group&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&lt;span style="color: #0600ff;"&gt;public&lt;/span&gt; GroupGridGroup CreateGroup&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;String&lt;/span&gt; title, &lt;span style="color: #ff0000;"&gt;String&lt;/span&gt; summary&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&#xD;
&lt;span style="color: #000000;"&gt;{&lt;/span&gt;&#xD;
    &lt;span style="color: #008080; font-style: italic;"&gt;//at least one column and only fire when the first group&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0600ff;"&gt;if&lt;/span&gt; &lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #0600ff;"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Columns&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Count&lt;/span&gt; &lt;span style="color: #008000;"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;0&lt;/span&gt; &lt;span style="color: #008000;"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span style="color: #0600ff;"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Groups&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Count&lt;/span&gt; &lt;span style="color: #008000;"&gt;==&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #000000;"&gt;{&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #008080; font-style: italic;"&gt;//Give the enought padding for each row&lt;/span&gt;&#xD;
        &lt;span style="color: #008080; font-style: italic;"&gt;// From http://www.zitiger.com/&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Padding padding &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #0600ff;"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Columns&lt;/span&gt;&lt;span style="color: #000000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;]&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;DefaultCellStyle&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Padding&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; padding.&lt;span style="color: #0000ff;"&gt;Left&lt;/span&gt; &lt;span style="color: #008000;"&gt;+=&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;4&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0600ff;"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Columns&lt;/span&gt;&lt;span style="color: #000000;"&gt;[&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;]&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;DefaultCellStyle&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Padding&lt;/span&gt; &lt;span style="color: #008000;"&gt;=&lt;/span&gt; padding&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #008080; font-style: italic;"&gt;//We do not allow to sort.&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0600ff;"&gt;for&lt;/span&gt; &lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #ff0000;"&gt;int&lt;/span&gt; i &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;0&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt; i &lt;span style="color: #008000;"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color: #0600ff;"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Columns&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Count&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt; i&lt;span style="color: #008000;"&gt;++&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #000000;"&gt;{&lt;/span&gt;&#xD;
&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: #0600ff;"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Columns&lt;/span&gt;&lt;span style="color: #000000;"&gt;[&lt;/span&gt;i&lt;span style="color: #000000;"&gt;]&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;SortMode&lt;/span&gt; &lt;span style="color: #008000;"&gt;=&lt;/span&gt; DataGridViewColumnSortMode.&lt;span style="color: #0000ff;"&gt;NotSortable&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #000000;"&gt;}&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #000000;"&gt;}&lt;/span&gt;&#xD;
&amp;nbsp;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; GroupGridGroup group &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #000000;"&gt;(&lt;/span&gt;GroupGridGroup&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #0600ff;"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;GroupTemplate&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Clone&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; group.&lt;span style="color: #0000ff;"&gt;Title&lt;/span&gt; &lt;span style="color: #008000;"&gt;=&lt;/span&gt; title&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; group.&lt;span style="color: #0000ff;"&gt;Summary&lt;/span&gt; &lt;span style="color: #008000;"&gt;=&lt;/span&gt; summary&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; group.&lt;span style="color: #0000ff;"&gt;GroupGridView&lt;/span&gt; &lt;span style="color: #008000;"&gt;=&lt;/span&gt; this&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; group.&lt;span style="color: #0000ff;"&gt;CreateCells&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #0600ff;"&gt;this&lt;/span&gt;, &lt;span style="color: #008000;"&gt;new&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;String&lt;/span&gt;&lt;span style="color: #000000;"&gt;[&lt;/span&gt;&lt;span style="color: #000000;"&gt;]&lt;/span&gt; &lt;span style="color: #000000;"&gt;{&lt;/span&gt; title, summary &lt;span style="color: #000000;"&gt;}&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #008080; font-style: italic;"&gt;//Add the group to datagridview.rows&lt;/span&gt;&#xD;
    &lt;span style="color: #008080; font-style: italic;"&gt;//so the group can be displayed in the datagridview&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0600ff;"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Rows&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Add&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;group&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0600ff;"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Groups&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Add&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;group&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0600ff;"&gt;return&lt;/span&gt; group&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&lt;span style="color: #000000;"&gt;}&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;接着，我们要开始处理Group的折叠展开事件了。什么时候我们要对Group进行展开/隐藏操作呢? 通过对outlook的观察，主要是下面两种情况：&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;当用户双击Group行&lt;/li&gt;&#xD;
&lt;li&gt;用户点击Group的+/- 符号时&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;对于第一种情况，我们需要重载DataGridView的OnCellDoubleClick事件，如果用户双击的是GroupGridGroup，那么需要对这个Group的行进行折叠展开操作&lt;br /&gt;软件同时发布于我的blog: http://www.zitiger.com/，转载请注明出处&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&lt;span style="color: #0600ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0600ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0600ff;"&gt;void&lt;/span&gt; OnCellDoubleClick&lt;span style="color: #000000;"&gt;(&lt;/span&gt;DataGridViewCellEventArgs e&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&#xD;
&lt;span style="color: #000000;"&gt;{&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0600ff;"&gt;if&lt;/span&gt; &lt;span style="color: #000000;"&gt;(&lt;/span&gt;e.&lt;span style="color: #0000ff;"&gt;RowIndex&lt;/span&gt; &lt;span style="color: #008000;"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt; return&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
    &lt;span style="color: #008080; font-style: italic;"&gt;// From http://www.zitiger.com/&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0600ff;"&gt;if&lt;/span&gt; &lt;span style="color: #000000;"&gt;(&lt;/span&gt;Rows&lt;span style="color: #000000;"&gt;[&lt;/span&gt;e.&lt;span style="color: #0000ff;"&gt;RowIndex&lt;/span&gt;&lt;span style="color: #000000;"&gt;]&lt;/span&gt; &lt;span style="color: #008000;"&gt;is&lt;/span&gt; GroupGridGroup&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #008080; font-style: italic;"&gt;//if the clicked row is the group&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #000000;"&gt;{&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GroupGridGroup group &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #0600ff;"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Rows&lt;/span&gt;&lt;span style="color: #000000;"&gt;[&lt;/span&gt;e.&lt;span style="color: #0000ff;"&gt;RowIndex&lt;/span&gt;&lt;span style="color: #000000;"&gt;]&lt;/span&gt; &lt;span style="color: #0600ff;"&gt;as&lt;/span&gt; GroupGridGroup&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; group.&lt;span style="color: #0000ff;"&gt;Toggle&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #000000;"&gt;}&lt;/span&gt;&#xD;
&amp;nbsp;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0600ff;"&gt;base&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;OnCellDoubleClick&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;e&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&lt;span style="color: #000000;"&gt;}&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;对于第二种情况，我们需要重载OnCellMouseDown，代码和OnCellDoubleClick相似，只不过我们需要额外判断用户点击的是否是+/-符号&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&lt;span style="color: #008080; font-style: italic;"&gt;// the OnCellMouseDown is overriden so the control can check to see if the&lt;/span&gt;&#xD;
&lt;span style="color: #008080; font-style: italic;"&gt;// user clicked the + or - sign of the group-row&lt;/span&gt;&#xD;
&lt;span style="color: #0600ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0600ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0600ff;"&gt;void&lt;/span&gt; OnCellMouseDown&lt;span style="color: #000000;"&gt;(&lt;/span&gt;DataGridViewCellMouseEventArgs e&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&#xD;
&lt;span style="color: #000000;"&gt;{&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #008080; font-style: italic;"&gt;//If use does not click on a row&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0600ff;"&gt;if&lt;/span&gt; &lt;span style="color: #000000;"&gt;(&lt;/span&gt;e.&lt;span style="color: #0000ff;"&gt;RowIndex&lt;/span&gt; &lt;span style="color: #008000;"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt; return&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #008080; font-style: italic;"&gt;// From http://www.zitiger.com/&lt;/span&gt;&#xD;
    &lt;span style="color: #0600ff;"&gt;if&lt;/span&gt; &lt;span style="color: #000000;"&gt;(&lt;/span&gt;Rows&lt;span style="color: #000000;"&gt;[&lt;/span&gt;e.&lt;span style="color: #0000ff;"&gt;RowIndex&lt;/span&gt;&lt;span style="color: #000000;"&gt;]&lt;/span&gt; &lt;span style="color: #008000;"&gt;is&lt;/span&gt; GroupGridGroup&lt;span style="color: #000000;"&gt;)&lt;/span&gt; &lt;span style="color: #008080; font-style: italic;"&gt;//if the clicked row is the group&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #000000;"&gt;{&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GroupGridGroup group &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #0600ff;"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Rows&lt;/span&gt;&lt;span style="color: #000000;"&gt;[&lt;/span&gt;e.&lt;span style="color: #0000ff;"&gt;RowIndex&lt;/span&gt;&lt;span style="color: #000000;"&gt;]&lt;/span&gt; &lt;span style="color: #0600ff;"&gt;as&lt;/span&gt; GroupGridGroup&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0600ff;"&gt;if&lt;/span&gt; &lt;span style="color: #000000;"&gt;(&lt;/span&gt;IsIconHit&lt;span style="color: #000000;"&gt;(&lt;/span&gt;e&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt; &lt;span style="color: #008080; font-style: italic;"&gt;//if the user clicked the sing + or -&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #000000;"&gt;{&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; group.&lt;span style="color: #0000ff;"&gt;Toggle&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #000000;"&gt;}&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #000000;"&gt;}&lt;/span&gt;&#xD;
&amp;nbsp;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0600ff;"&gt;base&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;OnCellMouseDown&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;e&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&lt;span style="color: #000000;"&gt;}&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;至此，整个GroupGridView的代码我们已经剖析完成了，我们接着来看看我们的主角GroupGridGroup的实现过程。GroupGridGroup继承自DataGridView， 通过重载Paint函数来绘制我们的Group。&lt;/p&gt;&#xD;
&lt;p&gt;我们需要暴露CreateRow方法，让外界可以通过GroupGridGroup.CreateRow来创建属于这个Group的Row。&lt;br /&gt;软件同时发布于我的blog: http://www.zitiger.com/，转载请注明出处&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&lt;span style="color: #0600ff;"&gt;public&lt;/span&gt; DataGridViewRow CreateRow&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #0600ff;"&gt;params&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;Object&lt;/span&gt;&lt;span style="color: #000000;"&gt;[&lt;/span&gt;&lt;span style="color: #000000;"&gt;]&lt;/span&gt; values&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&#xD;
&lt;span style="color: #000000;"&gt;{&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; DataGridViewRow row &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #0600ff;"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;GroupGridView&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;RowTemplate&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Clone&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt; &lt;span style="color: #0600ff;"&gt;as&lt;/span&gt; DataGridViewRow&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; row.&lt;span style="color: #0000ff;"&gt;CreateCells&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #0600ff;"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;GroupGridView&lt;/span&gt;, values&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0600ff;"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;GroupGridView&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Rows&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Add&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;row&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #008080; font-style: italic;"&gt;// add row to childRows&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0600ff;"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;childRows&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Add&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;row&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0600ff;"&gt;return&lt;/span&gt; row&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&lt;span style="color: #000000;"&gt;}&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;接着我们来看看如何进行折叠和展开操作&lt;/p&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&lt;span style="color: #008080; font-style: italic;"&gt;//Collapse this group, we need to hide the rows belongs to this group&lt;/span&gt;&#xD;
&lt;span style="color: #0600ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0600ff;"&gt;void&lt;/span&gt; Collapse&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&#xD;
&lt;span style="color: #000000;"&gt;{&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0600ff;"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;IsExpanded&lt;/span&gt; &lt;span style="color: #008000;"&gt;=&lt;/span&gt; false&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #008080; font-style: italic;"&gt;//Hide all rows in this group&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0600ff;"&gt;foreach&lt;/span&gt; &lt;span style="color: #000000;"&gt;(&lt;/span&gt;DataGridViewRow row &lt;span style="color: #0600ff;"&gt;in&lt;/span&gt; &lt;span style="color: #0600ff;"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;childRows&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #000000;"&gt;{&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; row.&lt;span style="color: #0000ff;"&gt;Visible&lt;/span&gt; &lt;span style="color: #008000;"&gt;=&lt;/span&gt; false&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #000000;"&gt;}&lt;/span&gt;&#xD;
&lt;span style="color: #000000;"&gt;}&lt;/span&gt;&#xD;
&amp;nbsp;&#xD;
&lt;span style="color: #008080; font-style: italic;"&gt;//Expand this group, we need to show the rows belongs to this group&lt;/span&gt;&#xD;
&lt;span style="color: #0600ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0600ff;"&gt;void&lt;/span&gt; Expand&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&#xD;
&lt;span style="color: #000000;"&gt;{&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0600ff;"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;IsExpanded&lt;/span&gt; &lt;span style="color: #008000;"&gt;=&lt;/span&gt; true&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #008080; font-style: italic;"&gt;//Show all rows in this group&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0600ff;"&gt;foreach&lt;/span&gt; &lt;span style="color: #000000;"&gt;(&lt;/span&gt;DataGridViewRow row &lt;span style="color: #0600ff;"&gt;in&lt;/span&gt; &lt;span style="color: #0600ff;"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;childRows&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #000000;"&gt;{&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; row.&lt;span style="color: #0000ff;"&gt;Visible&lt;/span&gt; &lt;span style="color: #008000;"&gt;=&lt;/span&gt; true&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #000000;"&gt;}&lt;/span&gt;&#xD;
&lt;span style="color: #000000;"&gt;}&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;最后，也是最重要的任务：通过重载Paint来绘制Group。我们主要需要完成以下几步：&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;绘制Group的背景&lt;/li&gt;&#xD;
&lt;li&gt;绘制文字&lt;/li&gt;&#xD;
&lt;li&gt;绘制Group的底边线&lt;/li&gt;&#xD;
&lt;li&gt;绘制+ &amp;ndash; 符号&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;div &gt;&#xD;
&lt;div &gt;&#xD;
&lt;pre &gt;&lt;span style="color: #008080; font-style: italic;"&gt;//Override the Paint, the most important part of this control&lt;/span&gt;&#xD;
&lt;span style="color: #0600ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0600ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0600ff;"&gt;void&lt;/span&gt; Paint&lt;span style="color: #000000;"&gt;(&lt;/span&gt;Graphics graphics, Rectangle clipBounds, Rectangle rowBounds,&#xD;
    &lt;span style="color: #ff0000;"&gt;int&lt;/span&gt; rowIndex, DataGridViewElementStates rowState,&#xD;
    &lt;span style="color: #ff0000;"&gt;bool&lt;/span&gt; isFirstDisplayedRow, &lt;span style="color: #ff0000;"&gt;bool&lt;/span&gt; isLastVisibleRow&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&#xD;
&lt;span style="color: #000000;"&gt;{&lt;/span&gt;&#xD;
    GroupGridView grid &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #000000;"&gt;(&lt;/span&gt;GroupGridView&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #0600ff;"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;DataGridView&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&#xD;
    &lt;span style="color: #008080; font-style: italic;"&gt;// From http://www.zitiger.com/&lt;/span&gt;&#xD;
    &lt;span style="color: #ff0000;"&gt;int&lt;/span&gt; gridwidth &lt;span style="color: #008000;"&gt;=&lt;/span&gt; grid.&lt;span style="color: #0000ff;"&gt;Columns&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;GetColumnsWidth&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;DataGridViewElementStates.&lt;span style="color: #0000ff;"&gt;Displayed&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
    Color backgroundColor&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&#xD;
    &lt;span style="color: #0600ff;"&gt;if&lt;/span&gt; &lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #0600ff;"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Selected&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt; &lt;span style="color: #008080; font-style: italic;"&gt;//If it is selected&lt;/span&gt;&#xD;
        backgroundColor &lt;span style="color: #008000;"&gt;=&lt;/span&gt; grid.&lt;span style="color: #0000ff;"&gt;DefaultCellStyle&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;SelectionBackColor&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
    &lt;span style="color: #0600ff;"&gt;else&lt;/span&gt;&#xD;
        backgroundColor &lt;span style="color: #008000;"&gt;=&lt;/span&gt; grid.&lt;span style="color: #0000ff;"&gt;DefaultCellStyle&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;BackColor&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&#xD;
    &lt;span style="color: #008080; font-style: italic;"&gt;//draw the background&lt;/span&gt;&#xD;
    &lt;span style="color: #0600ff;"&gt;using&lt;/span&gt; &lt;span style="color: #000000;"&gt;(&lt;/span&gt;Brush backgroundBrush &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #008000;"&gt;new&lt;/span&gt; SolidBrush&lt;span style="color: #000000;"&gt;(&lt;/span&gt;backgroundColor&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&#xD;
    &lt;span style="color: #000000;"&gt;{&lt;/span&gt;&#xD;
        graphics.&lt;span style="color: #0000ff;"&gt;FillRectangle&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;backgroundBrush,&#xD;
            rowBounds.&lt;span style="color: #0000ff;"&gt;Left&lt;/span&gt; &lt;span style="color: #008000;"&gt;-&lt;/span&gt; grid.&lt;span style="color: #0000ff;"&gt;HorizontalScrollingOffset&lt;/span&gt;,&#xD;
            rowBounds.&lt;span style="color: #0000ff;"&gt;Top&lt;/span&gt;, gridwidth, rowBounds.&lt;span style="color: #0000ff;"&gt;Height&lt;/span&gt; &lt;span style="color: #008000;"&gt;-&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
    &lt;span style="color: #000000;"&gt;}&lt;/span&gt;&#xD;
&amp;nbsp;&#xD;
    &lt;span style="color: #008080; font-style: italic;"&gt;//draw text, using the current grid font&lt;/span&gt;&#xD;
    Font font &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #008000;"&gt;new&lt;/span&gt; Font&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #0600ff;"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;DataGridView&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Font&lt;/span&gt;, FontStyle.&lt;span style="color: #0000ff;"&gt;Bold&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
    &lt;span style="color: #008080; font-style: italic;"&gt;//Draw the title&lt;/span&gt;&#xD;
    graphics.&lt;span style="color: #0000ff;"&gt;DrawString&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #0600ff;"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Title&lt;/span&gt;, font, Brushes.&lt;span style="color: #0000ff;"&gt;Black&lt;/span&gt;,&#xD;
                        &lt;span style="color: #008000;"&gt;-&lt;/span&gt;grid.&lt;span style="color: #0000ff;"&gt;HorizontalScrollingOffset&lt;/span&gt; &lt;span style="color: #008000;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;23&lt;/span&gt;, rowBounds.&lt;span style="color: #0000ff;"&gt;Bottom&lt;/span&gt; &lt;span style="color: #008000;"&gt;-&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;18&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&#xD;
    &lt;span style="color: #008080; font-style: italic;"&gt;//mesure the string to get the height and width of the string&lt;/span&gt;&#xD;
    SizeF stringSize &lt;span style="color: #008000;"&gt;=&lt;/span&gt; graphics.&lt;span style="color: #0000ff;"&gt;MeasureString&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #0600ff;"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Summary&lt;/span&gt;, font&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
    &lt;span style="color: #008080; font-style: italic;"&gt;//caculate the x of position for the Summary&lt;/span&gt;&#xD;
    &lt;span style="color: #ff0000;"&gt;float&lt;/span&gt; contentX &lt;span style="color: #008000;"&gt;=&lt;/span&gt; rowBounds.&lt;span style="color: #0000ff;"&gt;X&lt;/span&gt; &lt;span style="color: #008000;"&gt;+&lt;/span&gt; gridwidth &lt;span style="color: #008000;"&gt;-&lt;/span&gt; stringSize.&lt;span style="color: #0000ff;"&gt;Width&lt;/span&gt; &lt;span style="color: #008000;"&gt;-&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;8&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
    &lt;span style="color: #008080; font-style: italic;"&gt;//caculate the y of position for the Summary&lt;/span&gt;&#xD;
    &lt;span style="color: #ff0000;"&gt;float&lt;/span&gt; contentY &lt;span style="color: #008000;"&gt;=&lt;/span&gt; rowBounds.&lt;span style="color: #0000ff;"&gt;Y&lt;/span&gt; &lt;span style="color: #008000;"&gt;+&lt;/span&gt; &lt;span style="color: #000000;"&gt;(&lt;/span&gt;rowBounds.&lt;span style="color: #0000ff;"&gt;Height&lt;/span&gt; &lt;span style="color: #008000;"&gt;-&lt;/span&gt; stringSize.&lt;span style="color: #0000ff;"&gt;Height&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt; &lt;span style="color: #008000;"&gt;/&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;2&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
    &lt;span style="color: #008080; font-style: italic;"&gt;//Draw the summary string&lt;/span&gt;&#xD;
    graphics.&lt;span style="color: #0000ff;"&gt;DrawString&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #0600ff;"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Summary&lt;/span&gt;, font, Brushes.&lt;span style="color: #0000ff;"&gt;Black&lt;/span&gt;, contentX, contentY&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&#xD;
    &lt;span style="color: #008080; font-style: italic;"&gt;//For bottom line of group&lt;/span&gt;&#xD;
    &lt;span style="color: #0600ff;"&gt;using&lt;/span&gt; &lt;span style="color: #000000;"&gt;(&lt;/span&gt;Brush bottomBrush &lt;span style="color: #008000;"&gt;=&lt;/span&gt;&#xD;
        &lt;span style="color: #008000;"&gt;new&lt;/span&gt; SolidBrush&lt;span style="color: #000000;"&gt;(&lt;/span&gt;Color.&lt;span style="color: #0000ff;"&gt;FromKnownColor&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;KnownColor.&lt;span style="color: #0000ff;"&gt;GradientActiveCaption&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&#xD;
    &lt;span style="color: #000000;"&gt;{&lt;/span&gt;&#xD;
        &lt;span style="color: #008080; font-style: italic;"&gt;//draw bottom line of the group&lt;/span&gt;&#xD;
        graphics.&lt;span style="color: #0000ff;"&gt;FillRectangle&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;bottomBrush, rowBounds.&lt;span style="color: #0000ff;"&gt;Left&lt;/span&gt; &lt;span style="color: #008000;"&gt;+&lt;/span&gt; grid.&lt;span style="color: #0000ff;"&gt;HorizontalScrollingOffset&lt;/span&gt;&#xD;
                                , rowBounds.&lt;span style="color: #0000ff;"&gt;Bottom&lt;/span&gt; &lt;span style="color: #008000;"&gt;-&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;2&lt;/span&gt;, gridwidth &lt;span style="color: #008000;"&gt;-&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;1&lt;/span&gt;, &lt;span style="color: #ff0000;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
    &lt;span style="color: #000000;"&gt;}&lt;/span&gt;&#xD;
&amp;nbsp;&#xD;
    &lt;span style="color: #008080; font-style: italic;"&gt;//the Rectangle for the +/- symbol&lt;/span&gt;&#xD;
    Rectangle glyphRect &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #008000;"&gt;new&lt;/span&gt; Rectangle&lt;span style="color: #000000;"&gt;(&lt;/span&gt;rowBounds.&lt;span style="color: #0000ff;"&gt;X&lt;/span&gt; &lt;span style="color: #008000;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;5&lt;/span&gt;, rowBounds.&lt;span style="color: #0000ff;"&gt;Y&lt;/span&gt;, &lt;span style="color: #ff0000;"&gt;5&lt;/span&gt;, rowBounds.&lt;span style="color: #0000ff;"&gt;Height&lt;/span&gt; &lt;span style="color: #008000;"&gt;-&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&#xD;
    &lt;span style="color: #008080; font-style: italic;"&gt;//Draw the + or - sign on the left of the group&lt;/span&gt;&#xD;
    &lt;span style="color: #008080; font-style: italic;"&gt;// Ensure that visual styles are supported.&lt;/span&gt;&#xD;
    &lt;span style="color: #0600ff;"&gt;if&lt;/span&gt; &lt;span style="color: #000000;"&gt;(&lt;/span&gt;Application.&lt;span style="color: #0000ff;"&gt;RenderWithVisualStyles&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&#xD;
    &lt;span style="color: #000000;"&gt;{&lt;/span&gt; &#xD;
&amp;nbsp;&#xD;
        VisualStyleRenderer glyphRenderer&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
        &lt;span style="color: #0600ff;"&gt;if&lt;/span&gt; &lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #0600ff;"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;IsExpanded&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&#xD;
            glyphRenderer &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #008000;"&gt;new&lt;/span&gt; VisualStyleRenderer&lt;span style="color: #000000;"&gt;(&lt;/span&gt;VisualStyleElement.&lt;span style="color: #0000ff;"&gt;TreeView&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Glyph&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Opened&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
        &lt;span style="color: #0600ff;"&gt;else&lt;/span&gt;&#xD;
            glyphRenderer &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #008000;"&gt;new&lt;/span&gt; VisualStyleRenderer&lt;span style="color: #000000;"&gt;(&lt;/span&gt;VisualStyleElement.&lt;span style="color: #0000ff;"&gt;TreeView&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Glyph&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;Closed&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&#xD;
        Rectangle glyphRectangle &lt;span style="color: #008000;"&gt;=&lt;/span&gt;&#xD;
            &lt;span style="color: #008000;"&gt;new&lt;/span&gt; Rectangle&lt;span style="color: #000000;"&gt;(&lt;/span&gt;glyphRect.&lt;span style="color: #0000ff;"&gt;X&lt;/span&gt;, glyphRect.&lt;span style="color: #0000ff;"&gt;Y&lt;/span&gt; &lt;span style="color: #008000;"&gt;+&lt;/span&gt; &lt;span style="color: #000000;"&gt;(&lt;/span&gt;glyphRect.&lt;span style="color: #0000ff;"&gt;Height&lt;/span&gt; &lt;span style="color: #008000;"&gt;/&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt; &lt;span style="color: #008000;"&gt;-&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;4&lt;/span&gt;, &lt;span style="color: #ff0000;"&gt;10&lt;/span&gt;, &lt;span style="color: #ff0000;"&gt;10&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&#xD;
        &lt;span style="color: #008080; font-style: italic;"&gt;// Paint group +/- glyph&lt;/span&gt;&#xD;
        glyphRenderer.&lt;span style="color: #0000ff;"&gt;DrawBackground&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;graphics, glyphRectangle&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&#xD;
    &lt;span style="color: #000000;"&gt;}&lt;/span&gt;&#xD;
    &lt;span style="color: #0600ff;"&gt;else&lt;/span&gt; &lt;span style="color: #008080; font-style: italic;"&gt;//e.g. for win 2000 or classic theme in win Xp&lt;/span&gt;&#xD;
    &lt;span style="color: #000000;"&gt;{&lt;/span&gt;&#xD;
        &lt;span style="color: #ff0000;"&gt;int&lt;/span&gt; h &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;8&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
        &lt;span style="color: #ff0000;"&gt;int&lt;/span&gt; w &lt;span style="color: #008000;"&gt;=&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;8&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
        &lt;span style="color: #ff0000;"&gt;int&lt;/span&gt; x &lt;span style="color: #008000;"&gt;=&lt;/span&gt; glyphRect.&lt;span style="color: #0000ff;"&gt;X&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
        &lt;span style="color: #ff0000;"&gt;int&lt;/span&gt; y &lt;span style="color: #008000;"&gt;=&lt;/span&gt; glyphRect.&lt;span style="color: #0000ff;"&gt;Y&lt;/span&gt; &lt;span style="color: #008000;"&gt;+&lt;/span&gt; &lt;span style="color: #000000;"&gt;(&lt;/span&gt;glyphRect.&lt;span style="color: #0000ff;"&gt;Height&lt;/span&gt; &lt;span style="color: #008000;"&gt;/&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt; &lt;span style="color: #008000;"&gt;-&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;4&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
        &lt;span style="color: #008080; font-style: italic;"&gt;//The below two lines will draw the box of +/- symbols&lt;/span&gt;&#xD;
        graphics.&lt;span style="color: #0000ff;"&gt;DrawRectangle&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;new&lt;/span&gt; Pen&lt;span style="color: #000000;"&gt;(&lt;/span&gt;SystemBrushes.&lt;span style="color: #0000ff;"&gt;ControlDark&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;, x, y, w, h&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
        graphics.&lt;span style="color: #0000ff;"&gt;FillRectangle&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;new&lt;/span&gt; SolidBrush&lt;span style="color: #000000;"&gt;(&lt;/span&gt;Color.&lt;span style="color: #0000ff;"&gt;White&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;,&#xD;
            x &lt;span style="color: #008000;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;1&lt;/span&gt;, y &lt;span style="color: #008000;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;1&lt;/span&gt;, w &lt;span style="color: #008000;"&gt;-&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;1&lt;/span&gt;, h &lt;span style="color: #008000;"&gt;-&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&#xD;
        &lt;span style="color: #008080; font-style: italic;"&gt;//Draw the -&lt;/span&gt;&#xD;
        graphics.&lt;span style="color: #0000ff;"&gt;DrawLine&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;new&lt;/span&gt; Pen&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;new&lt;/span&gt; SolidBrush&lt;span style="color: #000000;"&gt;(&lt;/span&gt;Color.&lt;span style="color: #0000ff;"&gt;Black&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;,&#xD;
            x &lt;span style="color: #008000;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;2&lt;/span&gt;, y &lt;span style="color: #008000;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;4&lt;/span&gt;, x &lt;span style="color: #008000;"&gt;+&lt;/span&gt; w &lt;span style="color: #008000;"&gt;-&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;2&lt;/span&gt;, y &lt;span style="color: #008000;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;4&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
&amp;nbsp;&#xD;
        &lt;span style="color: #008080; font-style: italic;"&gt;//Draw the |&lt;/span&gt;&#xD;
        &lt;span style="color: #008080; font-style: italic;"&gt;// From http://www.zitiger.com/&lt;/span&gt;&#xD;
        &lt;span style="color: #0600ff;"&gt;if&lt;/span&gt; &lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;!&lt;/span&gt;&lt;span style="color: #0600ff;"&gt;this&lt;/span&gt;.&lt;span style="color: #0000ff;"&gt;IsExpanded&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&#xD;
            graphics.&lt;span style="color: #0000ff;"&gt;DrawLine&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;new&lt;/span&gt; Pen&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #008000;"&gt;new&lt;/span&gt; SolidBrush&lt;span style="color: #000000;"&gt;(&lt;/span&gt;Color.&lt;span style="color: #0000ff;"&gt;Black&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;,&#xD;
                x &lt;span style="color: #008000;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;4&lt;/span&gt;, y &lt;span style="color: #008000;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;2&lt;/span&gt;, x &lt;span style="color: #008000;"&gt;+&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;4&lt;/span&gt;, y &lt;span style="color: #008000;"&gt;+&lt;/span&gt; h &lt;span style="color: #008000;"&gt;-&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #008000;"&gt;;&lt;/span&gt;&#xD;
    &lt;span style="color: #000000;"&gt;}&lt;/span&gt;&#xD;
&lt;span style="color: #000000;"&gt;}&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;这个控件的缺点是不能通过datasource进行数据绑定只能手动进行。同时发布于我的blog: &lt;a href="http://www.zitiger.com/"&gt;http://www.zitiger.com/&lt;/a&gt;，转载请注明出处，同时也欢迎访问我的&lt;a href="http://www.jzben.com"&gt;记账本&lt;/a&gt;&lt;a href="http://www.jzben.com"&gt;http://www.jzben.com&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/zitiger/aggbug/1757842.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/zitiger/archive/2010/06/14/1757842.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/zitiger/archive/2009/08/06/1540154.html</id><title type="text">treegridview</title><summary type="text">For all those getting the error:"Unable to cast object of type 'System.Windows.Forms.DataGridViewTextBoxCell' to type 'AdvancedDataGridView.TreeGridCell'."If you legitimately want to have a textbox co...</summary><published>2009-08-06T02:51:00Z</published><updated>2009-08-06T02:51:00Z</updated><author><name>zitiger</name><uri>http://www.cnblogs.com/zitiger/</uri></author><link rel="alternate" href="http://www.cnblogs.com/zitiger/archive/2009/08/06/1540154.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/zitiger/archive/2009/08/06/1540154.html"/></entry><entry><id>http://www.cnblogs.com/zitiger/archive/2009/06/03/1495732.html</id><title type="text">1</title><summary type="text">4、点击“下一步”，出现配置检测窗口 5、检测过程中会出现“是否要发布临时日志”窗口（如下图），一般选择“No”。 6、检测完毕之后，会出现下面的窗口，点击“完成”就配置成功了。 相关链接：  Windows Live Writer交流小组  博客客户端MetaWeblog设置帮助  Word 2007发布博客配置步骤  Live Writer排版技巧  用 Windows Live Writer...</summary><published>2009-06-03T14:42:00Z</published><updated>2009-06-03T14:42:00Z</updated><author><name>zitiger</name><uri>http://www.cnblogs.com/zitiger/</uri></author><link rel="alternate" href="http://www.cnblogs.com/zitiger/archive/2009/06/03/1495732.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/zitiger/archive/2009/06/03/1495732.html"/></entry><entry><id>http://www.cnblogs.com/zitiger/archive/2008/03/28/1127495.html</id><title type="text">老虎Sitemap生成器 0.5.3 </title><summary type="text">点击此处下载Sitemap生成器0.5.3此软件需要安装.net framework 2.0本软件可以分析您的网站并生成sitemap。您可以将生成的sitemap上传到您的网站,并通知搜索引擎(例如google)。通过设置sitemap文件可以提高您的网站对搜索引擎的亲和力，让搜索引擎更快、更全面地收录与刷新您的网站，提高您的网站在搜索引擎里的收录数量。同时本软件还可以帮您检查您网站中存在的死链...</summary><published>2008-03-28T05:21:00Z</published><updated>2008-03-28T05:21:00Z</updated><author><name>zitiger</name><uri>http://www.cnblogs.com/zitiger/</uri></author><link rel="alternate" href="http://www.cnblogs.com/zitiger/archive/2008/03/28/1127495.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/zitiger/archive/2008/03/28/1127495.html"/></entry><entry><id>http://www.cnblogs.com/zitiger/archive/2008/03/19/1112952.html</id><title type="text">老虎Sitemap生成器 0.5.2</title><summary type="text">点击此处下载Sitemap生成器0.5.2此软件需要安装.net framework 2.0本软件可以分析您的网站并生成sitemap。您可以将生成的sitemap上传到您的网站,并通知搜索引擎(例如google)。通过设置sitemap文件可以提高您的网站对搜索引擎的亲和力，让搜索引擎更快、更全面地收录与刷新您的网站，提高您的网站在搜索引擎里的收录数量。同时本软件还可以帮您检查您网站中存在的死链...</summary><published>2008-03-19T04:19:00Z</published><updated>2008-03-19T04:19:00Z</updated><author><name>zitiger</name><uri>http://www.cnblogs.com/zitiger/</uri></author><link rel="alternate" href="http://www.cnblogs.com/zitiger/archive/2008/03/19/1112952.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/zitiger/archive/2008/03/19/1112952.html"/></entry><entry><id>http://www.cnblogs.com/zitiger/archive/2007/07/31/837486.html</id><title type="text">老虎Sitemap生成器 0.3</title><summary type="text">点击此处下载Sitemap生成器0.3感谢您您对 老虎Sitemap生成器 的支持.经过无数的汗水,0.3终于和大家见面了. 这几天杭州特别的热,老婆怀了宝宝,电脑搬到了一个没有空调的房间,写起程序来真的是汗流浃背啊!感谢支持老虎和老虎软件的朋友，特别要感谢在Blog给我留言的fire2 ,WinMain和落伍者的skycity999 ，他们对程序的功能提出了很好的建议．此软件需要安装.net f...</summary><published>2007-07-31T04:50:00Z</published><updated>2007-07-31T04:50:00Z</updated><author><name>zitiger</name><uri>http://www.cnblogs.com/zitiger/</uri></author><link rel="alternate" href="http://www.cnblogs.com/zitiger/archive/2007/07/31/837486.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/zitiger/archive/2007/07/31/837486.html"/></entry><entry><id>http://www.cnblogs.com/zitiger/archive/2007/07/19/823763.html</id><title type="text">老虎Sitemap生成器 0.2</title><summary type="text">点击此处下载Sitemap生成器0.2感谢您您对 老虎Sitemap生成器 的支持，经过几天的努力，Sitemap 0.2 终于完成了．0.2版本较前一版本有了很多的改进，使得程序更加易用和人性化．同时下一个版本0.3已经在设计中了，相信不久后就可以完成，到时，程序的功能将更加完善．再次感谢支持老虎和老虎软件的朋友，特别要感谢在Blog给我留言的fire2 和WinMain ，他们对程序的功能提出...</summary><published>2007-07-19T05:09:00Z</published><updated>2007-07-19T05:09:00Z</updated><author><name>zitiger</name><uri>http://www.cnblogs.com/zitiger/</uri></author><link rel="alternate" href="http://www.cnblogs.com/zitiger/archive/2007/07/19/823763.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/zitiger/archive/2007/07/19/823763.html"/></entry><entry><id>http://www.cnblogs.com/zitiger/archive/2007/07/16/820308.html</id><title type="text">诚聘ASP.NET开发人员[杭州]</title><summary type="text">代朋友发，有意者请直接联系　MSN : hejan1983@163.com QQ:11354983资深ASP.NET 程序设计师1.对于工作和技术提高有热情。 2.熟悉ASP.NET开发技术，熟悉.NET Framework，具有一定的WEB开发经验3.熟悉SQLServer数据库 4.一年以上软件开发经验。符合以下条件优先： 1。具有开发套装商业软件经验 2。熟悉HTML/CSS/JavaScr...</summary><published>2007-07-16T12:32:00Z</published><updated>2007-07-16T12:32:00Z</updated><author><name>zitiger</name><uri>http://www.cnblogs.com/zitiger/</uri></author><link rel="alternate" href="http://www.cnblogs.com/zitiger/archive/2007/07/16/820308.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/zitiger/archive/2007/07/16/820308.html"/></entry><entry><id>http://www.cnblogs.com/zitiger/archive/2007/07/16/819599.html</id><title type="text">老虎Sitemap生成器 0.1</title><summary type="text">欢迎使用 老虎Sitemap生成器 0.1,此软件需要安装.net framework 2.0请关注软件更新网站：http://www.linglihu.com点击下载老虎Sitemap生成器本软件可以分析您的网站的所有网页的地址，生成一个sitemap.xml。您可以将其上传到您的网站,并通知搜索引擎(例如google)。通过设置sitemap文件可以提高您的网站对搜索引擎的亲和力，让搜索引擎更...</summary><published>2007-07-16T03:44:00Z</published><updated>2007-07-16T03:44:00Z</updated><author><name>zitiger</name><uri>http://www.cnblogs.com/zitiger/</uri></author><link rel="alternate" href="http://www.cnblogs.com/zitiger/archive/2007/07/16/819599.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/zitiger/archive/2007/07/16/819599.html"/></entry><entry><id>http://www.cnblogs.com/zitiger/archive/2007/07/12/SEOHelper.html</id><title type="text">老虎SEO助手 0.3</title><summary type="text">欢迎使用 老虎SEO助手,此软件需要安装.net framework 2.0点击下载老虎SEO助手V0.3改进 20070711+增加关键词查询对 雅虎 的支持+增加收录数量查询功能,主要包括以下搜索引擎 百度谷歌搜狗 中搜 有道 Live 雅虎 SoSoV0.2.5改进 20070630+增加 Google Page Rank 查询+增加 Sogou Rank 查询V0.2 改进+增加关键词查询...</summary><published>2007-07-12T05:34:00Z</published><updated>2007-07-12T05:34:00Z</updated><author><name>zitiger</name><uri>http://www.cnblogs.com/zitiger/</uri></author><link rel="alternate" href="http://www.cnblogs.com/zitiger/archive/2007/07/12/SEOHelper.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/zitiger/archive/2007/07/12/SEOHelper.html"/></entry></feed>
