- - PR -
GridviewのRowCreatedイベントからsubプロシージャを呼び出す
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-01-22 22:58
お世話になります。VisualStudio2005でWebアプリを作成しています。
以下のソースでGridveiwのページングの部分に「次へ」「前へ」ボタンを 追加する処理を作成しました。 しかし、この設定をするGridViewが複数あるため、この処理をsubプロシージャに まとめて各GridViewのRowCreatedイベントから呼び出すようにしたいと思っています。 このような場合、RowCreatedイベントプロシージャからSubプロシージャへ どのような形で引数を受け渡せばよいのでしょうか? Protected Sub GridView1_RowCreated( _ ByVal sender As Object, _ ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs _ ) Handles GridView1.RowCreated If e.Row.RowType = DataControlRowType.Pager Then If GridView1.PageIndex <> GridView1.PageCount - 1 Then Dim lbn As LinkButton = New LinkButton() lbn.CommandName = "Page" lbn.CommandArgument = "Next" lbn.Text = ">" Dim tc1 As TableCell = New TableCell() tc1.Controls.Add(lbn) e.Row.Cells(0).Controls(0).Controls(0).Controls.Add(tc1) End If If (GridView1.PageIndex <> 0) Then Dim lbp As LinkButton = New LinkButton() lbp.CommandName = "Page" lbp.CommandArgument = "Prev" lbp.Text = "<" Dim tc2 As TableCell = New TableCell() tc2.Controls.Add(lbp) e.Row.Cells(0).Controls(0).Controls(0).Controls.AddAt(0, tc2) End If End If End Sub アドバイスをよろしくお願いいたします。 | ||||
|
投稿日時: 2008-01-23 03:24
以下のコードで実現できませんか?(検証はしていません…)
イベントハンドラの引数にはGridView1そのものが入っていますので、sender, eの 両方とも引数に渡せばいいかと思います。 // RowCreatedイベントハンドラ Protected Sub GridView1_RowCreated( _ ByVal sender As Object, _ ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs _ ) Handles GridView1.RowCreated CreatePager(sender, e) End Sub // 追加するプロシージャ Private Sub CreatePager(ByVal sender As Object, _ ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) // senderをGridViewにキャスト Dim gv As GridView = CType(sender, GridView) If e.Row.RowType = DataControlRowType.Pager Then If gv.PageIndex <> gv.PageCount - 1 Then Dim lbn As LinkButton = New LinkButton() lbn.CommandName = "Page" lbn.CommandArgument = "Next" lbn.Text = ">" Dim tc1 As TableCell = New TableCell() tc1.Controls.Add(lbn) e.Row.Cells(0).Controls(0).Controls(0).Controls.Add(tc1) End If If (gv.PageIndex <> 0) Then Dim lbp As LinkButton = New LinkButton() lbp.CommandName = "Page" lbp.CommandArgument = "Prev" lbp.Text = "<" Dim tc2 As TableCell = New TableCell() tc2.Controls.Add(lbp) e.Row.Cells(0).Controls(0).Controls(0).Controls.AddAt(0, tc2) End If End If End Sub | ||||
|
投稿日時: 2008-01-23 06:57
コードを記述するよりも
Modeに「NextPrevious」で設定すれば解決しませんか?
_________________ ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集 | ||||
|
投稿日時: 2008-01-23 21:34
返信ありがとうございます。
Accessさん、説明が足りず大変申し訳ございません。 ページングのページ番号を表示したまま、「次へ」「前へ」ボタンを追加したいため、 コードを記述いたしました。 pitfallさんのコードを記述して、実現できました。 お世話になりました。 | ||||
|
投稿日時: 2008-01-24 06:25
本来は、GridViewのカスタムコントロールを作成すべきですね。 スコットさんがGridViewのカスタムコントロールを公開 していますので時間のあるときにでもチャレンジしてみたらどうでしょうか。 http://aspnet.4guysfromrolla.com/articles/012308-1.aspx ちなみに、 ASP.NET 3.5のDataPagerコントロールを使用するとコードレスで できるんですけどね! こんな感じです。 http://asp35.maximumaspbeta.com/Goto.aspx?aid=080120VB-2 GridViewのページングは、データベースのテーブルからすべてのレコードを 読み込みますが、このDataPagerはカレントのページに表示するレコードのみ 読み込むように最適化されているスグレものです。 あと、AJAX Control ToolkitのSliderExtenderコントロールを使用すると スライダーを移動してページングさせることもできます。 こんな感じです。 http://asp35.maximumaspbeta.com/Goto.aspx?aid=080124CS-1 _________________ ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集 [ メッセージ編集済み 編集者: Access 編集日時 2008-01-24 07:57 ] | ||||
|
投稿日時: 2008-01-24 11:26
> GridViewのページングは、データベースのテーブルからすべてのレコードを
> 読み込みますが、このDataPagerはカレントのページに表示するレコードのみ > 読み込むように最適化されているスグレものです。 DataPagerがカレントのページに表示するレコードのみ読み込む、って本当ですか? LinkDataSourceにはそのような機能がありますが、DataPagerは単純にページャの 表示を受け持っているだけじゃないでしょうか。 どのようにして確かめられました? | ||||
|
投稿日時: 2008-01-24 22:49
>DataPagerがカレントのページに表示するレコードのみ読み込む、って本当ですか?
>LinkDataSourceにはそのような機能がありますが、DataPagerは単純にページャの >表示を受け持っているだけじゃないでしょうか。 >どのようにして確かめられました? さすがするどい質問ですね! おっしゃるようにDataPagerがサポートしているのではなく LinqDataSourceコントロールがサポートしている機能でした。 つまり、ListViewにLinqDataSourceをバインドするとDataPagerでカレントページに 表示するレコードのみ読み込みます。 ListViewにSqlDataSourceをバインドしたときはDataPagerで全件読み込んで カレントページのレコードを表示します。 念のためSQL Server Profilerにて確認しました。 もちろん、GridViewにLinqDataSourceをバインドしてページング機能を 有効にするとカレントページに表示するレコードのみ読み込みます。 ASP.NET 3.5ではSqlDataSourceの代わりにLinqDataSourceを 利用した方がよいですね。 _________________ ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集 | ||||
|
投稿日時: 2008-01-24 23:30
Accessさん返信ありがとうございます。
本来はカスタムコントロールを作成するべきなのですね。 やり方を確認してみます。 ASP.NET 3.5のDataPagerコントロールは見やすいですね! いろいろな情報をありがとうございました。 |
1