<?xml version="1.0" encoding="UTF-8" ?> <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>dev:.NET:ASP.NET</title><link>http://blogs.wankuma.com/pinzolo/category/708.aspx</link><description>dev:.NET:ASP.NET</description><managingEditor>THREE-ONE</managingEditor><dc:language>ja-JP</dc:language><generator>.Text Version 0.95.2004.102</generator><item><dc:creator>THREE-ONE</dc:creator><title>DataSource はなぜデザイナに貼り付ける？</title><link>http://blogs.wankuma.com/pinzolo/archive/2008/03/21/128817.aspx</link><pubDate>Fri, 21 Mar 2008 00:11:00 GMT</pubDate><guid>http://blogs.wankuma.com/pinzolo/archive/2008/03/21/128817.aspx</guid><wfw:comment>http://blogs.wankuma.com/pinzolo/comments/128817.aspx</wfw:comment><comments>http://blogs.wankuma.com/pinzolo/archive/2008/03/21/128817.aspx#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://blogs.wankuma.com/pinzolo/comments/commentRss/128817.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/pinzolo/services/trackbacks/128817.aspx</trackback:ping><description>DataSource 系のコントロールはなぜデザイナに貼り付けなければならないんだろう？&lt;br/&gt;
というかなぜコントロールなんだろう？&lt;br/&gt;
VS2003まであった、SqlCommand のようなコンポーネントで扱う方がよかったんじゃないだろうか？&lt;br/&gt;
画面に表示されないものをデザイナに貼り付けるってのは WYSIWYG を阻害するだけでしかないと思うんだけど。&lt;br/&gt;
そもそも、UI に直接作用するものではなくデータやビジネスロジックと UI の橋渡しをするものなんだし。&lt;br/&gt;
グレーの四角いのが画面に並んでるのはあまりいいもんじゃないなぁ～&lt;img src ="http://blogs.wankuma.com/pinzolo/aggbug/128817.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>THREE-ONE</dc:creator><title>ChartFX for VisualStudio2005</title><link>http://blogs.wankuma.com/pinzolo/archive/2007/10/14/101942.aspx</link><pubDate>Sun, 14 Oct 2007 02:24:00 GMT</pubDate><guid>http://blogs.wankuma.com/pinzolo/archive/2007/10/14/101942.aspx</guid><wfw:comment>http://blogs.wankuma.com/pinzolo/comments/101942.aspx</wfw:comment><comments>http://blogs.wankuma.com/pinzolo/archive/2007/10/14/101942.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/pinzolo/comments/commentRss/101942.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/pinzolo/services/trackbacks/101942.aspx</trackback:ping><description>現在のプロジェクトで使っていくであろうChartFX for VisualStudio2005のトライアル版をインストール&lt;br/&gt;
&lt;br/&gt;
とりあえずしばらくはサンプルと英語のドキュメントをにらめっこしていくことになりそうです。&lt;br/&gt;
棒グラフとかを表示させるにしても、デザイナでは折れ線なのか・・・&lt;br/&gt;
ていうかプロパティ設定で全然かわらない？？&lt;br/&gt;
設定とデータよりpngを生成して出力するようなので、デザイナではしかたないのかなぁ？&lt;br/&gt;
サンプルちょっと動かしただけなのでこれからです&lt;img src ="http://blogs.wankuma.com/pinzolo/aggbug/101942.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>THREE-ONE</dc:creator><title>ASPX でのコメントアウト</title><link>http://blogs.wankuma.com/pinzolo/archive/2007/04/08/70569.aspx</link><pubDate>Sun, 08 Apr 2007 12:12:00 GMT</pubDate><guid>http://blogs.wankuma.com/pinzolo/archive/2007/04/08/70569.aspx</guid><wfw:comment>http://blogs.wankuma.com/pinzolo/comments/70569.aspx</wfw:comment><comments>http://blogs.wankuma.com/pinzolo/archive/2007/04/08/70569.aspx#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://blogs.wankuma.com/pinzolo/comments/commentRss/70569.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/pinzolo/services/trackbacks/70569.aspx</trackback:ping><description>C# に限らず、ソースファイルでは修正時に過去のソースをコメントアウトとして残し、コメントで情報を添えることで変更履歴を残す風習はいたるところで見られます。&lt;br/&gt;
バージョン管理システムが普及している今、そういう考え方はよしとされない傾向もあります。&lt;br/&gt;
&lt;br/&gt;
では、ASPX のようなデザインとロジックが一体化したファイルの場合、不必要になった・変更になったコントロールはどうしますか？&lt;br/&gt;
ほとんどの場合、すっぱり削除するのが多いと思います。私もそうします。&lt;br/&gt;
しかし、中には以下のようなことをやるのも見たことがあります。&lt;br/&gt;
&lt;br/&gt;
・&amp;lt;%-- &amp;lt;asp:Label id=&amp;quot;lbl&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;hoge&amp;lt;/asp:Label&amp;gt; --%&amp;gt;&lt;br/&gt;
　正しいコメントアウトだと思います。&lt;br/&gt;
　ですが、クライアントに空白や空行として送信されてしまうのが、個人的には好きじゃありません。&lt;br/&gt;
&lt;br/&gt;
・Visible を false&lt;br/&gt;
　クライアントの HTML には反映されませんが、インスタンスは作られるしコントロールに対する処理も実行されるのでムダですね。&lt;br/&gt;
&lt;br/&gt;
・&amp;lt;!-- &amp;lt;asp:Label id=&amp;quot;lbl&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;hoge&amp;lt;/asp:Label&amp;gt; --&amp;gt;&lt;br/&gt;
　なんか勘違いしてますね、これ書いた人は勉強しなおしたほうがいいと思います。&lt;br/&gt;
　インスタンスは作られて、コントロールに対する処理も実行される上でなく、クライアントの HTML にも埋め込まれます。&lt;br/&gt;
　ブラウザが見えなくしてるだけです。&lt;br/&gt;
&lt;br/&gt;
で、先日現場で上記のどれでもないコメントアウトを見つけました。&lt;br/&gt;
&lt;br/&gt;
それが・・・・・コレだ&lt;br/&gt;
&lt;br/&gt;
&lt;span style="color:red;font-weight:bold;"&gt;One, Two, Three&lt;/span&gt;&lt;br/&gt;
&lt;br/&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;&lt;span class="rem"&gt;/* &amp;lt;asp:Label id="lbl" runat="server"&amp;gt;hoge&amp;lt;/asp:Label&amp;gt; */&lt;/span&gt;&lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
この発想はなかったので、はじめは何してるかわからなかった（コメントアウトとは思わなかった）&lt;br/&gt;
まあ、結果は確かに期待したとおりのものになりますが、なんか違うよね。&lt;br/&gt;
アクセス時に作成される cs (または vb）ファイルに /* &amp;lt;asp:Label id=&amp;quot;lbl&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;hoge&amp;lt;/asp:Label&amp;gt; */ つーコメントを埋め込めと命令しているわけで。&lt;br/&gt;
まあ、実害はないので放置しておきました。&lt;br/&gt;
&lt;br/&gt;
あ、でもね&lt;br/&gt;
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="rem"&gt;&amp;lt;!-- 1999/01/23 Mr.X また猿に負けたため削除 begin --&amp;gt;&lt;/span&gt;
&lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;&lt;span class="rem"&gt;/* &amp;lt;asp:Label id="lbl" runat="server"&amp;gt;hoge&amp;lt;/asp:Label&amp;gt; */&lt;/span&gt;&lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;
&lt;span class="rem"&gt;&amp;lt;!-- 1999/01/23 Mr.X また猿に負けたため削除 end --&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
台無しですから（日付・名前・コメントはもちろん適当ですよ）&lt;img src ="http://blogs.wankuma.com/pinzolo/aggbug/70569.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>THREE-ONE</dc:creator><title>上から順でお願いします</title><link>http://blogs.wankuma.com/pinzolo/archive/2007/04/04/70182.aspx</link><pubDate>Wed, 04 Apr 2007 21:26:00 GMT</pubDate><guid>http://blogs.wankuma.com/pinzolo/archive/2007/04/04/70182.aspx</guid><wfw:comment>http://blogs.wankuma.com/pinzolo/comments/70182.aspx</wfw:comment><comments>http://blogs.wankuma.com/pinzolo/archive/2007/04/04/70182.aspx#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://blogs.wankuma.com/pinzolo/comments/commentRss/70182.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/pinzolo/services/trackbacks/70182.aspx</trackback:ping><description>Webアプリの保守や改修をしていると、aspx のソースからデザインや各コントロールをイメージして、テキストエディタでいじることをよくやります。（私は）&lt;br/&gt;
ですが、ここでどうしようもないこまったちゃんが出てきます。&lt;br/&gt;
そ～ぅ、&lt;span style="font-size:xx-large;color:blue;"&gt;GridLayout&lt;/span&gt;で・す・YO!!。&lt;br/&gt;
DataGrid が縦に 4 つ並んでたのですが、HTML 上では実際の 3 → 2 → 4 → 1 の順に並んでました。&lt;br/&gt;
ﾅﾒﾝﾅﾜﾘｬｧ(ﾉ-_-)ﾉ⌒┻┻&lt;br/&gt;
&lt;br/&gt;
まあ、厳密には GridLayout というか絶対位置指定の問題なんですけど。&lt;br/&gt;
GridLayout に頼っていると、HTML が見づらいものになってしまうという点で同じかな。&lt;br/&gt;
絶対位置指定も z-index を利用して、三次元ぽい配置するには便利なんですよ。&lt;br/&gt;
FlowLayout そんなにめんどくさいかなぁ？&lt;br/&gt;
個人的には、GridLayout をデフォルトにした MS のせいだと思ってます。&lt;br/&gt;
&lt;br/&gt;
VS2003 までは、デザイナでちまちまやるより、直接 HTML やコントロールをタグでがーーーーーーっと書いていくほうが、効率いいと思うんだけどなぁ。&lt;br/&gt;
インテリセンスもきくんだし。&lt;br/&gt;
もちろん、ある程度なれた人限定ですけど。&lt;br/&gt;
あ、なれてなくても必ず FlowLayout でやってください。ﾏｼﾞﾃﾞ&lt;img src ="http://blogs.wankuma.com/pinzolo/aggbug/70182.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>THREE-ONE</dc:creator><title>Name と NCName と QName</title><link>http://blogs.wankuma.com/pinzolo/archive/2007/03/15/66833.aspx</link><pubDate>Thu, 15 Mar 2007 01:35:00 GMT</pubDate><guid>http://blogs.wankuma.com/pinzolo/archive/2007/03/15/66833.aspx</guid><wfw:comment>http://blogs.wankuma.com/pinzolo/comments/66833.aspx</wfw:comment><comments>http://blogs.wankuma.com/pinzolo/archive/2007/03/15/66833.aspx#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://blogs.wankuma.com/pinzolo/comments/commentRss/66833.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/pinzolo/services/trackbacks/66833.aspx</trackback:ping><description>昨日の XML Schema のデータ型に Name と NCName と QName という似たようなデータ型があります。&lt;br/&gt;
これはいったいなんでしょう？&lt;br/&gt;
まず、QName とは属性名や要素名の形式です。&lt;br/&gt;
xsl:stylesheet のように名前空間接頭辞:localName の形式です。&lt;br/&gt;
これに対して展開された名前というものが存在します。&lt;br/&gt;
これは "http://www.w3.org/1999/XSL/Transform"+"stylesheet" のように名前空間を URI に展開します。&lt;br/&gt;
つまり、同じ名前空間に属する同じ localName の要素でも QName は違う可能性がありますが、展開された名前は必ず一致します。&lt;br/&gt;
この、名前空間接頭辞:localName の形式を QName といいます。&lt;br/&gt;
データ型としてわかりやすいのは、xsd:element 要素の name 属性とかでしょうか。&lt;br/&gt;
&lt;br/&gt;
たいして、Name と NCName は要素内容や属性値に使用できる文字の集合を表しています。&lt;br/&gt;
要素名や属性名に使用できる文字で構成された文字列データということです。&lt;br/&gt;
そのため、xsd:string から派生したものになっています。&lt;br/&gt;
NCName とは Name で使用される文字から : を取り除いたものです。&lt;br/&gt;
XML において名前に : は含むことができます。&lt;br/&gt;
ただし、名前空間とのデリミタとしても使用されるため、推奨されていません。（パーサーによってはエラーにもなりますね）&lt;br/&gt;
要するに&lt;span style="font-size:x-large"&gt;まぎらわしい&lt;/span&gt;んですよ。&lt;br/&gt;
&lt;br/&gt;
ID データ型は NCName から派生しています。&lt;br/&gt;
つまり、ID データ型に指定された属性値には : を含むことができないのです。&lt;br/&gt;
そういえば、ASP.NET で id 属性にレンダリングされる Control.ClientID は Control.UniqueID の : を _ に置換したものですね。&lt;br/&gt;
(ASP.NET 2.0 以降なら $ か。まあ $ は ID 型や NCName 型以前に Name 型として不適なので同じですけど)&lt;br/&gt;
それもちゃんと理由があるわけですね。&lt;br/&gt;
ま、これは XML Schema の ID 型というか DTD の ID 型なんですけれども。&lt;br/&gt;
XML Schema の ID 型も DTD の ID 型に対応させるためにあるわけなので、結局は同じ話です。&lt;img src ="http://blogs.wankuma.com/pinzolo/aggbug/66833.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>THREE-ONE</dc:creator><title>シェルピンスキーのギャスケット</title><link>http://blogs.wankuma.com/pinzolo/archive/2007/02/23/63707.aspx</link><pubDate>Fri, 23 Feb 2007 02:44:00 GMT</pubDate><guid>http://blogs.wankuma.com/pinzolo/archive/2007/02/23/63707.aspx</guid><wfw:comment>http://blogs.wankuma.com/pinzolo/comments/63707.aspx</wfw:comment><comments>http://blogs.wankuma.com/pinzolo/archive/2007/02/23/63707.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/pinzolo/comments/commentRss/63707.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/pinzolo/services/trackbacks/63707.aspx</trackback:ping><description>今日はマス北野の日です。&lt;br/&gt;
というわけで、数回前のネタであるフラクタルで遊んでみましょう。&lt;br/&gt;
&lt;br/&gt;
コードビハインド
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Data;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Configuration;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.Security;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.UI;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.UI.WebControls;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.UI.WebControls.WebParts;
&lt;span class="kwrd"&gt;using&lt;/span&gt; System.Web.UI.HtmlControls;

&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; FractaleTest_FractaleTest : System.Web.UI.Page
{
    &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Page_Load(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)
    {
        &lt;span class="kwrd"&gt;this&lt;/span&gt;.rowRepeater.DataSource = &lt;span class="kwrd"&gt;this&lt;/span&gt;.CreateDataSource(64);
        &lt;span class="kwrd"&gt;this&lt;/span&gt;.rowRepeater.DataBind();
    }

    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// データソースを作成します。&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;param name="lineCount"&amp;gt;表示行数&amp;lt;/param&amp;gt;&lt;/span&gt;
    &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;データソース&amp;lt;/returns&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;private&lt;/span&gt; List&amp;lt;List&amp;lt;&lt;span class="kwrd"&gt;bool&lt;/span&gt;&amp;gt;&amp;gt; CreateDataSource(&lt;span class="kwrd"&gt;int&lt;/span&gt; lineCount)
    {
        List&amp;lt;List&amp;lt;&lt;span class="kwrd"&gt;bool&lt;/span&gt;&amp;gt;&amp;gt; dataSource = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;List&amp;lt;&lt;span class="kwrd"&gt;bool&lt;/span&gt;&amp;gt;&amp;gt;(lineCount);
        &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0; i &amp;lt; lineCount; i++)
        {
            &lt;span class="kwrd"&gt;int&lt;/span&gt; dataCount = i + 1;
            List&amp;lt;&lt;span class="kwrd"&gt;bool&lt;/span&gt;&amp;gt; line = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;bool&lt;/span&gt;&amp;gt;(dataCount);
            &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; j = 0; j &amp;lt; dataCount; j++)
            {
                &lt;span class="kwrd"&gt;if&lt;/span&gt; ((j == 0) || (j == dataCount - 1))
                {
                    line.Add(&lt;span class="kwrd"&gt;true&lt;/span&gt;);
                }
                &lt;span class="kwrd"&gt;else&lt;/span&gt;
                {
                    List&amp;lt;&lt;span class="kwrd"&gt;bool&lt;/span&gt;&amp;gt; previousLine = dataSource[dataSource.Count - 1];
                    line.Add(previousLine[j - 1] ^ previousLine[j]);
                }
            }
            dataSource.Add(line);
        }

        &lt;span class="kwrd"&gt;return&lt;/span&gt; dataSource;
    }
}
&lt;/pre&gt;
&lt;br/&gt;
&lt;br/&gt;
aspx
&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="asp"&gt;&amp;lt;%@ Page Language="C#" AutoEventWireup="true" CodeFile="FractaleTest.aspx.cs" Inherits="FractaleTest_FractaleTest" %&amp;gt;&lt;/span&gt;

&lt;span class="kwrd"&gt;&amp;lt;!&lt;/span&gt;&lt;span class="html"&gt;DOCTYPE&lt;/span&gt; &lt;span class="attr"&gt;html&lt;/span&gt; &lt;span class="attr"&gt;PUBLIC&lt;/span&gt; &lt;span class="kwrd"&gt;"-//W3C//DTD XHTML 1.0 Transitional//EN"&lt;/span&gt; &lt;span class="kwrd"&gt;"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt; &lt;span class="attr"&gt;xmlns&lt;/span&gt;&lt;span class="kwrd"&gt;="http://www.w3.org/1999/xhtml"&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;シェルピンスキーのギャスケット&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;title&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;head&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;form&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;="form1"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;table&lt;/span&gt; &lt;span class="attr"&gt;cellpadding&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;cellspacing&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;border&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Repeater&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="rowRepeater"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ItemTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;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;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;td&lt;/span&gt; &lt;span class="attr"&gt;style&lt;/span&gt;&lt;span class="kwrd"&gt;="text-align:center; font-family:Monospace"&lt;/span&gt; &lt;span class="attr"&gt;nowrap&lt;/span&gt;&lt;span class="kwrd"&gt;="nowrap"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;asp:Repeater&lt;/span&gt; &lt;span class="attr"&gt;ID&lt;/span&gt;&lt;span class="kwrd"&gt;="circleRepeater"&lt;/span&gt; &lt;span class="attr"&gt;runat&lt;/span&gt;&lt;span class="kwrd"&gt;="server"&lt;/span&gt; &lt;span class="attr"&gt;DataSource&lt;/span&gt;&lt;span class="kwrd"&gt;="&amp;lt;%# Container.DataItem %&amp;gt;"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;ItemTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                                    &lt;span class="asp"&gt;&amp;lt;%&lt;/span&gt;# ((&lt;span class="kwrd"&gt;bool&lt;/span&gt;) Container.DataItem) ? &lt;span class="str"&gt;"○"&lt;/span&gt; : &lt;span class="str"&gt;"●"&lt;/span&gt; &lt;span class="asp"&gt;%&amp;gt;&lt;/span&gt;
                                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ItemTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:Repeater&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&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;
                    &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;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;ItemTemplate&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;asp:Repeater&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&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;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;div&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;form&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;body&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;html&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
&lt;br/&gt;
&lt;br/&gt;
&lt;a href="http://pinzolo.wankuma.com/img/Fractale.jpg" target="_blank"&gt;結果&lt;/a&gt;（ちょっとサイズでかいです）&lt;br/&gt;
&lt;br/&gt;
フラクタルだけに再帰でやりたかったけど、わかりにくいソースになりそうでやめた。&lt;img src ="http://blogs.wankuma.com/pinzolo/aggbug/63707.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>THREE-ONE</dc:creator><title>続、Excel でダウンロード</title><link>http://blogs.wankuma.com/pinzolo/archive/2007/02/04/60855.aspx</link><pubDate>Sun, 04 Feb 2007 17:26:00 GMT</pubDate><guid>http://blogs.wankuma.com/pinzolo/archive/2007/02/04/60855.aspx</guid><wfw:comment>http://blogs.wankuma.com/pinzolo/comments/60855.aspx</wfw:comment><comments>http://blogs.wankuma.com/pinzolo/archive/2007/02/04/60855.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/pinzolo/comments/commentRss/60855.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/pinzolo/services/trackbacks/60855.aspx</trackback:ping><description>&lt;A href="http://blogs.wankuma.com/pinzolo/archive/2006/11/24/46804.aspx" target=_blank&gt;http://blogs.wankuma.com/pinzolo/archive/2006/11/24/46804.aspx&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;これの DataGrid を GridView に変更して実行するとエラーになります。&lt;BR&gt;原因は、GridView が VerifyRenderingInServerForm を呼び出していて、Form のレンダリング中に GridView のレンダリングが行われていないためです。&lt;BR&gt;で、これを回避するためには VerifyRenderingInServerForm をオーバーライドしろとなっています。&lt;BR&gt;で、いくつかの掲示板は blog では Page::VerifyRenderignInServerForm を中身空でオーバーライドしているコードが見受けられます。&lt;BR&gt;これは非常に危険です。&lt;BR&gt;VerifyRenderingInServerForm はメソッド名どおり、コントロールが HtmlForm 内に配置されレンダリングされていることを確かめます。&lt;BR&gt;つまり、これを空でオーバーライドすると全てのコントロールが HtmlForm 外に配置されていても例外が出力されないということになります。&lt;BR&gt;ダウンロードという一機能のために画面全体の ASP.NET のアーキテクチャに影響する変更をしてはなりません。&lt;BR&gt;VerifyRenderingInServerForm を呼び出しているのは GridView だけではないのです。&lt;br/&gt;せめて下記のようにするべきでしょう。 &lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;bool&lt;/SPAN&gt; _isDownloading = &lt;SPAN class=kwrd&gt;false&lt;/SPAN&gt;;
&lt;SPAN class=kwrd&gt;public&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;override&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; VerifyRenderingInServerForm(Control control)
{
    &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (!_isDownloading)
    {
        &lt;SPAN class=kwrd&gt;base&lt;/SPAN&gt;.VerifyRenderingInServerForm(control);
    }
}
&lt;SPAN class=kwrd&gt;protected&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; downloadButton_Click(&lt;SPAN class=kwrd&gt;object&lt;/SPAN&gt; sender, EventArgs e)
{
    &lt;SPAN class=kwrd&gt;base&lt;/SPAN&gt;.Response.ContentType = &lt;SPAN class=str&gt;"application/vnd.ms-excel"&lt;/SPAN&gt;;
    &lt;SPAN class=kwrd&gt;base&lt;/SPAN&gt;.Response.AppendHeader(&lt;SPAN class=str&gt;"content-disposition"&lt;/SPAN&gt;, &lt;SPAN class=str&gt;"attachment;filename=hoge.xls"&lt;/SPAN&gt;);
    &lt;SPAN class=kwrd&gt;using&lt;/SPAN&gt; (HtmlTextWriter writer = &lt;SPAN class=kwrd&gt;new&lt;/SPAN&gt; HtmlTextWriter(&lt;SPAN class=kwrd&gt;base&lt;/SPAN&gt;.Response.Output))
    {
        &lt;SPAN class=kwrd&gt;try&lt;/SPAN&gt;
        {
            _isDownloading = &lt;SPAN class=kwrd&gt;true&lt;/SPAN&gt;;
            &lt;SPAN class=kwrd&gt;this&lt;/SPAN&gt;.GridView1.RenderControl(writer);
            writer.Flush();
            &lt;SPAN class=kwrd&gt;base&lt;/SPAN&gt;.Response.End();
        }
        &lt;SPAN class=kwrd&gt;finally&lt;/SPAN&gt;
        {
            writer.Close();
        }
    }
}
&lt;/PRE&gt;&lt;img src ="http://blogs.wankuma.com/pinzolo/aggbug/60855.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>THREE-ONE</dc:creator><title>省みて 自分の歩みを 確かめる</title><link>http://blogs.wankuma.com/pinzolo/archive/2007/02/02/60601.aspx</link><pubDate>Fri, 02 Feb 2007 23:30:00 GMT</pubDate><guid>http://blogs.wankuma.com/pinzolo/archive/2007/02/02/60601.aspx</guid><wfw:comment>http://blogs.wankuma.com/pinzolo/comments/60601.aspx</wfw:comment><comments>http://blogs.wankuma.com/pinzolo/archive/2007/02/02/60601.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/pinzolo/comments/commentRss/60601.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/pinzolo/services/trackbacks/60601.aspx</trackback:ping><description>PC の中からこんなソースが出てきた。&lt;BR&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;PRE class=csharpcode&gt;&lt;SPAN class=kwrd&gt;private&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;void&lt;/SPAN&gt; DataGrid_ItemDataBound(&lt;SPAN class=kwrd&gt;object&lt;/SPAN&gt; sender, DataGridItemEventArgs e)
{
    DataRowView drv = e.Item.DataItem &lt;SPAN class=kwrd&gt;as&lt;/SPAN&gt; DataRowView;
    &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (drv != &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;)
    {
        Label lbl = e.Item.Cells[0].FindControl(&lt;SPAN class=str&gt;"lbl"&lt;/SPAN&gt;) &lt;SPAN class=kwrd&gt;as&lt;/SPAN&gt; Label;
        &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (lbl != &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;)
        {
            lbl.Text = drv[&lt;SPAN class=str&gt;"Column1"&lt;/SPAN&gt;].ToString();
        }
        TextBox txt = e.Item.Cells[1].FindControl(&lt;SPAN class=str&gt;"txt"&lt;/SPAN&gt;) &lt;SPAN class=kwrd&gt;as&lt;/SPAN&gt; TextBox;
        &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; (txt != &lt;SPAN class=kwrd&gt;null&lt;/SPAN&gt;)
        {
            txt.Text = drv[&lt;SPAN class=str&gt;"Column2"&lt;/SPAN&gt;].ToString();
        }
    }
}
&lt;/PRE&gt;ああ～～～～～～～～～～&lt;BR&gt;何、パフォーマンス落としてマジックナンバーまで使っちゃってるんだ、俺は&lt;BR&gt;検索対象の範囲を狭めてあげたほうが、パフォーマンスいいと思い込んでたんだろうな&lt;BR&gt;まあでも、昔のソースを見て「俺、アホだ」と思えるってことはちゃんと成長しているってことだな、ウン&lt;br/&gt;&lt;br/&gt;# 列名とコントロールの ID は伏せるために変更してます。&lt;img src ="http://blogs.wankuma.com/pinzolo/aggbug/60601.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>THREE-ONE</dc:creator><title>XSLT を用いて DataTable の行と列を入れ替える</title><link>http://blogs.wankuma.com/pinzolo/archive/2007/02/01/60185.aspx</link><pubDate>Thu, 01 Feb 2007 00:10:00 GMT</pubDate><guid>http://blogs.wankuma.com/pinzolo/archive/2007/02/01/60185.aspx</guid><wfw:comment>http://blogs.wankuma.com/pinzolo/comments/60185.aspx</wfw:comment><comments>http://blogs.wankuma.com/pinzolo/archive/2007/02/01/60185.aspx#Feedback</comments><slash:comments>21</slash:comments><wfw:commentRss>http://blogs.wankuma.com/pinzolo/comments/commentRss/60185.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/pinzolo/services/trackbacks/60185.aspx</trackback:ping><description>&lt;A href="http://bbs.wankuma.com/index.cgi?mode=al2&amp;amp;namber=575"&gt;http://bbs.wankuma.com/index.cgi?mode=al2&amp;amp;namber=575&lt;/A&gt;&lt;BR&gt;&lt;BR&gt;ネタ元は上記のわんくま BBS です。&lt;BR&gt;DataTable の行と列を入れ替えるのをわざわざ XSLT を利用してやってやろうという試み。&lt;BR&gt;DataTable::WriteXml で出力した XML に XSLT をかませて変換し、変換後の XML を食わせて DataTable を作ってやる。&lt;BR&gt;ちなみに、DataTable に名前が設定してなければ WriteXml ができないのでご注意。&lt;BR&gt;なので、DataTable ではなく DataSet （Tables[0] に 対象の DataTable を持つ）を対象とする。&lt;BR&gt;DataSet::WriteXml と DataTable::WriteXml で出力される XML に大きな違いはない。&lt;BR&gt;（Tables.Count == 1 であれば）ルート要素の要素名が DataSet の名前になるか、DocumentElement 固定になるかの違いだけである。&lt;BR&gt;DataTable より DataSet を使ったほうがいい理由は、XmlDataDocument が利用しやすいからである。&lt;BR&gt;XmlDataDocument は作成時に DataSet を引数に取れる。&lt;BR&gt;また XmlDataDocument は XmlDocument を継承しており、IXPathNavigatable を実装しているので XSLT 変換が容易にできる。&lt;BR&gt;&lt;BR&gt;前置きはここまでにして、使用する XSLT は以下のものである。&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;="1.0"&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;="utf-8"&lt;/span&gt; ?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:stylesheet&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;="1.0"&lt;/span&gt; &lt;span class="attr"&gt;xmlns:xsl&lt;/span&gt;&lt;span class="kwrd"&gt;="http://www.w3.org/1999/XSL/Transform"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:template&lt;/span&gt; &lt;span class="attr"&gt;match&lt;/span&gt;&lt;span class="kwrd"&gt;="/"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:apply-templates&lt;/span&gt; &lt;span class="attr"&gt;mode&lt;/span&gt;&lt;span class="kwrd"&gt;="root"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:template&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:template&lt;/span&gt; &lt;span class="attr"&gt;match&lt;/span&gt;&lt;span class="kwrd"&gt;="*"&lt;/span&gt; &lt;span class="attr"&gt;mode&lt;/span&gt;&lt;span class="kwrd"&gt;="root"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;NewDataSet&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:apply-templates&lt;/span&gt; &lt;span class="attr"&gt;mode&lt;/span&gt;&lt;span class="kwrd"&gt;="controlRowRender"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;NewDataSet&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:template&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:template&lt;/span&gt; &lt;span class="attr"&gt;match&lt;/span&gt;&lt;span class="kwrd"&gt;="*"&lt;/span&gt; &lt;span class="attr"&gt;mode&lt;/span&gt;&lt;span class="kwrd"&gt;="controlRowRender"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:if&lt;/span&gt; &lt;span class="attr"&gt;test&lt;/span&gt;&lt;span class="kwrd"&gt;="position() = 1"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:apply-templates&lt;/span&gt; &lt;span class="attr"&gt;mode&lt;/span&gt;&lt;span class="kwrd"&gt;="renderRow"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:if&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:template&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:template&lt;/span&gt; &lt;span class="attr"&gt;match&lt;/span&gt;&lt;span class="kwrd"&gt;="*"&lt;/span&gt; &lt;span class="attr"&gt;mode&lt;/span&gt;&lt;span class="kwrd"&gt;="renderRow"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:variable&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="name"&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;="name(.)"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;NewDataTable&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:for-each&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;="../..//*[name(.) = $name]"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="{concat('col', position())}"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:value-of&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;="."&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
                &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:element&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:for-each&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;NewDataTable&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:template&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:stylesheet&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
列名もテーブル名も全くもってわからないので、このように汎用的にする必要がある。&lt;BR&gt;逆に言えば、どんな DataTable もこの XSLT 一つで行と列を入れ替えることができる。&lt;BR&gt;ポイントは、match を * にしておいて、mode 指定によって切り替えるということ。&lt;BR&gt;要素名はわからないけれども、構成・階層が固定になるから使えるテクニックだ。&lt;BR&gt;で、この XSLT で変換した結果の XML を DataSet に食わせて、Tables[0] を取得すれば、行と列が入れ替わった DataTable が取得できる。&lt;BR&gt;&lt;BR&gt;はっきり言ってこんなものを使ってまで、行と列を入れ替える必要がない。&lt;br/&gt;簡単な二重ループで事足りる。&lt;BR&gt;しかしこれは、少し変えれば限定状況ながらも有効に利用できる。&lt;BR&gt;もともとの用途では、GridView にバインドすることが想定されていた。&lt;BR&gt;ここで、バインド後に GridView 固有の機能（イベントやら何やら）を使用しないという状況を考える。&lt;BR&gt;そんな場合、Xml コントロールを使用し、先述した XmlDataDocument を使用し、下記のような XSLT を使用する。&lt;BR&gt;要素名をテーブルに対応させただけのものである。&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;
&lt;pre class="csharpcode"&gt;
&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;="1.0"&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;="utf-8"&lt;/span&gt; ?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:stylesheet&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;="1.0"&lt;/span&gt; &lt;span class="attr"&gt;xmlns:xsl&lt;/span&gt;&lt;span class="kwrd"&gt;="http://www.w3.org/1999/XSL/Transform"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:template&lt;/span&gt; &lt;span class="attr"&gt;match&lt;/span&gt;&lt;span class="kwrd"&gt;="/"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:apply-templates&lt;/span&gt; &lt;span class="attr"&gt;mode&lt;/span&gt;&lt;span class="kwrd"&gt;="root"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:template&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:template&lt;/span&gt; &lt;span class="attr"&gt;match&lt;/span&gt;&lt;span class="kwrd"&gt;="*"&lt;/span&gt; &lt;span class="attr"&gt;mode&lt;/span&gt;&lt;span class="kwrd"&gt;="root"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;table&lt;/span&gt; &lt;span class="attr"&gt;border&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;cellpadding&lt;/span&gt;&lt;span class="kwrd"&gt;="0"&lt;/span&gt; &lt;span class="attr"&gt;cellspacing&lt;/span&gt;&lt;span class="kwrd"&gt;="1"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:apply-templates&lt;/span&gt; &lt;span class="attr"&gt;mode&lt;/span&gt;&lt;span class="kwrd"&gt;="controlRowRender"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&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;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:template&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:template&lt;/span&gt; &lt;span class="attr"&gt;match&lt;/span&gt;&lt;span class="kwrd"&gt;="*"&lt;/span&gt; &lt;span class="attr"&gt;mode&lt;/span&gt;&lt;span class="kwrd"&gt;="controlRowRender"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:if&lt;/span&gt; &lt;span class="attr"&gt;test&lt;/span&gt;&lt;span class="kwrd"&gt;="position() = 1"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:apply-templates&lt;/span&gt; &lt;span class="attr"&gt;mode&lt;/span&gt;&lt;span class="kwrd"&gt;="renderRow"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:if&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:template&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
    
    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:template&lt;/span&gt; &lt;span class="attr"&gt;match&lt;/span&gt;&lt;span class="kwrd"&gt;="*"&lt;/span&gt; &lt;span class="attr"&gt;mode&lt;/span&gt;&lt;span class="kwrd"&gt;="renderRow"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:variable&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;="name"&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;="name(.)"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;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;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:for-each&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;="../..//*[name(.) = $name]"&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&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;
                    &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsl:value-of&lt;/span&gt; &lt;span class="attr"&gt;select&lt;/span&gt;&lt;span class="kwrd"&gt;="."&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&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;
            &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:for-each&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;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;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:template&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsl:stylesheet&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;
&lt;/pre&gt;
すると、DataTable には何の操作も行わずに、行と列を入れ替えたテーブルを表示することができる。&lt;BR&gt;「表示だけ」という限定された状況なれど、利用する価値はあるのではなかろうか。&lt;img src ="http://blogs.wankuma.com/pinzolo/aggbug/60185.aspx" width = "1" height = "1" /&gt;</description></item><item><dc:creator>THREE-ONE</dc:creator><title>どーいうこと？</title><link>http://blogs.wankuma.com/pinzolo/archive/2007/01/22/57803.aspx</link><pubDate>Mon, 22 Jan 2007 23:12:00 GMT</pubDate><guid>http://blogs.wankuma.com/pinzolo/archive/2007/01/22/57803.aspx</guid><wfw:comment>http://blogs.wankuma.com/pinzolo/comments/57803.aspx</wfw:comment><comments>http://blogs.wankuma.com/pinzolo/archive/2007/01/22/57803.aspx#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://blogs.wankuma.com/pinzolo/comments/commentRss/57803.aspx</wfw:commentRss><trackback:ping>http://blogs.wankuma.com/pinzolo/services/trackbacks/57803.aspx</trackback:ping><description>カスタム Web コントロールを作っています。&lt;br/&gt;
&lt;br/&gt;
以前作った、連続クリック防止ボタンを拡張しています。&lt;br/&gt;
以前のは Button なら Button だけ、LinkButton なら LinkButton だけを disabled にしていたので、
今度は画面に登録されている Button, LinkButton, ImageButton 全てが連動するようにしている。&lt;br/&gt;
修正するところは大したところじゃなくて、利用している JavaScript を共通的なものにして、ClientScriptManager のように管理するクラスを作ってやるだけ。&lt;br/&gt;
で、AddAttributesToRender をオーバーライドして onclick や href の実行スクリプトをスクリプト管理クラスから取得しているんだけど、ここで問題が起きた。&lt;br/&gt;
ちゃんと動きはするんです。&lt;br/&gt;
ただ、デザイナでコントロールが正しく表示されない。&lt;br/&gt;
ただの文字列だけになる。&lt;br/&gt;
仕方ないのでデザイナクラスを作ってみた。&lt;br/&gt;
するとページに直接登録したときは、正しく表示された。&lt;br/&gt;
一安心、と思っていたらまたしても問題が起きた&lt;br/&gt;
DataGrid のようなコンテナ内に配置すると、コンテナもろともエラーで表示されなくなる。&lt;br/&gt;
これは、カスタムコントロール側では制御できないだろう。&lt;br/&gt;
解析するのはコンテナの方だしなぁ。&lt;br/&gt;
&lt;br/&gt;
どうも、internal なスクリプト管理クラスの internal なメソッドから onclick のスクリプトを取得している部分がまずいらしい。&lt;br/&gt;
これを protected なメソッドにして、コントロールのクラス内部に配置したら問題なく表示された。&lt;br/&gt;
そんなわけで全く同じメソッドを三つのクラスに配置した。&lt;br/&gt;
こんなことやりたくないのに・・・・&lt;br/&gt;
&lt;br/&gt;
とりあえず、まだ v1.0 の環境でしか確認できてないので、v1.1, v2.0 に移植して試してみないといけない。&lt;br/&gt;
しかし、なんでこんなことになるのかがさっぱりわからん、RenderControl の結果をレンダリングしてるだけじゃないのか？？&lt;img src ="http://blogs.wankuma.com/pinzolo/aggbug/57803.aspx" width = "1" height = "1" /&gt;</description></item></channel></rss>