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

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

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

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

ASP.NET

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

Q&A

解決済

2回答

5907閲覧

asp.net "Yes/No" メッセージボックス 表示

Yamato-Suzuki

総合スコア18

C#

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

ASP.NET

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

0グッド

0クリップ

投稿2017/09/28 11:46

編集2017/09/29 02:46

ASP.NET WebForm C# にて Webアプリケーションを作成しています。

Windows アプリケーションのような メッセージボックスを作成しようとしているのですが、
どうもできそうで、うまくできない状況です。

内容としましては、

GridView 内 にある ButtonField(追加しました)をクリックし、
Yes / No メッセージボックスを表示し
Yes ならば、label に Yes
No ならば Label に No

としたいだけなのですが、うまくできない状況です。

windows formアプリのようにいかないことは理解させていただいております。
下記を参考に、Buttonコントロール時は何とか実現できたのですが、
http://www.atmarkit.co.jp/ait/articles/0304/18/news004.html

GridView ButtonField のボタンコントロールからの実現方法で行き詰まりました。
つまりは、
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Test")
{
の場合は、
private void Page_Load(object sender, System.EventArgs e)
{
Button1.Attributes["onclick"] = "return confirm('本当に移動しますか?');"; ←ここが不明

と悩んでいます。
他の方法でもあればよいのですが、現在、解決できていない状況です。
アドバイスをいただけますと光栄です。

OS:Windows10
IIS:Windows Server 2008 R2 IIS7
.NET:4.5
VS:Visual Studio 2013

お恥ずかしいことに、TemplateField + Button を使用したことがないので参考URLなどありましたら助かります。
(もう少しいろいろと勉強しないとクリアできないのかな?)

どうかよろしくお願いします。

(追加仕様)
実施したいことが不足しており申し訳ありません。
GridView には
・ID
・ボタン
が並んでおり ボタンを押した行のIDを取得し、
Yes ならば、label に ID + Yes
と記載しなければいけない仕様であり
int rowIndex = Convert.ToInt16(e.CommandArgument);
GridView gridView = (GridView)e.CommandSource;
GridViewRow row = gridView.Rows[rowIndex];
string equNo = row.Cells[0].Text;
とイベントには記載があるのですが、1行目でエラーとなりました。
ボタンを押した行のID(値)を取得する方法は別途ありますでしょうか。

何度もすいません。
どうかよろしくお願いします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2017/09/28 12:28

質問者さんが立てた過去スレッド 2 件が放置状態です。最後まできちんとフォローしてください。回答をもらっておきながら何も答えず放置するのはマナー的にいかがなものでしょう?
Yamato-Suzuki

2017/09/28 23:28

おはようございます。業務PCによる投稿のため、この時間からの回答で申し訳ありません。
guest

回答2

0

案件的にAJAXControlToolkitを使って構わなければModalPopupExtenderを使ってみては
GridViewのどのItemに対して処理するかは判っているはずなので、ModalPopupExtenderに[Yes][No]のボタンを置いておいてどちらのボタンが押されたかで振る舞い(該当するItemのLabelのTextを書き換えor大元のデータソースを書き換え)を変えるだけで済みそうです

AJAXControlToolkit
ModalPopupExtender

投稿2017/09/28 20:19

dojikko

総合スコア3939

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

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

Yamato-Suzuki

2017/09/28 23:37

お恥ずかしいことに、AJAXControlToolkit をインストールしたものの、 全然使用できずにいるところです。(ネット上のサンプルコードを入力しても動作しなかったりと、、、) ちょっと、この方法は敷居が高くまだ私ではよくわかっていない状況で申し訳ないです。
guest

0

ベストアンサー

サーバー側で起こることとクライアント側で起こることの区別がついてますか?

Windows Forms アプリの MessageBox のようなサーバー側で動くものは、Web アプリ(=ブラウザ上)では表示できませんが、そのあたりの理解はよろしいでしょうか?

同等なものをブラウザ上で表示するとすれば、JavaScript / jQuery などのクライアントサイドで動くスクリプトを使うしか方法はありません。

例えば alert とか confirm など。

上記のことを十分理解した上で、

GridView 内 にある ButtonField(追加しました)をクリックし、
Yes / No メッセージボックスを表示し
Yes ならば、label に Yes
No ならば Label に No

というところを、全体的なシナリオ・ストーリーを含めてどのようにできるかを考えてみてください。

その上で不明点があれば、全体的なシナリオ・ストーリーを含めて質問者さんのやりたいことを説明したうえで、疑問点を聞いてもらえれば、可能な限り回答します。

投稿2017/09/28 12:20

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Yamato-Suzuki

2017/09/29 00:11

回答ありがとうございます。 windows formアプリのようにいかないことは理解させていただいております。 下記を参考に、Buttonコントロール時は何とか実現できたのですが、 http://www.atmarkit.co.jp/ait/articles/0304/18/news004.html GridView ButtonField のボタンコントロールからの実現方法で行き詰まりました。 つまりは、 protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e) { if (e.CommandName == "Test") { の場合は、 private void Page_Load(object sender, System.EventArgs e) { Button1.Attributes["onclick"] = "return confirm('本当に移動しますか?');"; ←ここが不明 と悩んでいます。 他の方法でもあればよいのですが、現在、解決できていない状況です。 アドバイスをいただけますと光栄です。 夜には使用できないPCのため、この時間による返信ですいません。どうかよろしくお願いします。
退会済みユーザー

退会済みユーザー

2017/09/29 00:43 編集

上のコメントの情報は一番最初の質問に書いていただくようお願いします。情報の小出し(そのつもりはなかったかもしれませんが結果的にそうなっている)はこういうサイトでは NG です。 あと、開発環境(OS, IIS, .NET, VS のバージョンなど)を書いてください。特に .NET のバージョンが重要です。(参考にされている記事は Button に OnClientClick がなかった古いバージョンのものです) それから、ButtonField の使用は必須か、代わりに TemplateField + Button でも良いのかも書いてください。
Yamato-Suzuki

2017/09/29 01:12

失礼いたしました。一番最初の質問に記載しなおします。
退会済みユーザー

退会済みユーザー

2017/09/29 02:12

> .NET:4.5 ASP.NET 2.0 以降なら Button や LinkButton コントロールで OnClientClick プロパティが使えますので、それに直接スクリプトを設定できます。 > TemplateField + Button を使用したことがないので参考URLなどありましたら助かります。 Visual Studio のデザイン画面で、GridView に表示される > ボタンをクリック ⇒ 「GridView タスク」メニューで[列の編集...]をクリック ⇒「フィールド」ダイアログの「選択されたフィールド(S)」ウィンドウ内の当該 ButtonField をクリック ⇒[このフィールドを TemplateField に変換します。]をクリックで自動的に変換してくれます。 ButtonField でなく TemplateField + Button を使用する理由は OnClientClick プロパティに直接アクセスできるからです。 TemplateField に変換できたら、その中の Button を選択してプロパティウィンドウを開き、OnClientClick プロパティに以下のように設定すれば望む結果になるはずです。 return confirm('本当に移動しますか?'); 不明な点があれば聞いてください。
退会済みユーザー

退会済みユーザー

2017/09/29 03:17 編集

知らないうちに質問欄に追記されたようですが、そういうのはダメです。回答者が気付かないだけでなく、後で検索などでここを訪れた人にとって訳が分からなくなります。このサイトは、質問者さん専用の Q&A サイトではなく、know-how の蓄積も目的としているそうですので、後で訪れた人のことも考える必要があるはずですので。 まず、上の私のコメントに対して返答してください。上のコメントに従ってどこまで実装できたのかをきちんと書いてください。 その上で追加の質問があれば、コメント欄に書いてください。スペースの問題やコードを書きたいなどの理由で回答欄に書く場合は、そのことが分かるように(コメント欄に質問欄に記入する旨一言述べるなど)してください。
Yamato-Suzuki

2017/09/29 03:39

不慣れですいません。 >ButtonField でなく TemplateField + Button を使用する理由は OnClientClick プロパティに直接アクセスできるからです。 TemplateField に変換できたら、その中の Button を選択してプロパティウィンドウを開き、OnClientClick プロパティに以下のように設定すれば望む結果になるはずです。 return confirm('本当に移動しますか?'); →ここまでは完成できました。この後、上記に記載しました(追加仕様)を実施しましたところ、エラーで停止してしましました。 もし解決方法があれば、光栄です。 ※このような記載でよろしかったでしょうか?ご不備ありましたら、ご指摘ください。 よろしくお願いいたします。
退会済みユーザー

退会済みユーザー

2017/09/29 04:23 編集

GridView 内のボタンをクリックすると「本当に移動しますか?」というメッセージが表示され[OK][キャンセル]という 2 つのボタンが表示される。[OK]をクリックするとポストバックされる、[キャンセル]をクリックすると何も起こらない・・・というところまでは実装できたと理解します。 そして、追加仕様でやりたいことは、[OK]がクリックされたときは、ポストバックされたときにサーバー側で当該行のレコードの ID(何だか不明ですが)を取得し、Labal.Text に取得した ID の値を設定し、ブラウザに表示するということができればいいのですか? そして、[キャンセル]がクリックされたときは何もしないということでいいのですか? であれば、 > とイベントには記載があるのですが、1行目でエラーとなりました。 > ボタンを押した行のID(値)を取得する方法は別途ありますでしょうか。 の「イベント」とは何か、「ID」とは何かを具体的に、掲示板に書かれていること以外は知り得ない第三差に分かるように書いてください。(想像で答えて、その想像が間違っていると混乱を招くばかりですので)
Yamato-Suzuki

2017/09/29 05:10

ご回答ありがとうございます。 OK → ポストバックするため GridView1_RowCommand イベントが起動する キャンセル → 何も起こらない こと実装確認できました。ありがとうございます。 あとは、Labelに記載するのですが、 GridView には、それぞれ各行にユニークな番号(ID)が記載(データベースより表示)されておりますので、ボタンクリックした行の番号(ID)をよみ、Labelに表示したいところです。 GridViewのイメージとして ID101 ボタン ID102 ボタン ID103 ボタン ID104 ボタン ID105 ボタン となっており、ボタンを押した同じ行のIDを読み込み Labelに表示できればと思っています。 不慣れで説明不十分ご容赦ください。記載方法に不備がありましたら訂正します。 以上、よろしくお願いします。
退会済みユーザー

退会済みユーザー

2017/09/29 06:47

ButtonField でなく TemplateField + Button を使用すると Button の CommandArgument プロパティにも直接アクセスできるようになります。 なので、ID をデータベースから取得して GridView にデータバインドしているのであれば、データバインド式で ID の値を取得して CommandArgument に設定できます。 具体的には、ソース画面で見て、Button のプロパティに以下を追加します。 CommandArgument='<%# Eval("ID")%>' そうすれば、RowCommand イベントのハンドラで、(string)e.CommandArgument として ID の値の文字列が取得できると思います。お試しください。
Yamato-Suzuki

2017/09/29 07:41

できました。まさしく狙っていた動きであります。 とても感激です。本当にありがとうございます。 この後の記述など、ご不備がありましたら何なりとご指摘ください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問