質問: args; GridView1.bind(); break; case "C": //ここで編集中のテキストを参照したい break; } ``` ### 試したこと GridView1.Rows[args].Cells[n].Textでは参照できませんでした。 ### 補足情報(言語/FW/ツール等のバージョンなど) ドットネットフレームワーク4.5.2 C# webform
回答: ボタン C クリックでユーザー入力を検証した後の処置はどうするのかとか、ボタン B をクリックする(GridView の当該行を編集モードにする)前にボタン C をクリックされてたら困るのではとか、いろいろ疑問はありますが、とりあえずそれは置いといて・・・ 質問者さんは質問に書いてある .aspx ファイルのコードには一切手を出せないが .aspx.cs ファイルのコードは自由に変更できるという条件で、編集モードになった行のボタン C をクリックしたらポストバックし、その行の BoundField から生成されたテキストボックス(テキストボックスは行に一つだけ)のユーザー入力を取得するということでいいのですね? であれば、 > > GridView1.Rows[args].Cells[n].Textでは参照できませんでした。 > > > とするのではなくて、(1) GridView1.Rows[args].Cells[n].Controls で当該行・セルの中の Control のコレクションを取得、(2) 編集モードであればその中に TextBox コントロールがあるはずなのでそれを探す、(3) 探し出した TextBox の Text プロパティからユーザー入力を取得できると思います。 質問者さんのコードとは少し違いますが、当方では以下のコードで text にユーザー入力が取得できることを確認しています。(以下のコード例では Cells[2] が TextBox のあるセルです) ``` protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName == "C") { int index = Convert.ToInt32(e.CommandArgument); GridViewRow row = GridView1.Rows[index]; ControlCollection controls = row.Cells[2].Controls; foreach (Control control in controls) { if (control is TextBox) { string text = ((TextBox)control).Text; break; } } } } ```