質問者
GridView内にあるDropDownListのToolTipにデータバインドしたい

質問
-
お世話になっております
【開発環境】 .netFrameWork4.5 Windows7 VisualStudio Web2012 IE
【データベース】 SQLServer2012
【やりたい事】
GridView(SqlDataSource1を利用)のItemの中で、DropDownList(SqlDataSource2を利用)を利用しています。
TextやValueはDataTextField、DataValueFieldで取得できたのですが、ToolTipにデータをバインドしたい場合はどうすれば良いでしょうか?
ASPXでできないのであれば、GridViewの中なのでDropDownListのイベントが使えないため、やはりGridViewのRowCreatedイベントでコントロールがDropDownListかを判定してその判定内で実装するしかないのでしょうか?
ちなみに下記aspxのコードの「????」になっている部分になります。
<asp:TemplateField HeaderText="ID" SortExpression="aplid" ItemStyle-Wrap="True"> <EditItemTemplate> <asp:DropDownList ID="DropDownList1" runat="server" AppendDataBoundItems="True" DataSourceId="SqlDataSource2" DataTextField="aplid" SelectedValue='<%# Bind("sysid")%>' DataValueField="sysinfid" ToolTip='<%# ???? %>'> <asp:ListItem></asp:ListItem> </asp:DropDownList> <br /> <asp:Label ID="Label10" runat="server" Text='<%# Bind("sysname")%>'></asp:Label> </EditItemTemplate>
恐れ入りますが、よろしくお願いいたします。
すべての返信
-
SurferOnWwwさん
度々お世話になっております
この「????」部分のコードで、SqlDataSource2から取得する方法が全く思いつきませんでした。
現在はaspxではなくてコード側のGridViewのRowCreatedイベントで処理しようとしています。(処理的には同じようなことを書くのでしょうが・・)
Protected Sub GridView1_RowCreated(sender As Object, e As GridViewRowEventArgs) Handles GridView1.RowCreated If e.Row.RowType = DataControlRowType.DataRow Then If e.Row.RowState = DataControlRowState.Edit Then Try Dim DropDownList1 As DropDownList = DirectCast(e.Row.FindControl("DropDownList1"), DropDownList) DropDownList1.ToolTip = ”あいうえお” Catch ex As Exception 'とりあえず何もしない End Try End If
ToolTipに「あいうえお」が入っているのは確認できたのですが、これをSqlDataSource2からうまく取得できないものかと悩んでおります。
-
> この「????」部分のコードで、SqlDataSource2から取得する方法が全く思いつきませんでした。
そもそも、SqlDataSource2 から取得するという考え方が間違っているのではないですか?
通常 SqlDataSource2 から取得するのは DropDownList 内に複数ある ListItem の Text と Value のはずです。
親の DropDownList の ToolTip に表示する文字列を、子の ListItem のためのデータから取得するということが理解できません。
具体的に何を表示しようとしているのか、ここに書いてあること以外は何も知るすべのない回答者が理解できるよう、説明していただけないでしょうか?
そのあたりが分かると、もう少しお役に立てる回答ができるかもしれません。
-
>親の DropDownList の ToolTip に表示する文字列を、子の ListItem のためのデータから取得するということが理解できません。
すみません。説明不足でしたが選択されたItemに従ってToolTipを可変にしたかったのです。
なぜかというと、DropDownListの中にそれを入れてしまうとDropDownListの表示幅があまりに大きくなるため、ListItemで現在選択されている値によってToolTipを変更し、マウスカーソルがあたっているとその内容が表示できるようにしたかったということです。
SqlDataSource2のSelect(実際にはストアドで作成しております)にToolTip表示用の項目も一緒にSelectしてきているので、
同時にデータバインド出来ないかと考えた次第です。
SELECT [sysinfid], [aplid],[sysname] FROM [sysinftbl] ORDER BY [aplid]
上記SQLのsysinfidがValue、aplidがText、sysnameをToolTipに当てたい次第です。
同じ構造のListの1項目なので取得できるように思ったのですが・・DropDownList2自体は取得できているので、Valueから別にもう一度selectすれば良いのはわかっているのですが、DropDownList用に用意したSqlDataSource2から取得できないかと思っています。(出来ないとはっきりわかれば良いのですがうまい方法があればヒントだけでもいただけたら幸いです)
よろしくお願いいたします。
-
未だにやりたいことがよく理解できていませんが・・・
> Valueから別にもう一度selectすれば良いのはわかっているのですが、
質問者さんが分かっておられるなら、ここで聞く必要はなくて、その方向で進めることをお勧めします。
> DropDownList用に用意したSqlDataSource2から取得できないかと思っています。何をどうやっても絶対できないとまで言い切る自信はありませんが、少なくとも(SqlDataSource1 ではなくて)SqlDataSource2 で取得したデータを ToolTip='<%# ???? %>' のようにバインドすることはできません。