- PR -

DataGridのDropDownListについて

投稿者投稿内容
hana
ベテラン
会議室デビュー日: 2003/02/08
投稿数: 70
投稿日時: 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を選択状態にする
ということです。)
過去ログや色々なサイトを調べたのですが、
いまいちよく分かりませんでした。

どなたかご教授お願いします。
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2004-12-16 22:42
FindByValueでデフォルトのアイテムを選択します。

詳しくは、グーグルから「ASP.NET DropDownList FindByValue」のキーワードで
検索してください。


_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
SE卵
大ベテラン
会議室デビュー日: 2004/10/22
投稿数: 135
投稿日時: 2004-12-17 10:06
こんにちは。下記に簡単なサンプルを書いています。

コード:

Dim getData As Integer = 1
Dim DropDownList1 As DropDownList

DropDownList1 = CType(DataGrid1.Items(行番号).FindControl("DropDownList名"), DropDownList)

For i = 0 To (DropDownList1.Items.Count - 1)
If (DropDownList1.Items(i).Value = getData ) Then
DropDownList1.SelectedIndex = i
Exit For
End If
Next



[ メッセージ編集済み 編集者: SE卵 編集日時 2004-12-17 10:13 ]
yyy
常連さん
会議室デビュー日: 2004/01/27
投稿数: 33
投稿日時: 2004-12-17 10:33
FindByValueを利用したものは、DataGridのItemDataBoundイベントのところで、

DropDownList1.SelectedIndex
= DropDownList1.Items.IndexOf(DropDownList1.Items.FindByValue("取得したデータ"))

でいけます。

[ メッセージ編集済み 編集者: yyy 編集日時 2004-12-17 10:36 ]
hana
ベテラン
会議室デビュー日: 2003/02/08
投稿数: 70
投稿日時: 2004-12-17 11:51
みなさん、ご返答ありがとうございます。

yyyさんに質問なのですが、
ItemDataBoundイベントを使用するということは
データをDataGridにバインドしたときということですよね?

データグリッド.DataSource = 取得したデータセット
データグリッド.DataBind()

私は上記のような処理でデータグリッドにデータセットを
バインドしています。

yyyさんから頂いた返答の中に
「("取得したデータ")」という記述がありましたが、
この場合、データセットをもう一度取得し直し、
("取得したデータ")のところに、
そのデータの参照先を記述するのでしょうか。

初歩的な質問で大変申し訳ありませんが、
ご教授いただけるとありがたいです。
よろしくお願いします。
ItemDataBoundイベ
yyy
常連さん
会議室デビュー日: 2004/01/27
投稿数: 33
投稿日時: 2004-12-17 13:25
こちらの勝手な思い込みで記載してしまったのですが、DataGridに当初、データはテキスト表示されており、「編集」ボタン等をクリックした時点で、DropDownListが表示され、テキスト表示されていた項目が選択されているケースを想定してしまい、
ItemDataBoundイベントでDropDownListのアイテムを作成するケースを書き込ませていただいたのですが...
そういうケースでなければ、ロジックをItemDataBoundに記載する必要はありません。

[ メッセージ編集済み 編集者: yyy 編集日時 2004-12-17 13:26 ]
hana
ベテラン
会議室デビュー日: 2003/02/08
投稿数: 70
投稿日時: 2004-12-17 13:35
yyyさん、返信ありがとうございます。

私の説明不足でした。
すみません。。。

SQLのビューを一つ作成をし、
それをSELECTしたものでデータセットを作成し、
それをDataGridにバインドしています。
(Page_loadイベントで行なっています)
他の列は全てテキストボックスですが、
ひとつの列だけ、DropDownListにし、
(DropDownListにはあらかじめtextとvalueは入っています。)
SELECTしたある列の値と、DropDownListのvalue値が
同じでしたら、そのtextをあらかじめ、
DropDownListで選択した状態にし表示したいのです。

このような場合、バインドした後に、
もう一度、DropDownListに値をセットするために、
どのような記述をすればいいのでしょうか。

何度も申し訳ありません。
どうかご教授お願いします。


えんぞ@?
ぬし
会議室デビュー日: 2004/07/06
投稿数: 271
お住まい・勤務地: はまっこ
投稿日時: 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
------------------------
ながっ...(^^;

スキルアップ/キャリアアップ(JOB@IT)