- - PR -
[ASP.NET]GridViewの行選択から、別のWebペ−ジを開く際に非常に遅い
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-11-12 15:24
SqlDataSourceを動的にbindしていてもEnableViewState=trueにしていれば、
PostBackしただけでは再度データ取得しなさそうですが。。 私が最初に書いた方法は、先にjavascriptを埋め込む方法です。 (最初の描画時に既にスクリプトを入れておく) 選択ボタンの位置は、適当に Cells(10) としています。 コンパイルもせずに適当に書いたので動かなかったらごめんなさい。 Protected Sub GridView_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) If e.Row.RowType = DataControlRowType.DataRow Then Dim k As String = e.Row.Cells(3).Text e.Row.Cells(10).Attributes.Add("onclick", "window.open('◎◎◎?ID=" + k + "');return false") End If End Sub 書いててふと思ったのですが、 選択ボタンをTemplateFieldのアンカータグにしてしまえば aspx側だけで完結することもできそうです。 <asp:TemplateField> <ItemTemplate> <a href="javascript:void(0);" onclick="javascript:window.open('WebPageB.aspx?ID=<%# Eval("ID") %>');return false;">選択</a> </ItemTemplate> </asp:TemplateField> | ||||||||||||
|
投稿日時: 2008-11-13 15:30
た さん Todoさん
返信大変遅くなりすみません。風邪でダウンしていました。 todoさんから教えていただいたSQLプロファイラでSQL発行状況を確認しましたが、 SQLでは全行のSelect文は発行していませんでした。 ひとつハッキリしました。todoさんありがとうございます。
わざわざ、コードも書いてくれてありがとうございます。 このTemplateFieldでやる方法が一番すっきりするのですが、この部分を動的に埋め込む 方法を教えていただけないでしょうか? 例えば、リスト中の"ID"の部分をコードで動的に設定したいと考えております。 頼ってばかりで申し訳ありませんがよろしくお願いします。 | ||||||||||||
|
投稿日時: 2008-11-14 05:59
VSのデザイナ側でaタグに対し、runat="server"とid=任意のid
を設定しておけば、コードから動的に設定することが可能だと思います。
| ||||||||||||
|
投稿日時: 2008-11-14 10:18
>Dim k$ = GridView1.Rows(GridView1.SelectedIndex).Cells(3).Text ' 項目の値
ここのCells(3)のカラム名がわからなかったので、適当に「ID」というカラムに置き換えました。 TemplateFieldは、自分でカスタマイズできる項目です。 カラム名「ID」がSqlDataSourceのSELECT文内にあれば、 SqlDataSourceがbindしたタイミングで<%# Eval("ID") %> と記載した場所に自動で埋まります。 ですので、VB側で埋め込むコードを記述する必要はありません。 TemplateFieldを追加して、SelectedIndexChangedのイベントを削除すれば postbackしないでwindow.openできると思います。 (本当は別のところに遅い原因があると思うのですが、全ソースを見ていないので原因はわからないです。。) | ||||||||||||
|
投稿日時: 2008-11-17 13:08
た さん、もん吉 さん
回答ありがとうございます。 他の方からの回答も合わせて、試してみます。 しかし、別ページを開く部分だけでなく、ページング(独自にSQL文で該当ページだけを取得しています)処理でもDBによっては非常に遅くなっている現実があるので、そこから 片付けないとというより、そこが根本的な原因のような気がします。 た さんのご指摘通り
原因がわかったら、又、載せようと思います。ありがとうございました。 (少し整理して、別スレッドとして投稿させて頂きます。その時もどうかよろしくお願いします。) |