• ベストアンサー

GridView リンク

VS2005 ASP.NET GridViewの検索結果で、 検索結果のひとつの部分がリンクになっていて (例:名前) それをクリックすると 別ページに飛んで 更にそのページのサイズを指定したり ツールバーなどをなしにする設定はどうしたらいいのでしょうか? わかりにくい説明で大変申し訳御座いませんが 宜しくお願い致します。

  • aki05
  • お礼率39% (9/23)

質問者が選んだベストアンサー

  • ベストアンサー
  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.2

下記の続編です。 ページサイズやツールバーをなしにするのであれば、 Window.OpenのJavaScriptを埋め込んで遷移させたりもできます。 下記のソースの改変版になりますが、ご参考になれば幸いです。 Partial Class _Default   Inherits System.Web.UI.Page   Protected Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) _                    Handles GridView1.RowCreated     ' データ行以外の場合     If Not e.Row.RowType = DataControlRowType.DataRow Then       Exit Sub     End If     ' Linkボタンに行番号引数を付与     Dim row As GridViewRow = e.Row     Dim linkButton As LinkButton = CType(row.Cells(0).FindControl("LinkButton1"), LinkButton)     linkButton.CommandArgument = e.Row.RowIndex     ' LinkボタンにJavaScriptを埋め込み     Dim scriptSource As String     scriptSource = "javascript:window.open('NextPage.aspx', 'newWindow', 'width=300, height=300, menubar=no, toolbar=no, scrollbars=yes');"     linkButton.OnClientClick = scriptSource   End Sub   Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) _                     Handles GridView1.RowCommand     Dim grid As GridView = TryCast(sender, GridView)     If grid Is Nothing Then       Exit Sub     End If     If e.CommandName = "NextPage" Then       Dim index As Integer = Convert.ToInt32(e.CommandArgument)       Context.Session("Clickされた行") = e.CommandArgument       Context.Session("項目1") = CType(grid.Rows(index).FindControl("Column1"), Label).Text       Context.Session("項目2") = CType(grid.Rows(index).FindControl("Column2"), Label).Text     End If   End Sub End Class

その他の回答 (2)

  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.3

HyperLinkだと、どの行でClickされたか判別できる引数を 付与するのが難しいのと、JavaScriptの埋め込みが思うように できません。 今回の要件にあった次画面で開くWindowはResizeしたり、メニューバーやツールバーを消すのであれば、Window.OpenのJavaScriptの埋め込みが欠かせなくなります。 FireFoxとかであれば、開かれたWindow側のJavaScriptを使い メニューバー・ツールバーの制御ができるのですが、 IEだとWindow.Openを使うしか方法がありません。 そのため、LinkButtonの方が、JavaScriptの埋め込みも容易で、 ボタンに行番号等の引数(CommandArgument)も付与できるので、 便利かなと思った次第です。 ご参考になれば、嬉しいです。

aki05
質問者

お礼

ご回答有難う御座います。 なるほど・・・ もう少しkero_mioさんのご回答くださったものを 参考にして 頑張ってみます!

  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.1

こんなので如何でしょうか?GridViewまわりだけですが... ■Default.aspx <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:testConnectionString %>" SelectCommand="SELECT [CategoryId] AS '項目1', [CategoryName] AS '項目2' FROM [Category]"> </asp:SqlDataSource> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="項目1" DataSourceID="SqlDataSource1">  <Columns>   <asp:TemplateField>    <ItemTemplate>     <asp:LinkButton ID="LinkButton1" runat="server" CommandName="NextPage">名前</asp:LinkButton>    </ItemTemplate>   </asp:TemplateField>   <asp:TemplateField>    <ItemTemplate>     <asp:Label ID="Column1" runat="server" Text='<%# Eval("項目1") %>'></asp:Label>    </ItemTemplate>   </asp:TemplateField>   <asp:TemplateField>    <ItemTemplate>     <asp:Label ID="Column2" runat="server" Text='<%# Eval("項目2") %>'></asp:Label>    </ItemTemplate>   </asp:TemplateField>  </Columns> </asp:GridView> ■Default.aspx.vb Partial Class _Default   Inherits System.Web.UI.Page   ' リンクボタンの引数設定   Protected Sub GridView1_RowCreated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) _                  Handles GridView1.RowCreated     ' データ行以外の場合     If Not e.Row.RowType = DataControlRowType.DataRow Then       Exit Sub     End If     ' Linkボタンに行番号引数を付与     Dim row As GridViewRow = e.Row     Dim linkButton As LinkButton = CType(row.Cells(0).FindControl("LinkButton1"), LinkButton)     linkButton.CommandArgument = e.Row.RowIndex   End Sub   ' リンクボタンClick時、画面遷移   Protected Sub GridView1_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) _                    Handles GridView1.RowCommand     Dim grid As GridView = TryCast(sender, GridView)     If grid Is Nothing Then       Exit Sub     End If     If e.CommandName = "NextPage" Then     Dim index As Integer = Convert.ToInt32(e.CommandArgument)       Context.Session("Clickされた行") = e.CommandArgument       Context.Session("項目1") = CType(grid.Rows(index).FindControl("Column1"), Label).Text       Context.Session("項目2") = CType(grid.Rows(index).FindControl("Column2"), Label).Text       Context.Response.Redirect("./NextPage.aspx")     End If   End Sub End Class ' NextPage.aspx.vb Partial Class NextPage   Inherits System.Web.UI.Page   Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load     Context.Response.Write(Context.Session("Clickされた行"))     Context.Response.Write("<br>")     Context.Response.Write(Context.Session("項目1"))     Context.Response.Write("<br>")     Context.Response.Write(Context.Session("項目2"))   End Sub End Class ポイント ・Default.aspx にGridの一覧 ・NextPageが遷移先のページ ・Grid内の「LinkButton」には"NextPage"等任意の名前をつける ・GridView1_RowCommandイベントのe.CommandName で、どの種類のボタンが押されたか判断する  (どの行が押されたかについても、RowCreatedイベントで、LinkButtonのCommandArgumentに紐付ければ  RowCommandイベント で取得可能) ・押された行の表示値や入力値を取得したい場合は、RowCommandで取得可能 ・今回はSessionで値を保存しましたが、あとは、Response.Redirect でも、PostBackUrlメソッドでも遷移可能

aki05
質問者

補足

ご回答有難う御座います。 リンク方法ですが リンクボタンではなく HyperLinkで指定しているのですが リンクボタンでないと出来ないでしょうか?

関連するQ&A

  • GridViewのボタンの高さ

    vb.net(vs2005) asp.net GridViewのボタン(buttonfield)の高さを変えられないでしょうか。 ×リンク(文字列に変更し、フォントサイズを小さくする。) ×テンプレート列 以外でお願いします。 つまらないところで、困っています。(表が大きいので…)

  • gridviewの値でセッション書きこみ

    現在、ASP.netにて以下のようなアプリを処理を実施しようとしています。 画面A(gridview使用) ------------------------------- 名前A | 項目A |備考A ------------------------------- 名前B | 項目B |備考B ------------------------------- 名前C | 項目C |備考C ------------------------------- ソース <asp:GridView ID="GridView" runat="server" AutoGenerateColumns="False" DataSourceID="ods1" > <Columns> <asp:BoundField DataField="namae" HeaderText="名前" SortExpression="namae" > </asp:BoundField> <asp:BoundField DataField="koumoku" HeaderText="項目" SortExpression="koumoku" > </asp:BoundField> <asp:BoundField DataField="bikou" HeaderText="備考" SortExpression="bikou" > </asp:BoundField> </Columns> </asp:GridView> このようなときに、2行目をクリックしたときは  session(name) = "B" のようにクリックする行によってsessionを書くにはどうのようにすでばよいのでしょうか? 対応方法があれば教えてください。

  • GridViewにグループ化して表示させたい

    ASP.NETの勉強のためにチームのメンバーを管理する ページを作っています。 VisualWebDeveloper2008のVBで作っています。 DBにはチーム名とチームの所属メンバーとメンバー一覧の3テーブルがあります。 これらをJOINしてGridViewに表示させたいと思います。 検索結果ではAチームに3人いる場合、3レコード取得されます。 画面に表示させるときには1レコードでメンバーの列だけ3行にしたいと思います。 Templateを指定するとできそうな気がするのですが、メンバーを検索するデータソースの条件にその行のチームコードを指定する方法が分かりません。 よろしくお願いします。

  • ASP.NET GridView の検索画面でのページング操作処理について

    ASP.NET・WindowsXP・ACCESS2003DB・ 2005ExpressEdition 検索画面を作成しましたがうまく動作しません教えてください。 1.条件入力用のテキストボックス幾つか作成。 2.検索ボタンを作成。 3.GridViewに上記の条件でSqlDatasourceより   データを表示できました。 4.1ページの件数10件を遥かにが多いため   GridView下段にページ番号が表示される 5.ページ番号をクリックすると、全データが表示   される。 条件入力した値でのSQL文のルーチンを通っていない 為と思われるが、GridView下段にページ番号を クリックしたときのイベントに条件ルーチンを 挿入したいのですが教えて頂けますでしょうか よろしくお願いいたします。

  • gridviewをcsvダウンロード

    何度もお世話になります。 提題のとおり、gridviewで表示させた内容をcsvでダウンロードさせたいと思っています。 (1)ボタン押下 (2)ポップアップでダウンロード確認画面 (3)保存ボタンを押すとファイル名およびファイル保存場所を指定する画面へ (4)OKで指定ファイル名で指定のファイル保存場所へ VS C#で開発する際にはSaveFileDialogに頼っていたのですが、 ASP.NET C#にはないのでしょうか… 何度も初歩的な質問申し訳ありませんが、ご存じの方、教えていただけると幸いです。 以上、よろしくお願いいたします。

  • ASP.NET2.0 GridViewのページャー設定について

    お世話になります。 現在VS2005のASP.NETを学習しております。 GridViewコントロールのページャー設定について質問があります。 500レコード程のデータを1ページに10件ずつ表示しようと思い、 GridViewコントロールのPagerSettingsプロパティのVisibleをTrueに設定しました。 それだけでテーブル下にページ番号リンクが表示され、とても簡単で感動しました。 その後、同じくPagerSettingsプロパティのModeをNumericからNextPreviousに変更するなど、いろいろ試していました。 そこで気づいたのですが、そのモードの中にFirstLastとNumericが一緒になったものはあるのですが、 NextPreviousとNumericが一緒になったモードがありません。 冷静に考えると現在のページ番号の両隣のリンクを押せばいいだけなのですが、 頑固な方がどうしてもページ番号と前へ・次へボタンを一緒にしてくれと頼まれた場合、 そのようにカスタマイズすることは可能なのでしょうか? また可能な場合、どのようにすれば実現できるのでしょうか? 知っている方がいたら、どうぞ宜しくお願いします。

  • 隠しリンク?

    このカテゴリであっているか不安ですが質問いたします。 隠しリンクというのは 背景と同色の文字で紛れ込ませていたり ★☆★←このような中に目的のリンク先を 紛れ込ませるものだと認識があるのですが このような例はなんと呼ぶのでしょうか? (例) 指定のリンクをクリックし元のページに戻る事によって 「こちらへどうぞ」などのリンクを出現させる 私のホムペで、これを使いたいのですが その名前が分からない為、調べられなくて。 名称及びPHPやHTMLなどのタグをご存知の方がいらっしゃいましたら 教えていただけないでしょうか? リンクの貼り付けなどでもかまいません。 説明が下手で申し訳ございませんがよろしくお願いいたします

    • 締切済み
    • PHP
  • ASP.NET、リストビューでページ内リンク

    お世話になります。 ASP.NETについて質問です。 HTMLにはページ内リンクというテクニックがあります。 <a href="#00">リンク</a>をクリックすると、 <a name="00"></a>と書いてある場所に飛ぶ、というものですね。 これをASP.NETのListviewでできないかと調べております。 具体的に書きますと、Linkbuttonをクリックすると、Listviewの10番目のインデックスの部分に移動する、という動きを実現したいのです。 コントロールの種類にこだわりはないので、Gridviewで実現できるなら、そちらでも構いません。 よろしくお願い致します。

  • プルダウンメニューからのリンクの貼り方

    FORMのプルダウンメニューからリンクをはっていますが、新しいページを開くのはどうしたら良いでしょう? 今は <select name="menu" size="1" onchange="location=this.options[this.selectedIndex].value"> と書いていて、同じページ内で別ページに移動します。 またプルダウンメニューからのリンクで、ページサイズを指定したり、スクロールバー、ツールバーの表示も指定したいのですが出来るのでしょうか? ご存知なかたはよろしくお願いします。

  • GridViewの項目編集(初歩)

    いわゆるレガシー言語専門の技術者です。 事情があって、ASP.NETとVisualStudio2008(C#)でWebアプリを知人から頼まれて作っています。 クライアント/サーバ型のシステム開発歴は長いのですが、Web系は全くと言って良いほど経験がありません(個人商店のホームページを作ったくらいです)。 要件は以下のようになります。 検索条件を入力 →DBのマスタ検索 →対象データをGridViewに一覧表示 →項目を直接編集  ※解説サイトによくある、GridViewにボタンが配置してあって、ボタン押下で編集モードに移行する動きはNGです。あくまでも直接編集できなければいけません。 →入力後、更新ボタン押下により、画面情報でDB一括更新 この、GridViewの項目を直接編集するには、何というコントロールを使い、データベースと連動させるにはどうすれば良いのかが、さっぱりわかりません。 自力で頑張ってみたのですが、DBの値をGridViewに表示するには、asp:BoundField を使い、DataField にDBの項目名を指定すれば「表示」はされるところまでは確認できました。 ただ、これだと「編集」が出来ない...どうやら、asp:TemplateField というものを使うようだが、DBとバインドさせる方法は?編集可能にするには? ネットで色々と調べたのですが、(理解力が低いせいもあり)そのものズバリな表現で説明しているサイトは殆どなく、頭がパニックで力が尽きてしまいそうです。 私はWeb開発には向いていないのかも知れませんが、諸事情により、今回は何としてもやり遂げないといけません。 どなたか助けてください、よろしくお願いします。

専門家に質問してみよう