1
using System;
2
using System.Collections;
3
using System.ComponentModel;
4
using System.Data;
5
using System.Drawing;
6
using System.Web;
7
using System.Web.SessionState;
8
using System.Web.UI;
9
using System.Web.UI.WebControls;
10
using System.Web.UI.HtmlControls;
11
using System.Data.SqlClient;
12
namespace changedpage
13
{
14
/// <summary>
15
/// WebForm2 的摘要说明。
16
/// </summary>
17
public class WebForm2 : System.Web.UI.Page
18
{
19
protected System.Web.UI.WebControls.DataGrid dgCustomPage;
20
int startIndex = 0;
21
22
private void Page_Load(object sender, System.EventArgs e)
23
{
24
// 在此处放置用户代码以初始化页面
25
if(!IsPostBack)
26
{
27
binddata();
28
}
29
}
30
private void binddata()
31
{
32
SqlConnection myconnection = new SqlConnection("server = localhost;user id =sa;password =;database =Northwind");
33
SqlDataAdapter mycommand = new SqlDataAdapter("select LastName,FirstName,BirthDate,City from Employees",myconnection);
34
DataSet mydataset = new DataSet();
35
try
36
{
37
mycommand.Fill(mydataset,startIndex,dgCustomPage.PageSize,"CurDataTable");
38
mycommand.Fill(mydataset,"alldatatable");
39
dgCustomPage.VirtualItemCount = mydataset.Tables["alldatatable"].Rows.Count;
40
dgCustomPage.DataSource=mydataset.Tables["CurDataTable"];
41
dgCustomPage.DataBind();
42
}
43
catch (Exception error)
44
{
45
Response.Write(error.ToString());
46
}
47
}
48
49
private void dgCustomPage_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)
50
{
51
dgCustomPage.CurrentPageIndex=e.NewPageIndex;
52
startIndex = dgCustomPage.PageSize * dgCustomPage.CurrentPageIndex;
53
binddata();
54
}
55
}
56
}
57
58
使用SqlDataAdapter
59
60
SqlDataAdapter是用来把来自数据库的数据填充到DataSet中,过载的Fill方法中的任一个都需
61
62
要两个整数索引值(如下列代码所示):
63
64
public int Fill( DataSet dataSet, int startRecord, int maxRecords, string srcTable );
65
66
StartRecord值标示从零开始的记录起始索引值。MaxRecord值表示从startRecord开始的记录数,并将拷贝到新的 DataSet中。
67
68
SqlDataAdapter在内部利用SqlDataReader执行查询并返回结果。SqlDataAdapter读取结果并创建基于来自 SalDataReader的数据的Dataset。SqlDataAdapter通过startRecord和maxRecords把所有结果都拷贝到新生成的 DataSet中,并丢弃不需要的数据。这意味着许多不必要的数据将潜在的通过网络进入数据访问客户--这是这种方 法的主要缺陷。
69
70
71
比如,如果有1000个记录,而需要的是第900到950个记录,那么前面的899个记录将仍然穿越网络然后被丢弃。对 于小数量的记录,这种开销可能是比较小的,但如果针对大量数据的分页,则这种开销就会非常巨大。

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71
