- - PR -
DataGridのDropDownListについて
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2004-12-16 22:17
皆さんこんにちわ。
よろしくお願いします。 VB.NET VisualStudio.NETでWEBアプリケーションを開発しています。 今、DataGridにDropDownListを配置し、 Itemsプロパティに次のように設定しました。 Value Text 0 -- 1 B 2 C 3 D DataGridにデータを表示する際に、 DropDownListの初期表示をデータに応じて変えたいのですが、 (取得したデータが1ならばDroDownListはBを選択状態にする ということです。) 過去ログや色々なサイトを調べたのですが、 いまいちよく分かりませんでした。 どなたかご教授お願いします。 | ||||
|
投稿日時: 2004-12-16 22:42
FindByValueでデフォルトのアイテムを選択します。
詳しくは、グーグルから「ASP.NET DropDownList FindByValue」のキーワードで 検索してください。 _________________ ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集 | ||||
|
投稿日時: 2004-12-17 10:06
こんにちは。下記に簡単なサンプルを書いています。
[ メッセージ編集済み 編集者: SE卵 編集日時 2004-12-17 10:13 ] | ||||
|
投稿日時: 2004-12-17 10:33
FindByValueを利用したものは、DataGridのItemDataBoundイベントのところで、
DropDownList1.SelectedIndex = DropDownList1.Items.IndexOf(DropDownList1.Items.FindByValue("取得したデータ")) でいけます。 [ メッセージ編集済み 編集者: yyy 編集日時 2004-12-17 10:36 ] | ||||
|
投稿日時: 2004-12-17 11:51
みなさん、ご返答ありがとうございます。
yyyさんに質問なのですが、 ItemDataBoundイベントを使用するということは データをDataGridにバインドしたときということですよね? データグリッド.DataSource = 取得したデータセット データグリッド.DataBind() 私は上記のような処理でデータグリッドにデータセットを バインドしています。 yyyさんから頂いた返答の中に 「("取得したデータ")」という記述がありましたが、 この場合、データセットをもう一度取得し直し、 ("取得したデータ")のところに、 そのデータの参照先を記述するのでしょうか。 初歩的な質問で大変申し訳ありませんが、 ご教授いただけるとありがたいです。 よろしくお願いします。 ItemDataBoundイベ | ||||
|
投稿日時: 2004-12-17 13:25
こちらの勝手な思い込みで記載してしまったのですが、DataGridに当初、データはテキスト表示されており、「編集」ボタン等をクリックした時点で、DropDownListが表示され、テキスト表示されていた項目が選択されているケースを想定してしまい、
ItemDataBoundイベントでDropDownListのアイテムを作成するケースを書き込ませていただいたのですが... そういうケースでなければ、ロジックをItemDataBoundに記載する必要はありません。 [ メッセージ編集済み 編集者: yyy 編集日時 2004-12-17 13:26 ] | ||||
|
投稿日時: 2004-12-17 13:35
yyyさん、返信ありがとうございます。
私の説明不足でした。 すみません。。。 SQLのビューを一つ作成をし、 それをSELECTしたものでデータセットを作成し、 それをDataGridにバインドしています。 (Page_loadイベントで行なっています) 他の列は全てテキストボックスですが、 ひとつの列だけ、DropDownListにし、 (DropDownListにはあらかじめtextとvalueは入っています。) SELECTしたある列の値と、DropDownListのvalue値が 同じでしたら、そのtextをあらかじめ、 DropDownListで選択した状態にし表示したいのです。 このような場合、バインドした後に、 もう一度、DropDownListに値をセットするために、 どのような記述をすればいいのでしょうか。 何度も申し訳ありません。 どうかご教授お願いします。 | ||||
|
投稿日時: 2004-12-17 13:43
<asp:DataGrid ID="DataGrid1" Runat="server" AutoGenerateColumns="False">
<Columns> <asp:TemplateColumn HeaderText="初期値"> <ItemTemplate> <asp:Literal ID="Literal1" Runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"初期値") %>'></asp:Literal> </ItemTemplate> </asp:TemplateColumn> <asp:TemplateColumn HeaderText="LIST"> <ItemTemplate> <asp:DropDownList ID="DropDownList1" Runat="server" AutoPostBack="True"> <asp:ListItem Value="0">---</asp:ListItem> <asp:ListItem Value="1">B</asp:ListItem> <asp:ListItem Value="2">C</asp:ListItem> <asp:ListItem Value="3">E</asp:ListItem> </asp:DropDownList> </ItemTemplate> </asp:TemplateColumn> </Columns> </asp:DataGrid><BR> <asp:Button ID="Button1" Runat="server" Text="やっぱ変更"></asp:Button> ------------------------ Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load If Not Me.IsPostBack Then Me.DataGrid1.DataSource = Me.GetDataTable Me.DataGrid1.DataBind() End If End Sub Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound '// DataBind時にDropDownListの値を変更する場合 If e.Item.ItemType = ListItemType.AlternatingItem OrElse e.Item.ItemType = ListItemType.Item Then Dim val As String = CType(e.Item.FindControl("Literal1"), Literal).Text CType(e.Item.FindControl("DropDownList1"), DropDownList).Items.FindByValue(val).Selected = True End If End Sub Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click '// DataBind後にDropDownListの値を変更する場合 Dim itm As DataGridItem For Each itm In Me.DataGrid1.Items CType(itm.FindControl("DropDownList1"), DropDownList).SelectedIndex = -1 '選択値解除 CType(itm.FindControl("DropDownList1"), DropDownList).Items.FindByValue("1").Selected = True Next End Sub Private Function GetDataTable() As DataTable Dim dt As DataTable = New DataTable() Dim dr As DataRow Dim i As Integer dt.Columns.Add("初期値") For i = 0 To 3 dr = dt.NewRow dr.Item("初期値") = i.ToString dt.Rows.Add(dr) Next Return dt End Function ------------------------ ながっ...(^^; |