none
DataTextFieldプロパティの連結 RRS feed

  • 質問

  • FormViewで顧客情報を入力するフォームを作成しております。
    顧客DBテーブルとは別に、「学校」DBテーブルを参照したDropDownListの選択項目があるのですが、
    DataTextFieldプロパティを連結は出来ますでしょうか?

    以下ソースの一部となります。
    -------------------------
                <tr><th style="background-color: #006600">学校ID</th>
                <td style="text-align: left; background-color: #FFFFFF" CssClass="FormView" >
                    <asp:SqlDataSource ID="SchoolIdSqlDataSource"
                        runat="server"
                        ConnectionString="Data Source=(local);User ID=xxx;Password=xxx;Persist Security Info=True;Initial Catalog=xxx"
                        SelectCommand="SELECT [SchoolId], [SchoolName], [SchoolYear] FROM [School] WHERE SchoolName=@SchoolName ORDER BY SchoolYear DESC">
                    <SelectParameters>
                        <asp:SessionParameter DefaultValue="" Name="SchoolName" SessionField="SchoolName" Type="Int32" />
                        <asp:SessionParameter DefaultValue="" Name="SchoolYear" SessionField="SchoolYear" Type="Int32" />
                    </SelectParameters>
                    </asp:SqlDataSource>
                    <asp:DropDownList ID="SchoolIdDropDownList"
                        runat="server"
                        DataSourceID="SchoolIdSqlDataSource"
                        DataTextField="SchoolName"
                        DataValueField="SchoolId"
                        AppendDataBoundItems="True"
                        SelectedValue='<%# Bind("SchoolId") %>'>
                        <asp:ListItem Selected="True" Value ="" Text="未選択">未選択</asp:ListItem>
                    </asp:DropDownList><br></td></tr>
    -------------------------

    ▼学校テーブル(School)
    学校ID:SchoolId (例:123)
    学校名:SchoolName (例:ABC高等学校)
    学校年度:SchoolYear (例:2010)

    -------------------------
    「DataTextField="SchoolName"」の部分を「DataTextField="SchoolName + SchoolYear"」のように置き換えたいです。
    フォームの見た目では「ABC高等学校2010」と表示されるようにしたいのです。

    こういうのは出来ますでしょうか?
    そんな都合のいいやり方は無いですかね。
    (文字列を連結してから、プロパティにセットすべきですよね。)
    どのようにしたら実装できるでしょうか?

    ご教授を頂きたいです。
    どうぞ宜しくお願い申し上げます。

    2012年6月11日 6:15

回答

  • これも trapemiya さん、小野さんのレスとダブルところがありますが・・・

    > (文字列を連結してから、プロパティにセットすべきですよね。)

    具体的にどのようにすればそれが実現できるか分って上記のように書い
    ているわけではなさそうに思えますが、いかがでしょう?

    具体的にどうするかというと、SELECT クエリで以下のよう文字列を連結
    して別名をつけ、

    SELECT [SchoolId], ([SchoolName] + [SchoolYear]) AS SchoolNameYear FROM ...

    その別名を以下のように DataTextField に設定してやれば、やりたいこ
    とができるはずです。

    DataTextField="SchoolNameYear"


    • 編集済み SurferOnWww 2012年6月11日 11:59 誤字訂正
    • 回答としてマーク ミルズ 2012年6月19日 22:59
    2012年6月11日 11:59

すべての返信

  • そんな都合のいいやり方は無いですかね。
    (文字列を連結してから、プロパティにセットすべきですよね。)

    そのような都合の良いやり方は無いでしょう。一番簡単なのは、ミルズさんが書かれているように、SQLで文字列連結し、それをDataTextFieldに指定する方法でしょう。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    2012年6月11日 6:45
    モデレータ
  • > 一番簡単なのは、ミルズさんが書かれているように、SQLで文字列連結し、それをDataTextFieldに指定する方法でしょう。

    このSQLで文字列連結、という方法の実装が求められているような気がする。。。

    http://msdn.microsoft.com/ja-jp/library/ms177561.aspx

    SelectCommandに設定しているSQL文を上記を参考に別名をつけた連結した文字列を返すように修正して、別名をDataTextFieldに指定してあげればよいかと。
    一度これやるとウィザードでSqlDataSourceいじったりしたときに修正したSQL文が消えるので、必要であれば再度手作業で直すようにしてください。


    あおい情報システム株式会社 小野修司(どっとねっとふぁん)

    2012年6月11日 10:45
  • これも trapemiya さん、小野さんのレスとダブルところがありますが・・・

    > (文字列を連結してから、プロパティにセットすべきですよね。)

    具体的にどのようにすればそれが実現できるか分って上記のように書い
    ているわけではなさそうに思えますが、いかがでしょう?

    具体的にどうするかというと、SELECT クエリで以下のよう文字列を連結
    して別名をつけ、

    SELECT [SchoolId], ([SchoolName] + [SchoolYear]) AS SchoolNameYear FROM ...

    その別名を以下のように DataTextField に設定してやれば、やりたいこ
    とができるはずです。

    DataTextField="SchoolNameYear"


    • 編集済み SurferOnWww 2012年6月11日 11:59 誤字訂正
    • 回答としてマーク ミルズ 2012年6月19日 22:59
    2012年6月11日 11:59
  • みなさんのアドバイス・ご指摘により実装する事ができました。

    SELECT [SchoolId], ([SchoolName] + [SchoolYear]) AS SchoolNameYear FROM School

    で、思った通りに実装ができ、

    SELECT [SchoolId], ([SchoolName] + ' (' + CONVERT(varchar, SchoolYear) + '年度)') AS SchoolNameYear FROM [School]

    で、仕様通りの実装が実現できました。

    ご教授頂き誠にありがとうございました。

    2012年6月11日 22:50