前提・実現したいこと
Windowsフォームのdatagridviewで、ページング処理を実装したいのですが、
良いサンプルはないでしょうか?
いくらか検索しましたが、該当のものが見つかりません。
・既存プログラム改修のため、WindowsForm+dataGridviewの組み合わせは変更したくない
・表示データ件数が増加したため、ページング機能を実装することとなった
補足情報(FW/ツールのバージョンなど)
それらしきページのリンクがあったのですが、リンク切れでした。
https://dobon.net/vb/bbs/log3-29/17906.html
追記
以下を参考に書いてみました。
期待通りの動作になりました。
https://stackoverflow.com/questions/2825771/how-can-we-do-pagination-in-datagridview-in-winform
C#
1// 2 3using System; 4using System.Collections.Generic; 5using System.ComponentModel; 6using System.Data; 7using System.Drawing; 8using System.Linq; 9using System.Text; 10using System.Threading.Tasks; 11using System.Windows.Forms; 12using System.IO; 13 14namespace DataGridPaging 15{ 16 public partial class Form1 : Form 17 { 18 public DataTable dataTable = new DataTable(); 19 public BindingSource bindingSource = new BindingSource(); 20 public BindingList<DataTable> tables = new BindingList<DataTable>(); 21 22 // 1ページで表示する行数 23 public int pageSize = 1000; 24 25 public Form1() 26 { 27 InitializeComponent(); 28 29 // データサンプル(10000行) 30 // 以下の型式で10000行 31 // 1,行1,hoge1,fuga2,aaaaaaaaaaaaaaaaaaaa1 32 ReadData(); 33 } 34 35 public void ReadData() 36 { 37 this.dataTable.Columns.Add("列1", typeof(string)); 38 this.dataTable.Columns.Add("列2", typeof(string)); 39 this.dataTable.Columns.Add("列3", typeof(string)); 40 this.dataTable.Columns.Add("列4", typeof(string)); 41 this.dataTable.Columns.Add("列5", typeof(string)); 42 43 using(StreamReader sr = new StreamReader(@"data.csv", System.Text.Encoding.GetEncoding("shift_jis"))) 44 { 45 while(!sr.EndOfStream) 46 { 47 var line = sr.ReadLine(); 48 var datas = line.Split(','); 49 50 dataTable.Rows.Add(datas[0], datas[1], datas[2], datas[3], datas[4]); 51 } 52 } 53 54 } 55 56 private void button1_Click(object sender, EventArgs e) 57 { 58 SetPagedDataSource(); 59 } 60 61 private void SetPagedDataSource() 62 { 63 DataTable dt = null; 64 int counter = 1; 65 66 foreach (DataRow dr in this.dataTable.Rows) 67 { 68 if (counter == 1) 69 { 70 dt = dataTable.Clone(); 71 tables.Add(dt); 72 } 73 74 dt.Rows.Add(dr.ItemArray); 75 76 if (pageSize < ++counter) 77 { 78 counter = 1; 79 } 80 } 81 82 this.bindingNavigator1.BindingSource = bindingSource; 83 bindingSource.DataSource = tables; 84 bindingSource.PositionChanged += bindingSource_PositionChanged; 85 bindingSource_PositionChanged(bindingSource, EventArgs.Empty); 86 } 87 88 private void bindingSource_PositionChanged(object sender, EventArgs e) 89 { 90 this.dataGridView1.DataSource = tables[bindingSource.Position]; 91 } 92 } 93} 94
回答3件
あなたの回答
tips
プレビュー