2013-07-25 77 views
1

我有這個功能從數據庫中顯示記錄到FlowLayoutPanel的極限記錄

flowLayoutPanel1.Controls.Clear(); 
     using (SqlConnection myDatabaseConnection = new SqlConnection(myConnectionString.ConnectionString)) 
     { 
      myDatabaseConnection.Open(); 
      string a = "Select EmpID, Name from EmpTable"; 
      using (SqlCommand SqlCommand = new SqlCommand(" "+ a +" ", myDatabaseConnection)) 
      { 
       int i = 0; 
       SqlDataReader DR1 = SqlCommand.ExecuteReader(); 
       while (DR1.Read()) 
       { 
        i++; 
        BookUserControl usercontrol = new BookUserControl(); 
        usercontrol.Tag = i; 
        usercontrol.EmpID = DR1["EmpID"].ToString(); 
        usercontrol.Name = (string)DR1["Name"]; 
        flowLayoutPanel1.Controls.Add(usercontrol); 
       } 
      } 
     } 

我如何將限制將在FlowLayoutPanel中顯示的記錄數?我知道有選擇頂部。但是,我將如何做到這一點,例如將顯示10條記錄,當點擊下一個按鈕時,將顯示接下來的10條記錄,當前一個按鈕點擊時,將顯示前10條記錄。

+1

什麼是數據庫? Oracle,Sql Server 2000/2005/2008? – unlimit

+0

幫助? http://stackoverflow.com/a/658570/1134076 –

+0

sql server 2008 :) –

回答

1

在SQL Server 2008中,你可以使用Row_Number()

Select * from  
(Select row_number() over (order by EmpID) r, EmpID, Name from EmpTable) X 
where X.r between @start and @end 

供應的@start@end的價值觀和你都設置。您可能會也可能不會顯示r的值。要從1-10顯示,請設置@start = 1@end = 10依此類推。在這個查詢中,數據是在EmpID上訂購的。

修改後的代碼:

string a = "Select * from (Select row_number() over (order by EmpID) r, EmpID, Name from EmpTable) X where X.r between @start and @end"; 
     using (SqlCommand SqlCommand = new SqlCommand(" "+ a +" ", myDatabaseConnection)) 
     { 
      SqlCommand.Parameters.Add("@start").Value = 1; 
      SqlCommand.Parameters.Add("@end").Value = 10; 
      int i = 0; 
      SqlDataReader DR1 = SqlCommand.ExecuteReader(); 
      while (DR1.Read()) 
      { 
       i++; 
       BookUserControl usercontrol = new BookUserControl(); 
       usercontrol.Tag = i; 
       usercontrol.EmpID = DR1["EmpID"].ToString(); 
       usercontrol.Name = (string)DR1["Name"]; 
       flowLayoutPanel1.Controls.Add(usercontrol); 
      } 
     } 

http://msdn.microsoft.com/en-us/library/ms186734(v=sql.90).aspx

+0

謝謝你unlimit :) –

0

是有SELECT TOP在SQL

使用這樣

Select TOP(10) EmpID, Name from EmpTable 

我更新你的鱈魚

flowLayoutPanel1.Controls.Clear(); 
     using (SqlConnection myDatabaseConnection = new SqlConnection(myConnectionString.ConnectionString)) 
     { 
      myDatabaseConnection.Open(); 
      string a = "SELECT TOP(10) EmpID, Name FROM EmpTable"; 
      using (SqlCommand SqlCommand = new SqlCommand(" "+ a +" ", myDatabaseConnection)) 
      { 
       int i = 0; 
       SqlDataReader DR1 = SqlCommand.ExecuteReader(); 
       while (DR1.Read()) 
       { 
        i++; 
        BookUserControl usercontrol = new BookUserControl(); 
        usercontrol.Tag = i; 
        usercontrol.EmpID = DR1["EmpID"].ToString(); 
        usercontrol.Name = (string)DR1["Name"]; 
        flowLayoutPanel1.Controls.Add(usercontrol); 
       } 
      } 
     } 

現在使用這個鱈魚和這正是你想要

工作

祝你好運

+0

接下來的前10名呢?前十強? –

+0

這不行!當他點擊下一個時,這隻會重複相同的前10名。他所追求的是SQL分頁,或者可能將所有結果加載到列表<>中,然後使用.Take(10)等。 –

+2

如果您想創建像NEXT這樣的系統,那麼只有top(n)記錄 –

0

您最優雅是使用ROW_NUMBER函數

WITH NumberedMyTable AS 
(
    SELECT 
     Id, 
     Value, 
     ROW_NUMBER() OVER (ORDER BY Id) AS RowNumber 
    FROM 
     MyTable 
) 
SELECT 
    Id, 
    Value 
FROM 
    NumberedMyTable 
WHERE 
    RowNumber BETWEEN @From AND @To 

好運