none
GridViewでTemplateFieldの値の取得について RRS feed

  • 質問

  • お世話になります。。
    GridViewでCheckBoxにチェックを入れた項目の取得をしたいのですが、TemplateFieldの値はどのように取得するのでしょうか?
    BoundFieldの値は「GridView1.Rows(I).Cells(1).Text」で取得出来ましたが、TemplateFieldのTextBoxに入力した値を取得したいのですがどのような記述をすれば良いのか分かりません。
    よろしく、ご教授願います。

    <%@ Page Language="VB" %>

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~

    <asp:BoundField DataField="項目1" HeaderText="項目1" SortExpression="項目1" />
    <asp:TemplateField HeaderText="項目2">
       <ItemTemplate>
       <asp:TextBox ID="TextBox1" runat="server"  Width="50px"></asp:TextBox> ← 入力する項目
       </ItemTemplate>
    </asp:TemplateField>

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Dim I As Integer
    For I = 0 To GridView1.Rows.Count - 1
       If CType(GridView1.Rows(I).Cells(1).Controls(1), CheckBox).Checked Then
         TextBox1.Text += GridView1.Rows(I).Cells(1).Text  ← 項目1は取得出来る。
          TextBox2.Text += GridView1.Rows(I).Cells(2).Text  ← 項目2は取得出来ない。
       End If
    Next

    2006年6月9日 3:35

すべての返信

  • GridView1.Rows(I).FindControl("テキストボックスのID").Text

    でいいと思います。ループは以下のようにしてもいいと思います。

    For Each row As GridViewRow In GridView1.Rows 
    
    Next
    2006年6月9日 3:58
    モデレータ
  •  trapemiya さん、ありがとう御座います。。

    ↓このように記述したのですが

     GridView1.Rows(I).FindControl("TextBox1").Text

    「'Text'は'system.web.UIcontril'のメンバではありません」と言うエラーになってしまいます。
    Buttonクリック時に取得するように記述しているのですが何がいけないのでしょうか??

    また、教えていただいたループ方法ですが、この場合「Dim I As Integer」の「I」の値は自前でカウントしないといけませんよね?

    素人な質問で申し訳ありませんが、よろしくお願いいたします。

    2006年6月9日 4:31
  • GridView1.Rows(I).FindControl("TextBox1") をTextBoxにキャストした上でTextプロパティの値を取り出す必要があると思います。

    > また、教えていただいたループ方法ですが、この場合「Dim I As Integer」の「I」の値は自前でカウントしないといけませんよね?

    GrieViewRowのコレクションからGridViewRowオブジェクトをひとつづつとりだしているので、

     row.FindControl("TextBox1")

    とするだけで大丈夫ですね。
    行番号は必要ありません。

    2006年6月9日 5:11
  • どっとねっとふぁん さん、ありがとう御座います。

     以下のような記述で無事、取得する事が出来ました。。

    TextBox5.Text += CType(GridView1.Rows(I).FindControl("TextBox1"), TextBox).Text

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    For Each row As GridViewRow In GridView1.Rows
        If CType(row.FindControl("CheckBox1"), CheckBox).Checked Then
           TextBox5.Text += CType(row.FindControl("TextBox1"), TextBox).Text
        End If
    Next

    これで先に進む事ができます!

    ありがとう御座いました。。

     

    2006年6月9日 5:44