- PR -

GridViewに配置したボタンにより別ウィンドウを開く(ASP,C#)

投稿者投稿内容
Gottu
会議室デビュー日: 2006/02/19
投稿数: 12
投稿日時: 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ファイルを開く事にあります。
もし、他のやり方があればそれも教えて頂けると幸いです。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-02-20 00:53
引用:

Gottuさんの書き込み (2006-02-19 22:51) より:

GridView1.Attributes["OnClick"] = "window.open("XXX.aspx")


うまくいかないのは GridView 自体に属性を設定しているからですね。
言ってみれば Table 全体の属性を設定しているようなものです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Gottu
会議室デビュー日: 2006/02/19
投稿数: 12
投稿日時: 2006-02-20 09:40
早速のご返答ありがとうございます。
私も↓の部分の書き方がよくないのでは?と思っていました。
 
 GridView1.Attributes["OnClick"]

ですが、該当ボタンのところが

 <asp:ButtonField ButtonType="Button" CommandName="Button1" Text="ボタン" />

となっており、ボタンに対して属性を設定する方法がわかりません。
引き続きご指導お願いできませんでしょうか?

Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2006-02-20 10:07
引用:

<asp:ButtonField ButtonType="Button" CommandName="Button1" Text="ボタン" />
となっており、ボタンに対して属性を設定する方法がわかりません。
引き続きご指導お願いできませんでしょうか?


GridViewにButtonを配置する代わりにHyperLinkField列を配置したらどうでしょうか。

ソースコードは下記から[View Code]ボタンをクリックしてください。
http://aspspider.net/AkioKasai/Goto.aspx?id=060220-1
_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
Gottu
会議室デビュー日: 2006/02/19
投稿数: 12
投稿日時: 2006-02-20 12:39
Access様ご指摘ありがとうございます。
この方法ですと、指定したHyperLinkField列のみで別ページに遷移するどころか、別ウィンドウでPDFを開けますね!

ですが、
@Button又はImageButtonのどちらかでないといけない。
A可変行であるGridViewに表示されるPDFファイル名を取得する必要がある。
為、なかなかうまく行きません。
両方とも私の勉強不足で、HyperLinkFieldを使用しても対応取れるかもしれませんが。。
頭が痛い所です。。。
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2006-02-20 19:43
引用:

GridView1.Attributes["OnClick"] = "window.open("XXX.aspx")


どうしてもButtonコントロールにonclickイベントを追加したいなら
FindControlメソッドでButtonコントロールを見つけてから
AttributesコレクションののAddメソッドで追加してください。

そのほかに、
ButtonコントロールのOnClientClickプロパティに直接「window.open(...)」を
記述する方法もあります。

あと、TemplateField列を利用するとか・・・



_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
Gottu
会議室デビュー日: 2006/02/19
投稿数: 12
投稿日時: 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"になってしまいます。。

どのようにして選択した行を取得できるかご存知でしたらお教え願えませんでしょうか?
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 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サンプル集

スキルアップ/キャリアアップ(JOB@IT)