C#實現DataGridView分頁功能
從介面可以看到,在設計時需要一個DataGridView、BindingNavigate、BindingSource控制項,分別命名為dgvInfo、bdnInfo、bdsInfo。在bdnInfo控制項中添加幾個用於選擇頁面的lable和botton,如上圖所示。
設計時:
1、定義幾個所需的公有成員:
int pageSize = 0; //每頁顯示行數
int nMax = 0; //總記錄數
int pageCount = 0; //頁數=總記錄數/每頁顯示行數
int pageCurrent = 0; //當前頁號
int nCurrent = 0; //目前記錄行
DataSet ds = new DataSet(); <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
DataTable dtInfo = new DataTable();
2、在表單載入事件中,從資料來源讀取記錄到DataTable中:
string strConn = "SERVER=www.dow88.cn;DATABASE=NORTHWIND;UID=SA;PWD=ULTRATEL"; //資料庫連接字串
SqlConnection conn = new SqlConnection(strConn);
conn.Open();
string strSql = "SELECT * FROM CUSTOMERS";
SqlDataAdapter sda = new SqlDataAdapter(strSql,conn);
sda.Fill(ds,"ds");
conn.Close();
dtInfo = ds.Tables;
InitDataSet();
3、用當前頁面資料填充DataGridView
private void InitDataSet()
...{
pageSize = 20; //設置頁面行數
nMax = dtInfo.Rows.Count;
pageCount=(nMax/pageSize); //計算出總頁數
if ((nMax % pageSize) > 0) pageCount++;
pageCurrent = 1; //當前頁數從1開始
nCurrent = 0; //目前記錄數從0開始
LoadData();
}
private void LoadData()
...{
int nStartPos = 0; //當前頁面開始記錄行
int nEndPos = 0; //當前頁面結束記錄行
DataTable dtTemp = dtInfo.Clone(); //克隆DataTable結構框架
if (pageCurrent == pageCount)
nEndPos = nMax;
else
nEndPos = pageSize * pageCurrent;
nStartPos = nCurrent;
lblPageCount.Text = pageCount.ToString();
txtCurrentPage.Text = Convert.ToString(pageCurrent);
//從中繼資料源複製記錄行
for (int i = nStartPos; i < nEndPos; i++)
...{
dtTemp.ImportRow(dtInfo.Rows);
nCurrent++;
}
bdsInfo.DataSource = dtTemp;
bdnInfo.BindingSource = bdsInfo;
dgvInfo.DataSource = bdsInfo;
}
4、菜單回應事件:
private void bdnInfo_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
...{
if (e.ClickedItem.Text == "關閉")
...{
this.Close();
}
if (e.ClickedItem.Text == "上一頁")
...{
pageCurrent--;
if (pageCurrent <= 0)
...{
MessageBox.Show("已經是第一頁,請點擊“下一頁”查看!");
return;
}
else
...{
nCurrent = pageSize * (pageCurrent - 1);
}
LoadData();
}
if (e.ClickedItem.Text == "下一頁")
...{
pageCurrent++;
if (pageCurrent > pageCount)
...{
MessageBox.Show("已經是最後一頁,請點擊“上一頁”查看!");
return;
}
else
...{
nCurrent=pageSize*(pageCurrent-1);
}
LoadData();
}
}
頁:
[1]