1

Default.aspx という名前の asp.net ページがあり、そのマスター ページは Site.master です。Default.aspx で、3 つのデータバインド フィールドと 1 つの Templatefield を含むグリッドビューを追加し、この templatefield 内に TextBox をドラッグしました。

画像テンプレートフィールド エディタ

FindControl メソッドを使用して、このグリッドビューの各行のテキスト ボックスの値を取得しようとしていますが、何も返されません。

これらの値を取得するために使用しているコードは次のとおりです。

For Each gvr As GridViewRow In GridView1.Rows

        Dim tb As TextBox = DirectCast(gvr.FindControl("TextBox1"), TextBox)
        Dim txt As String = tb.Text
        MsgBox(txt)

    Next

注: masterPages を使用していますが、これが問題の原因であると考えています。

[編集]

Page_load イベントでは、グリッドビューをバインドするために、次のコードを使用しています。

        GridView1.DataSource = f.xDa
        GridView1.DataBind()

Button1 に、次のコードを追加しました。

For Each gvr As GridViewRow In GridView1.Rows

        Dim tb As TextBox = DirectCast(gvr.FindControl("TextBox1"), TextBox)
        Dim txt As String = tb.Text
        MsgBox(txt)

    Next

しかし、私は常に空のテキストボックスを取得しています。

みんなありがとう!

4

2 に答える 2

0

同様の問題がありましたが、グリッドビューが Page_Load でレンダリングされなかったため、使用していた SQL データセットがまだ宣言されていないため、「If Not IsPostBack」バインディングを Page_Load に追加できませんでした。

Page_Load グリッドビュー データバインディングを使用できない場合は、FindControl を使用してテキスト ボックスを名前で呼び出す代わりに、次のような方法を試してください。

For Each gvr As GridViewRow In GridView1.Rows

    Dim txt As String = CType(gvr.Cells(0).Controls(0), TextBox).Text
    MsgBox(txt)

Next

Cells(0) の (0) は、アクセスしようとしているグリッドビューの列番号です。たとえば、「TextBox1」が 1 列目の場合は Cells(0) を使用し、2 列目の場合は Cells(1) を使用します。これにより、Page_Load にセクションを追加しなくても、テキスト ボックス内のテキストを取得できます。

于 2015-08-19T23:07:09.193 に答える