- 題名: データグリッドビューのページ処理について
- 日時: 2008/09/16 23:25:37
- ID: 23006
- この記事の返信元:
- (なし)
- この記事への返信:
- [23007] Re[1]: データグリッドビューのページ処理について2008/09/16 23:37:47
- ツリーを表示
■No23008に返信(たかおさんの記事) >>一番簡単なのは、BindingSourceのFilterプロパティを使うことでしょうか。 > > テーブルに連番をもっていない場合のFilterの条件指定ってどうしたらいいのでしょうか? > 連番を自分で振ってやってID<=5みたいにするのですか? > 自分で連番を振る方法もわからないんでどうやって振ればいいのでしょうか? 具体的に「5件」表示させる条件が明記されていませんが、 文面からするに単純に、最初は上から1件目〜5件目、ボタンを押したら次の6件目〜10件目、と表示させたいということでしょうか? とりあえず「連番」と出たので連番でのやり方の例を示しておきます。 その場合、逐一手動で連番をふることも可能ですが、 Load時にDBとのやりとりをしているので、それだとパフォーマンスが落ちてしまうでしょう。 それよりかは、事前にテーブルに連番用の列を追加し、ボタンを押すごとに BindingSourceのFlterを変更していく方がよいと思います。 --- イメージコード --- ※フォームにはDataGridViewとButton、BindingSourceが1つずつあるだけ。 ※DataGridViewのみ、AllowUserAddRows・AllowUserDeleteRowsをFalseに設定。他はデフォルトのまま。 Public Class Form1 Dim testtable As DataTable = New DataTable() Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load testtable = GetData() Me.BindingSource1.DataSource = testtable Me.BindingSource1.Filter = "SortKey > 0 and SortKey < 6" Me.DataGridView1.DataSource = Me.BindingSource1 End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim rowView As DataRowView = DirectCast(Me.DataGridView1.Rows(Me.DataGridView1.RowCount - 1).DataBoundItem, DataRowView) Dim row As DataRow = DirectCast(rowView.Row, DataRow) Me.BindingSource1.Filter = "SortKey > " & row("SortKey").ToString() & " and SortKey < " & (row("SortKey") + 5).ToString() End Sub Private Function GetData() As DataTable Dim table As DataTable = New DataTable() table.Columns.Add("C1") table.Columns.Add("C2") table.Columns.Add("C3") table.Columns.Add("SortKey")'←テーブルに事前に連番用の列を作っておく table.Rows.Add("sss", "111", "bbb", "1") table.Rows.Add("eee", "rrr", "766", "2") table.Rows.Add("err", "nnn", "999", "3") table.Rows.Add("bbb", "666", "888", "4") table.Rows.Add("ddd", "fff", "jjj", "5") table.Rows.Add("xxx", "vvv", "999", "7") table.Rows.Add("ggg", "hhh", "ert", "8") table.Rows.Add("333", "566", "hjj", "9") table.Rows.Add("www", "dfg", "ggg", "10") table.Rows.Add("hjh", "hjk", "www", "11") table.Rows.Add("222", "444", "ffg", "12") Return table End Function End Class これはテスト用に型のないDataTableで行っていますが、 考え方は型の有無にかかわらず同じです。 GetDataの部分は、実際はSQLのSelect文で行われる処理だと思ってください。
分類:[.NET]
データグリッドビューでページ処理を行いたいのですが、
どこをいじってやればいいのかわかっておりません。
下記のソースでテーブルは表示されますが、
5件だけ表示させるといった場合どうされてますか?
ページ毎にSQLを発行してやらないと無理でしょうか?
SQLをいじらないで5件表示させてボタンを押せば次の5件を表示させると
いった処理をどうすればいいのかご教授願います。
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim cn As New OleDb.OleDbConnection
Dim strSql As String
Dim dAdp As New OleDb.OleDbDataAdapter
Dim Table As New DataTable()
Dim BindingSource1 As New BindingSource
cn.ConnectionString = "『』"
strSql = "SELECT * FROM T_商品"
dAdp = New OleDb.OleDbDataAdapter(strSql, cn)
dAdp.Fill(Table)
BindingSource1.DataSource = Table
DataGridView1.DataSource = BindingSource1
End Sub
End Class