- - PR -
GridViewに配置したボタンにより別ウィンドウを開く(ASP,C#)
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-02-19 22:51
はじめて質問させて頂きます。
現在C#でWebアプリケーションを作成しています。 他のスレッドで「別ウィンドウを起動する」というものは一通り目を通したのですが、どうしてもうまく行かず困り果てています。 私の場合はGridViewに2つのボタンを配置しており、その片方をクリックすると新しいウィンドウが開くという事をやろうと思っています。 GridViewのRowCommandイベントで if (e.CommandName == "Button1") { GridView1.Attributes["OnClick"] = "window.open("XXX.aspx") } else { ・・・他の処理・・・ } としています。 こうすると、Button1を一度クリックしても何も起こらず、二回目のクリックでやっと新しいウィンドウが開きます。 また、その後にButton2をクリックするとButton2の処理を行うと同時になぜかXXX.aspxが開きます。 どうしたらよいか、またなぜこうなるのかが解る方がいらっしゃったら是非ご指導お願い致します。 この目的は、GridViewの列に対応したPDFファイルを開く事にあります。 もし、他のやり方があればそれも教えて頂けると幸いです。 | ||||
|
投稿日時: 2006-02-20 00:53
うまくいかないのは GridView 自体に属性を設定しているからですね。 言ってみれば Table 全体の属性を設定しているようなものです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-02-20 09:40
早速のご返答ありがとうございます。
私も↓の部分の書き方がよくないのでは?と思っていました。 GridView1.Attributes["OnClick"] ですが、該当ボタンのところが <asp:ButtonField ButtonType="Button" CommandName="Button1" Text="ボタン" /> となっており、ボタンに対して属性を設定する方法がわかりません。 引き続きご指導お願いできませんでしょうか? | ||||
|
投稿日時: 2006-02-20 10:07
GridViewにButtonを配置する代わりにHyperLinkField列を配置したらどうでしょうか。 ソースコードは下記から[View Code]ボタンをクリックしてください。 http://aspspider.net/AkioKasai/Goto.aspx?id=060220-1 _________________ ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集 | ||||
|
投稿日時: 2006-02-20 12:39
Access様ご指摘ありがとうございます。
この方法ですと、指定したHyperLinkField列のみで別ページに遷移するどころか、別ウィンドウでPDFを開けますね! ですが、 @Button又はImageButtonのどちらかでないといけない。 A可変行であるGridViewに表示されるPDFファイル名を取得する必要がある。 為、なかなかうまく行きません。 両方とも私の勉強不足で、HyperLinkFieldを使用しても対応取れるかもしれませんが。。 頭が痛い所です。。。 | ||||
|
投稿日時: 2006-02-20 19:43
どうしてもButtonコントロールにonclickイベントを追加したいなら FindControlメソッドでButtonコントロールを見つけてから AttributesコレクションののAddメソッドで追加してください。 そのほかに、 ButtonコントロールのOnClientClickプロパティに直接「window.open(...)」を 記述する方法もあります。 あと、TemplateField列を利用するとか・・・ _________________ ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集 | ||||
|
投稿日時: 2006-02-21 09:43
Access様、度々ありがとうございます。
早速試してみました。 ●FindControlメソッドでButtonコントロールを見つけてから AttributesコレクションののAddメソッドで追加してください。 →こちらの方は、書き方が解らない為勉強中です。。 ●TemplateField列を利用するとか・・・ →こちらの方法でやってみました。Button1をItemTemplateにして protected void Button1_Click(object sender, EventArgs e) { Button bt; bt = (Button)GridView1.Rows[i].Cells[1].FindControl("Button1"); bt.Attributes["OnClick"] = "window.open('xxx.aspx')"; } このように記述する事で新しいウィンドウが開きました! ですが、ItemTemplateを使用すると"Convert.ToInt32(e.CommandArgument)"でGridViewの選択した行が取得できません。。 GeidView1.SelectedIndexも常に"-1"になってしまいます。。 どのようにして選択した行を取得できるかご存知でしたらお教え願えませんでしょうか? | ||||
|
投稿日時: 2006-02-22 10:30
↓を参照してください。
http://aspspider.net/AkioKasai/Goto.aspx?id=060222-1 それからOnClickイベントを追加するならRowCommandではなく、DataBoundのイベントハンドラで追加します。OnClientClickを使うともっと楽にできるのでは? OnClientClick='window.open("xxx.aspx")' GridViewのイベントハンドラの発生順と利用目的を調査したらどうでしょうか。 _________________ ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集 |