質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

1回答

8451閲覧

GridView編集モード時の編集中テキスト参照方法

doremifa

総合スコア33

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

.NET Framework

.NET Framework は、Microsoft Windowsのオペレーティングシステムのために開発されたソフトウェア開発環境/実行環境です。多くのプログラミング言語をサポートしています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

1クリップ

投稿2016/11/24 13:00

編集2016/11/25 00:04

###前提・実現したいこと
GridView上のボタン押下で編集モードへ移行した後
別のボタン押下で編集中のテキストの値を参照したい
[手順]
1.ボタンB押下(対象行を編集モードへ移行)
2.BoundField の値を編集
3.ボタンC押下(ここで編集中のBoundField の値を確認したい※元の値はいらない)

###該当のソースコード

aspx

1<asp:GridView ID="GridView1" runat="server" OnRowCommand="GridView1_RowCommand"> 2 <Columns> 3 <asp:BoundField DataField="A" HeaderText="A"></asp:BoundField> 4 <asp:ButtonField Text="ボタン" CommandName="B"></asp:ButtonField> 5 <asp:ButtonField Text="ボタン" CommandName="C"></asp:ButtonField> 6 </Columns> 7 </asp:GridView>

C#

1protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) 2 { 3 int args = Int32.Parse((String)e.CommandArgument); 4 5 switch (e.CommandName) 6 { 7 //実績修正 8 case "B": 9 GridView1.EditIndex = args; 10 GridView1.bind(); 11 break; 12 case "C": 13 //ここで編集中のテキストを参照したい 14 break; 15 }

###試したこと
GridView1.Rows[args].Cells[n].Textでは参照できませんでした。

###補足情報(言語/FW/ツール等のバージョンなど)
ドットネットフレームワーク4.5.2
C#
webform

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/11/24 13:37

意味が分かりません。掲示板に書いてあること以外は回答者・閲覧者は何も知りえないということを理解されているでしょうか? そこをよく考えて、できればあなたの上司の方とも相談して、あなたの問題・課題が、ここに書いてあることを読んだだけで第三者にも理解できるように書き直していただけないですか?
doremifa

2016/11/25 00:47

追記しました。
退会済みユーザー

退会済みユーザー

2016/11/25 01:21

依然として意味が分かりません。お手数ですが、全体的なシナリオを含めた質問者さんのやりたいことを書いていただけませんか? 特にそのシナリオの中で「ここで編集中のBoundField の値を確認したい」がどういう意味を持つのかが知りたいです。
doremifa

2016/11/25 01:38 編集

局所的な情報だけしか記述しておらず申し訳ありません。端的に言えば更新処理の実装です。簡単なチェック処理後値に応じて複数テーブルを更新するという話なのですがボタン等を新たに実装できない(aspx側を修正できない)等の制約から今あるボタンに更新機能をもたせたいのです。(本当はCommandFieldボタンとかを置きたいのですが)そのため編集中モードになった際表示されるテキストボックスを指定して(readonlyでないBoundField は1つのみです)値を確認する方法を探しています。ご存じでしたら大変お手数ですがご教示願えませんでしょうか。
guest

回答1

0

ベストアンサー

ボタン 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; } } } }

投稿2016/11/25 02:57

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

doremifa

2016/11/25 04:11

ご教示ありがとうございます。 大変助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問