關於在winform下DataGrid分頁代碼
最近頭頭要我們用DataGrid顯示數據的時候一條一條的顯示,當點擊了某按鈕時,下條記錄就出現,也就是一次只顯示一條記錄,~於是我就想到了用DataGrid分頁,當然我們在開發中也遇到了很多問題,特別是細節上的~在這裡我要特別感謝我的朋友reficul和Oscar給了我不少幫助~
-------------------------代碼-----------------------------------
public int NowPage = 1,PageCount = 1,PageSize = 1;//先定義變量並初始化
private void button1_Click(object sender, System.EventArgs e)//上一頁
{
NowPage--;
LoadData(sender,e);
}
private void button2_Click(object sender, System.EventArgs e)//下一頁
{
NowPage++;
LoadData(sender,e);
}
private void LoadData(object sender,System.EventArgs e)
{
try
{
string conn = "server=.;user id=sa;passWord=;database=Northwind";//連接數據庫,我用的事例數據庫是SQL裡面的
//設置數據庫連接
SqlConnection SconnStr = new SqlConnection (conn);
if(SconnStr.State.ToString()=="Closed")
{
SconnStr.Open ();
}
SqlCommand Countcmd = new SqlCommand ("select count(*) as co from Employees",SconnStr);//讀出總記錄數
SqlDataReader Countdr = Countcmd.ExecuteReader();
if(Countdr.Read())
{
PageCount = Int32.Parse (Countdr["co"].ToString ())/PageSize;//用總記錄數除於每頁顯示的記錄數=總頁數
if(Int32.Parse (Countdr["co"].ToString ())%PageSize>0) //取模運算,
{
PageCount = PageCount +1;//超過一頁的顯示數按2頁算
}
if(PageCount<1)//不足一頁顯示數的按一頁算
{
PageCount=1;
}
}
$False$
SconnStr.Close ();
pageinfo.Text ="共"+PageCount+"頁\t 第"+NowPage+"頁";
//設置操作數據庫命令
if(NowPage>=PageCount)//如果當前的頁面值大於或等於總頁面數的話,那麼當前頁面為最後的頁面
{
NowPage= PageCount;
}
if(NowPage<=1)//如果當前的頁面值小於或等於一頁面的話,那麼當前頁面為第一頁
{
NowPage=1;
}
int start = (NowPage-1)*PageSize;//當前頁的開始記錄是前幾頁的總記錄數的最後一個記錄
string command = "select * from Employees ";//填充數據,並顯示
SqlDataAdapter sda = new SqlDataAdapter ( command,SconnStr);
DataSet ds = new DataSet ();
sda.Fill(ds,start,PageSize,"Employees");
dataGrid1.DataSource = ds.Tables ["Employees"].DefaultVIEw ;
dataGrid1.SetDataBinding(ds,"Employees");
}
catch(Exception err)
{
MessageBox.Show(err.Message.ToString());
}
}
private void button3_Click(object sender, System.EventArgs e)//首頁
{
NowPage= 1;
LoadData(sender,e);
}
private void button4_Click(object sender, System.EventArgs e)//尾頁
{
NowPage= PageCount;
LoadData(sender,e);
}