C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[8]: 確認ダイアログ


(過去ログ 21 を表示中)

[トピック内 12 記事 (1 - 12 表示)]  << 0 >>

■9132 / inTopicNo.1)  確認ダイアログ
  
□投稿者/ 松田 (10回)-(2007/10/19(Fri) 15:46:40)

分類:[ASP.NET (VB)] 

お世話になっております。

ボタンを押された時のワンクッションとして確認ダイアログを出す場合

Page_Loadイベントに
Button1.OnClientClick = "return confirm('実行しますか?');";

でいけることは分かったのですが
gridview内の「削除」ボタンの場合はどのように変わるのでしょうか?


引用返信 編集キー/
■9138 / inTopicNo.2)  Re[1]: 確認ダイアログ
□投稿者/ いしだ (46回)-(2007/10/19(Fri) 16:46:39)
GridViewのRowDataBoundイベントで削除ボタンを取得し、
Scriptを設定すればいけるんじゃないでしょうか。

例)GridView1の先頭に削除ボタンを1つ配置

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowIndex >= 0)
{
Button btn = (Button)e.Row.Cells[0].Controls[0];
btn.Attributes["OnClick"] = "return confirm('実行しますか?')";
}
}

引用返信 編集キー/
■9141 / inTopicNo.3)  Re[2]: 確認ダイアログ
□投稿者/ 松田 (11回)-(2007/10/19(Fri) 17:23:17)
いしだ 様

ありがとうございます。
この場合はRowDataBoundイベントになるのですね。
Cは分からないのですが、なんとなくカタチとしては理解できた気がします。

しかし削除ボタンを取得する部分がまだ分かりません。

gridviewの中身は10列目のセルに「編集」と「削除」の2つのボタンがあるのですが
こういう場合はCommandNameなどから区別するのでしょうか?


引用返信 編集キー/
■9144 / inTopicNo.4)  Re[3]: 確認ダイアログ
□投稿者/ いしだ (48回)-(2007/10/19(Fri) 17:32:05)
あっ、失礼しました。VBでしたね。

Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
    If e.Row.RowIndex >= 0 Then
        Dim btn As Button = DirectCast(e.Row.Cells(9).Controls(2), Button)
        btn.Attributes("OnClick") = "return confirm('実行しますか?')"
    End If
End Sub

こんな感じになるんですかね。
Controls(2)の部分で、2で駄目なら1とか3とか変えてみて試してみてください。

※ 総当たり的なやり方ですが。。。

引用返信 編集キー/
■9177 / inTopicNo.5)  Re[4]: 確認ダイアログ
□投稿者/ Coca (2回)-(2007/10/20(Sat) 12:11:30)
GridViewの削除ボタンをTemplateFieldに配置して、
ボタンのプロパティに確認ダイアログの処理を直接記述で行けると思います。

確認出来る環境じゃないので曖昧ですいません。
引用返信 編集キー/
■9182 / inTopicNo.6)  Re[5]: 確認ダイアログ
□投稿者/ いしだ (50回)-(2007/10/20(Sat) 13:18:26)
2007/10/20(Sat) 13:20:17 編集(投稿者)

> GridViewの削除ボタンをTemplateFieldに配置して、
> ボタンのプロパティに確認ダイアログの処理を直接記述で行けると思います。

CommandFieldの削除ボタンで確認ダイアログを出したいんじゃないかと想像してますが、どうでしょうね。
引用返信 編集キー/
■9217 / inTopicNo.7)  Re[6]: 確認ダイアログ
□投稿者/ 松田 (12回)-(2007/10/22(Mon) 12:18:31)
2007/10/22(Mon) 13:47:39 編集(投稿者)

Coca様

言葉が足りなくて申し訳ありません
可能であればTemplateFieldに配置せずに行いたいと思い質問させていただきました。

ご返答ありがとうございました。

引用返信 編集キー/
■9218 / inTopicNo.8)  Re[6]: 確認ダイアログ
□投稿者/ 松田 (13回)-(2007/10/22(Mon) 12:22:03)
いしだ様

私の意図まで汲んでもらってありがとうございます。
TemplateFieldでないと不可能かと半ば諦めかけていたので助かります。
Cellsを(10)にすると教えていただいた方法で確認ダイアログが出ました。

しかし同時にまた別の問題が発生しました。

削除ボタンを押した場合
・確認ダイアログのOKを押しても何も起こらない(削除されなくなってしまった)
編集ボタンを押した場合
・更新は可能だが、キャンセルを押すと確認ダイアログが出てしまう
・OKを押してもキャンセルが出来ない

e.Row.Cells(10).Controls(2)は普通の状態では削除ボタンを、
編集ボタン押下時にはキャンセルを指してしまうような感じになってしまっています。

引用返信 編集キー/
■9224 / inTopicNo.9)  Re[7]: 確認ダイアログ
□投稿者/ いしだ (51回)-(2007/10/22(Mon) 13:46:55)
2007/10/22(Mon) 15:14:36 編集(投稿者)
Cells(10)でうまくいったという事は、CommandFieldは11番目の列だったわけですね?

> 削除ボタンを押した場合
> ・確認ダイアログのOKを押しても何も起こらない(削除されなくなってしまった)
これは、確認ダイアログを表示しない時は、削除されたのでしょうか?

> ・更新は可能だが、キャンセルを押すと確認ダイアログが出てしまう
これは、DataBoundのイベントのたびにCommandFieldの3つ目のControlに対して処理
をしてしまうためです。
編集モードの時には、設定しないようにすれば良いでしょう(以下ソース参照)。

If e.Row.RowIndex >= 0 AndAlso GridView1.EditIndex <> e.Row.RowIndex Then
  Dim btn As Button = DirectCast(e.Row.Cells(10).Controls(2), Button)
  btn.Attributes("OnClick") = "return confirm('実行しますか?')"
End If

引用返信 編集キー/
■9227 / inTopicNo.10)  Re[8]: 確認ダイアログ
□投稿者/ 松田 (14回)-(2007/10/22(Mon) 14:12:54)
いしだ 様

> Cells(10)でうまくいったという事は、CommandFieldは11番目の列だったわけですね?

その通りです。
こちらのミスで申し訳ありません

>>削除ボタンを押した場合
>>・確認ダイアログのOKを押しても何も起こらない(削除されなくなってしまった)
> これは、確認ダイアログを表示しない時は、削除されたのでしょうか?

はい、以前は削除ボタン押下で問答無用に削除されていました

>>・更新は可能だが、キャンセルを押すと確認ダイアログが出てしまう
> これは、DataBoundのイベントのたびにCommandFieldの3つ目のControlに対して処理
> をしてしまうためです。
> 編集モードの時には、設定しないようにすれば良いでしょう(以下ソース参照)。

なるほど流れがよく分かりました
これで確認すると、平常時と編集時との区別が出来ていました。
自分では出てこなかったコードなので助かりました、ありがとうございました。

あとは削除が実行できれば問題無いのですが・・・

引用返信 編集キー/
■9230 / inTopicNo.11)  Re[8]: 確認ダイアログ
□投稿者/ いしだ (53回)-(2007/10/22(Mon) 14:20:35)
2007/10/22(Mon) 14:44:44 編集(投稿者)
調べてみたところ、CommandFieldの削除ボタンで確認ダイアログを出すのは難しいようです。
すいません。編集しかやった事なかったので。。。
で、やはりTemplateFieldで以下のようにやり、CommandNameにDeleteを指定する方法なら可能ですね。

<asp:TemplateField>
  <ItemTemplate>
    <asp:Button ID="Button1" Runat="server" Text="編集" CommandName="Edit" />
    <asp:Button ID="Button2" Runat="server" Text="削除" OnClientClick="return confirm('削除しますか?');" CommandName="Delete" />
  </ItemTemplate>
  <EditItemTemplate>
    <asp:Button ID="Button3" Runat="server" Text="更新" CommandName="Update"/>
    <asp:Button ID="Button4" Runat="server" Text="キャンセル" CommandName="Cancel"/>
  </EditItemTemplate>
</asp:TemplateField>

Cocaさんの言うとおりだったという事で。。。

正確に言えば、編集だから出来たのではなく、RowUpdatingイベントを指定していたからでした。
なので、削除でもRowDeletingを指定するばCommandFieldでもいけるんじゃないかと思います。
しかし、TemplateFieldでやるのが簡単でしょうね。

引用返信 編集キー/
■9233 / inTopicNo.12)  Re[9]: 確認ダイアログ
□投稿者/ 松田 (15回)-(2007/10/22(Mon) 14:52:56)
いしだ 様

何から何までありがとうございます。

「CommandFieldでも不可能ではない」というところでしょうか
確かにTemplateFieldなら素直に出来るようですし、
今後はそちらでやってみたいと思います。

ありがとうございました。


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -