您的位置:首页 > 其它

DataGridView分页功能的实现<纯手动方式>

2014-12-03 05:00 387 查看
最近做了一个DataGridView的分页显示Demo。也是看见网络上很多人询问关于DataGridView如何做分页。根据我的认识,Visual
Sutido2005里的DataGridView控件是没有带分页属性的,因此咱们必须通过写代码去实现分页功能。

好了,先看一下Demo的界面。
从界面可以看到,在设计时需要一个DataGridView、BindingNavigate、BindingSource控件,分别命名为dgvInfo、bdnInfo、bdsInfo。

在bdnInfo控件中添加几个用于选择页面的lable和botton,如上图所示。

设计时:

1 // 1、定义几个所需的公有成员:

2

3 int pageSize = 0; //每页显示行数

4 int nMax = 0; //总记录数

5 int pageCount = 0; //页数=总记录数/每页显示行数

6 int pageCurrent = 0; //当前页号

7 int nCurrent = 0; //当前记录行

8 DataSet ds = new DataSet();

9 DataTable dtInfo = new DataTable();

10

11 //2、在窗体载入事件中,从数据源读取记录到DataTable中:

12

13 string strConn = "SERVER=127.0.0.1;DATABASE=NORTHWIND;UID=SA;PWD=ULTRATEL"; //数据库连接字符串

14 SqlConnection conn = new SqlConnection(strConn);

15 conn.Open();

16 string strSql = "SELECT * FROM CUSTOMERS";

17 SqlDataAdapter sda = new SqlDataAdapter(strSql,conn);

18 sda.Fill(ds,"ds");

19 conn.Close();

20 dtInfo = ds.Tables[0];

21 InitDataSet();

22

23 //3、用当前页面数据填充DataGridView

24

25 private void InitDataSet()

26 {

27 pageSize = 20; //设置页面行数

28 nMax = dtInfo.Rows.Count;

29 pageCount=(nMax/pageSize); //计算出总页数

30 if ((nMax % pageSize) > 0) pageCount++;

31 pageCurrent = 1; //当前页数从1开始

32 nCurrent = 0; //当前记录数从0开始

33 LoadData();

34 }

35

36 private void LoadData()

37 {

38 int nStartPos = 0; //当前页面开始记录行

39 int nEndPos = 0; //当前页面结束记录行

40 DataTable dtTemp = dtInfo.Clone(); //克隆DataTable结构框架

41

42 if (pageCurrent == pageCount)

43 {

44 nEndPos = nMax;

45 }

46 else

47 {

48 nEndPos = pageSize * pageCurrent;

49 }

50

51 nStartPos = nCurrent;

52 lblPageCount.Text = pageCount.ToString();

53 txtCurrentPage.Text = Convert.ToString(pageCurrent);

54

55

56 //从元数据源复制记录行

57 for (int i = nStartPos; i < nEndPos; i++)

58 {

59 dtTemp.ImportRow(dtInfo.Rows[i]);

60 nCurrent++;

61 }

62 bdsInfo.DataSource = dtTemp;

63 bdnInfo.BindingSource = bdsInfo;

64 dgvInfo.DataSource = bdsInfo;

65 }

66

67 // 4、菜单响应事件:

68

69 private void bdnInfo_ItemClicked(object sender, ToolStripItemClickedEventArgs e)

70 {

71 if (e.ClickedItem.Text == "关闭")

72 {

73 this.Close();

74 }

75 if (e.ClickedItem.Text == "上一页")

76 {

77 pageCurrent--;

78 if (pageCurrent <= 0)

79 {

80 MessageBox.Show("已经是第一页,请点击“下一页”查看!");

81 return;

82 }

83 else

84 {

85 nCurrent = pageSize * (pageCurrent - 1);

86 }

87 LoadData();

88 }

89 if (e.ClickedItem.Text == "下一页")

90 {

91 pageCurrent++;

92 if (pageCurrent > pageCount)

93 {

94 MessageBox.Show("已经是最后一页,请点击“上一页”查看!");

95 return;

96 }

97 else

98 {

99 nCurrent=pageSize*(pageCurrent-1);

100 }

101 LoadData();

102 }

103 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐