none
データソースから背景色をバインドしたい RRS feed

  • 質問

  • こんにちは。

     

    例として次のようなxmlDataSourceを作成し、

    <XmlDataSet>
      <Colors>
        <ID>1</ID>
        <Color>#FFFF80</Color>
      </Colors>
    </XmlDataSet>

     

    これをデータセットに格納してたとえばDataListに

    <asp: DataList ID="dlColorList" runat="server">
      <ItemTemplate>
        <asp:TextBox ID="tbColor" runat="server" BackColor='<%# Eval("Color") %>'/>   </ItemTemplate>
    </asp: DataList>

     

    というようにしてバインドし、BackColorを設定したいのですが、うまくいきません。

    Eval("Color")部分をTranslate(Eval("Color")と変更して

    protected function Translate(Byval o as object)

    System.Drawing.ColorTranslator.ToHtml(o.ToString)

    end function

    とやっては見たのですがやはりうまくいきません。

     

    イメージとしては、Color.Parse(o)のように変換するか、DataSetに読み込まれるときにデータ型をColorにしたらよいのではないかと思うのですが、どのようなキーワードで検索すれば文字列をColorに変更できますでしょうか。

    2007年6月7日 5:48

すべての返信

  • すみません、自己レスです。

    データソース側の色を色名にして、

    <Color>Yellow</Color>


     

    変換を下記のようにしたところ、

    protected function Translate(Byval s as String)

    System.Drawing.ColorTranslator.FromHtml(s)

    end function

     

    うまくいきました。

     

    スレを立ててしまったついでにお聞きしたいのですが、DataSetに格納するときにSystem.Drawing.Colorになっていればもっと楽だと思うのですが、カラムのデータ型にColorって設定できるのでしょうか。

    2007年6月7日 6:30
  • 以下のようにすればできるんじゃないかと思います。(未検証)

     

    hogeDataTable.Columns.Add("BackColor", GetType(Color))

    2007年6月7日 11:26
    モデレータ
  • こんにちはtrapemiyaさん

    アドバイスありがとうございました。

     

    ためしにDataSetに型指定し色データを取り込もうとしましたが、Colorのみ全部Color.Emptyになってしまいます。"ID"などのInterger、String型のデータはこの方法でDataListに表示できてますので、XMLファイル内のデータからDataSetに取り込むときに問題が起きているようです。

    データの書き方は、下記のような形式を試しました。

     

    <XmlDataSet>
      <Status>
        <ID>1</ID>
        <StatusString>訪問前</StatusString>
        <Color>&amp;HFFFF00</Color>
      </Status>
      <Status>
        <ID>2</ID>
        <StatusString>訪問・説明済み</StatusString>
        <Color>Color.Yellow</Color>
      </Status>
      <Status>
        <ID>4</ID>
        <StatusString>導入決定・出荷前</StatusString>
        <Color>Gold</Color>
      </Status>
    </XmlDataSet>

     

    型指定は

    Dim dt As New DataTable("Status")
      dt.Columns.Add("ID", GetType(Integer))
      dt.Columns.Add("StatusString", GetType(String))
      dt.Columns.Add("Color", GetType(System.Drawing.Color))

    のように行っています。

     

    素直に文字列をSystem.Drawing.ColorTranslator.FromHtmlで変換したほうが楽なようですね。

     

    以上、結果報告まで。

    2007年6月8日 6:56