DOBON.NET DOBON.NETプログラミング掲示板過去ログ

DataGrid内のDoropDownlistの情報を得るには?

環境/言語:[2003server vb.net net fram 2.0]
分類:[ASP.NET]

VBでDataGrid内のDoropDownlistの情報を得るには?どうやったらいいかわかりませんお願いします。
どこで取得しようとしているのかわからないのですが、以下の感じでとれると思います。

CType(e.Item.FindControl("DropdownList1"), DropDownList).SelectedValue
trapemiya 軍団さま、対応していただきありがとうございます。
説明不足で申し訳ありません。
「DataGrid内のテンプレート内のItem TemplateにDoropDownlistを入れてあります
DoropDownlistの番号を取得したいのですが」

A=(CType(DataGrid1.Items(i).Cells(3).FindContro("DropDownList2"),DropDownList)).value

でうまくいかないんです。
よろしくお願いします。
追記 iは縦列、3は左から4つめのセルです。
お世話になります。

■No15360に返信(たぬきさんの記事)
こちらは、C# ですが参考になると思います。
http://dobon.net/vb/bbs/log3-23/14011.html
■No15487に返信(なおこ(・∀・)さんの記事)
> お世話になります。
>
> ■No15360に返信(たぬきさんの記事)
> こちらは、C# ですが参考になると思います。
> http://dobon.net/vb/bbs/log3-23/14011.html
■No15485に返信(たぬきさんの記事)
> A=(CType(DataGrid1.Items(i).Cells(3).FindContro("DropDownList2"),DropDownList)).value

どのようなエラーが出てますか? valueというのは無いはずですが、SelectedValueの誤りではないでしょうか?
また、この文を実行するイベントはどこでしょうか? Page_Loadですと、まだDataGridが作成されていないため、エラーになると思います。
お世話になります。

あー ...orz
ASP.NET でしたね。失礼しました。
お世話になります。
「SelectedValue」にしてみたのですが、
実行時、オブジェクト参照がオブジェクトインスタンスに設定されていません。
というエラーです
よろしくお願いします。
お世話になります。

■No15499に返信(たぬきさんの記事)
↓こちらを VB にしてみました。参考になるでしょうか。
http://www.atmarkit.co.jp/fdotnet/dotnettips/090dropdowndg/dropdowndg.html

◆aspx
<body MS_POSITIONING="GridLayout">
  <form id="Form1" method="post" runat="server">
    <asp:Label id="Label1" style="Z-INDEX: 100; LEFT: 264px; POSITION: absolute; TOP: 48px" runat="server"
      Width="120px">Label</asp:Label>
    <asp:Label id="Label2" style="Z-INDEX: 101; LEFT: 264px; POSITION: absolute; TOP: 80px" runat="server"
      Width="120px">Label</asp:Label>
    <asp:DataGrid id="MyGrid" OnEditCommand="MyGrid_Edit" OnUpdateCommand="MyGrid_Update" OnCancelCommand="MyGrid_Cancel"
      AutoGenerateColumns="false" CellPadding="4" runat="server">
      <HeaderStyle BackColor="#5522BB" ForeColor="white"></HeaderStyle>
      <Columns>
        <asp:TemplateColumn>
          <ItemTemplate>
            <%# Container.DataItem %>
          </ItemTemplate>
          <EditItemTemplate>
            <asp:DropDownList ID="MyList" Width="100%" runat="server"></asp:DropDownList>
          </EditItemTemplate>
        </asp:TemplateColumn>
        <asp:EditCommandColumn EditText="編集" CancelText="中止" UpdateText="更新" ButtonType="PushButton" HeaderText="編集用ボタン"></asp:EditCommandColumn>
      </Columns>
    </asp:DataGrid>
  </form>
</body>


◆aspx.vb
  Private m_source As String()
Private m_listItems As String()() = _
             {New String() {"One", "un", "eins"}, _
             New String() {"Two", "deux", "zwei"}, _
             New String() {"Three", "trois", "drei"}, _
             New String() {"four", "quatre", "vier"}, _
             New String() {"five", "cinq", "funf"} _
             }

Private Sub BindMyGrid()
  Me.MyGrid.DataSource = Me.m_source
  Me.MyGrid.DataBind()
End Sub

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  ' ページを初期化するユーザー コードをここに挿入します。
  If Not IsPostBack Then
    ReDim Me.m_source(Me.m_listItems.Length)
    For i As Integer = 0 To Me.m_listItems.Length - 1
      Me.m_source(i) = Me.m_listItems(i)(0)
    Next
    Session("source") = Me.m_source
    Me.BindMyGrid()
  Else
    Me.m_source = DirectCast(Session("source"), String())
  End If
End Sub

Protected Sub MyGrid_Edit(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
  Me.MyGrid.EditItemIndex = e.Item.ItemIndex
  Me.BindMyGrid()
  Dim index As Integer = e.Item.ItemIndex
  Dim item As DataGridItem = MyGrid.Items(index)
  Dim myList As DropDownList = DirectCast(item.FindControl("MyList"), DropDownList)

  For Each s As String In Me.m_listItems(index)
    myList.Items.Add(s)
  Next
  myList.SelectedValue = Me.m_source(index)
End Sub

Protected Sub MyGrid_Update(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
  Dim myList As DropDownList = DirectCast(e.Item.FindControl("MyList"), DropDownList)
  Me.m_source(e.Item.ItemIndex) = myList.SelectedValue

  Me.MyGrid.EditItemIndex = -1
  Me.BindMyGrid()

  Me.Label1.Text = e.Item.ItemIndex.ToString() 'Index
  Me.Label2.Text = myList.SelectedValue.ToString() '選択された値
End Sub

Protected Sub MyGrid_Cancel(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)
  Me.MyGrid.EditItemIndex = -1
  Me.BindMyGrid()
End Sub
■No15499に返信(たぬきさんの記事)
> 実行時、オブジェクト参照がオブジェクトインスタンスに設定されていません。
> というエラーです

FindControl("DropDownList2")

で、DropDownList2というIDのコントロールが見つからないということだと思いますが、本当にこの名前ですか? あとは、本当に4列目ですか?
確かめてみて合っていれば、デバッグ実行で止めて、イミディエイトウインドウで
DataGrid1.Items(2).Cells(3).FindControl("DropDownList2")
とか、適当に打ってみて、DropDownList2が見つかるかどうか調べてみて下さい。
皆さん大変ありがとうございました

trapemiya 軍団さま
なおこ(・∀・)さま
一般人さま
無事解決しました。
---------------解決-----------------------
A=(CType(DataGrid1.Items(i).Cells(3).FindContro("DropDownList2"),DropDownList)).Selectedindex
---------------問題点-----------------------
「DataGrid1」ではなく「2」また
「.value」でなく「.Selectedindex」
でした、ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板