• ベストアンサー

GridView リンク

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

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

  • ベストアンサー
  • 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