分頁
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
SelectMethod="GetLimingchMember" TypeName="LimingchStudioUISorting">
</asp:ObjectDataSource>
CREATE PROCEDURE dbo.GetLimingchStudioPageData
(
@StartRowIndex INT,
@MaximumRows INT
)
AS
WITH 已編號的章立民研究室 AS
(
SELECT
員工號碼,
ROW_NUMBER() OVER (ORDER BY 員工號碼) AS 序號
FROM 章立民研究室
)
SELECT
已編號的章立民研究室.序號,
章立民研究室.員工號碼,
章立民研究室.姓名,
章立民研究室.性別,
章立民研究室.地址,
章立民研究室.部門
FROM
已編號的章立民研究室
JOIN 章立民研究室
ON 已編號的章立民研究室.員工號碼 = 章立民研究室.員工號碼
WHERE
序號 BETWEEN (@StartRowIndex + 1) AND (@startRowIndex + @maximumRows + 1);
public class LimingchStudioDataSourcePaging
{
private string _connectionString;
public LimingchStudioDataSourcePaging()
{
Initialize();
}
public void Initialize()
{
// 初始化數據源。我們使用 Web.config 中名稱爲 chtNorthwind 的連接字符串。
if (ConfigurationManager.ConnectionStrings["chtNorthwind"] == null || ConfigurationManager.ConnectionStrings["chtNorthwind"].ConnectionString.Trim() == "")
{
throw new Exception("名稱爲 'chtNorthwind' 的連接字符串務必內含於 " + " <connectionStrings> 配置設置區段中。");
}
// 將連接字符串的內容儲存於變量 _connectionString 中。
_connectionString = ConfigurationManager.ConnectionStrings["chtNorthwind"].ConnectionString;
}
public DataTable GetLimingchMember(int startRowIndex, int maximumRows)
{
string commandText = "SELECT 員工號碼,姓名,性別,地址,部門 FROM 章立民研究室";
// 建立一個數據配接器對象。
SqlDataAdapter da = new SqlDataAdapter(commandText, _connectionString);
// 建立一個 DataSet 對象。
DataSet ds = new DataSet();
using (da)
{
// 從 startRowIndex 參數所指定的數據行開始,提取 maximumRows 參數所指定的筆數,
// 然後將它們填入 DataSet 對象中的「章立民研究室」數據表。
da.Fill(ds, startRowIndex, maximumRows, "章立民研究室");
}
// 傳回 DataTable 物件。
if (ds.Tables["章立民研究室"] != null) return ds.Tables["章立民研究室"];
return null;
}
public int GetLimingchStudioCount()
{
HttpContext context = HttpContext.Current;
if (context.Cache["LimingchStudioCount"] == null)
{
context.Cache["LimingchStudioCount"] = GetLimingchStudioCountFromSqlDB();
}
return (int)context.Cache["LimingchStudioCount"];
}
private int GetLimingchStudioCountFromSqlDB()
{
int nRows = 0;
// 建立一個連接對象。
SqlConnection con = new SqlConnection(_connectionString);
// 建立一個數據命令對象。
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "SELECT Count(*) FROM 章立民研究室";
// 運行命令。
using (con)
{
con.Open();
nRows = (int)cmd.ExecuteScalar();
}
return nRows;
}
}
分頁排序
<asp:ObjectDataSource ID="IdName_ObjectDataSource" runat="server" SelectMethod="GetAllLimingchMember"
TypeName="LimingchStudioParameterDsPagingSorting" EnablePaging="True" SelectCountMethod="GetLimingchStudioCount" SortParameterName="SortColumnExpression">
</asp:ObjectDataSource>
public class LimingchStudioDsPagingSorting
{
private string _connectionString;
public LimingchStudioDsPagingSorting()
{
Initialize();
}
public void Initialize()
{
// 初始化數據源。我們使用 Web.config 中名稱爲 chtNorthwind 的連接字符串。
if (ConfigurationManager.ConnectionStrings["chtNorthwind"] == null || ConfigurationManager.ConnectionStrings["chtNorthwind"].ConnectionString.Trim() == "")
{
throw new Exception("名稱爲 'chtNorthwind' 的連接字符串務必內含於 " + " <connectionStrings> 配置設置區段中。");
}
// 將連接字符串的內容儲存於變量 _connectionString 中。
_connectionString = ConfigurationManager.ConnectionStrings["chtNorthwind"].ConnectionString;
}
// 請注意此方法是傳回一個 SqlDataReader 對象,並且實作數據源分頁機制與數據源排序機制。
public SqlDataReader GetLimingchMember(string SortColumnExpression, int startRowIndex, int maximumRows)
{
// 建立一個連接對象。
SqlConnection con = new SqlConnection(_connectionString);
// 建立一個命令對象。
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
// 設置運行 SQL Server 數據庫中名稱爲 GetLimingchStudioPagedSortedData 的存儲過程。
cmd.CommandText = "GetLimingchStudioPagedSortedData";
cmd.CommandType = CommandType.StoredProcedure;
// 定義存儲過程的輸入參數 @SortColumnExpression 並將其值設置成 SortColumnExpression 參數。
cmd.Parameters.AddWithValue("@SortColumnExpression", SortColumnExpression);
// 定義存儲過程的輸入參數 @StartRowIndex 並將其值設置成 startRowIndex 參數。
cmd.Parameters.AddWithValue("@StartRowIndex", startRowIndex);
// 定義存儲過程的輸入參數 @MaximumRows 並將其值設置成 maximumRows 參數。
cmd.Parameters.AddWithValue("@MaximumRows", maximumRows);
// 開啓連接。
con.Open();
// 傳回一個 SqlDataReader 物件。
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
public int GetLimingchStudioCount()
{
int nRows = 0;
// 建立一個連接對象。
SqlConnection con = new SqlConnection(_connectionString);
// 建立一個數據命令對象。
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "SELECT Count(*) FROM 章立民研究室";
// 運行命令。
using (con)
{
con.Open();
nRows = (int)cmd.ExecuteScalar();
}
return nRows;
}
}
USE 北風貿易;
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetLimingchStudioPagedSortedData]') AND type in (N'P', N'PC'))
DROP PROCEDURE [dbo].[GetLimingchStudioPagedSortedData]
GO
CREATE PROCEDURE GetLimingchStudioPagedSortedData
(
@SortColumnExpression NVarChar(100),
@StartRowIndex INT,
@MaximumRows INT
)
AS
-- 建立一個暫存數據表來儲存所提取的數據。
CREATE TABLE #MyTempPagedSortedTable
(
序號 INT IDENTITY (1, 1) NOT NULL,
列號 INT
)
-- 將數據行新建至暫存數據表。
INSERT INTO #MyTempPagedSortedTable (列號)
SELECT 員工號碼 FROM 章立民研究室
ORDER BY
CASE WHEN @SortColumnExpression='員工號碼' THEN 員工號碼 END ASC,
CASE WHEN @SortColumnExpression='員工號碼 DESC' THEN 員工號碼 END DESC,
CASE WHEN @SortColumnExpression='姓名' THEN 姓名 END ASC,
CASE WHEN @SortColumnExpression='姓名 DESC' THEN 姓名 END DESC,
CASE WHEN @SortColumnExpression='性別' THEN 性別 END ASC,
CASE WHEN @SortColumnExpression='性別 DESC' THEN 性別 END DESC,
CASE WHEN @SortColumnExpression='地址' THEN 地址 END ASC,
CASE WHEN @SortColumnExpression='地址 DESC' THEN 地址 END DESC,
CASE WHEN @SortColumnExpression='部門' THEN 部門 END ASC,
CASE WHEN @SortColumnExpression='部門 DESC' THEN 部門 END DESC
-- 取得特定分頁的數據行
SELECT 員工號碼, 姓名, 性別, 地址, 部門
FROM
章立民研究室
INNER JOIN #MyTempPagedSortedTable WITH (nolock)
ON 章立民研究室.員工號碼 = #MyTempPagedSortedTable.列號
WHERE
#MyTempPagedSortedTable.序號 > @StartRowIndex
AND #MyTempPagedSortedTable.序號 < (@StartRowIndex + @MaximumRows + 1)
ORDER BY
#MyTempPagedSortedTable.序號
篩選
<asp:DropDownList ID="Department_DropDownList" runat="server" AutoPostBack="True"
DataSourceID="Department_ObjectDataSource" DataTextField="部門" DataValueField="部門"
Height="23px" Width="153px">
</asp:DropDownList>
<asp:ObjectDataSource ID="Department_ObjectDataSource" runat="server" SelectMethod="GetLimingchDepartment"
TypeName="LimingchStudioFilter"></asp:ObjectDataSource>
<hr />
<asp:GridView ID="LimingchStudio_GridView" runat="server" DataSourceID="LimingchStudio_ObjectDataSource">
</asp:GridView>
<asp:ObjectDataSource ID="LimingchStudio_ObjectDataSource" runat="server" EnableCaching="True"
SelectMethod="GetLimingchMember" TypeName="LimingchStudioFilter" FilterExpression="部門='{0}'">
<FilterParameters>
<asp:ControlParameter ControlID="Department_DropDownList" Name="部門" PropertyName="SelectedValue" />
</FilterParameters>
</asp:ObjectDataSource>
public class LimingchStudioFilter
{
private string _connectionString;
public LimingchStudioFilter()
{
Initialize();
}
public void Initialize()
{
// 初始化數據源。我們使用 Web.config 中名稱爲 chtNorthwind 的連接字符串。
if (ConfigurationManager.ConnectionStrings["chtNorthwind"] == null || ConfigurationManager.ConnectionStrings["chtNorthwind"].ConnectionString.Trim() == "")
{
throw new Exception("名稱爲 'chtNorthwind' 的連接字符串務必內含於 " + " <connectionStrings> 配置設置區段中。");
}
// 將連接字符串的內容儲存於變量 _connectionString 中。
_connectionString = ConfigurationManager.ConnectionStrings["chtNorthwind"].ConnectionString;
}
public SqlDataReader GetLimingchDepartment()
{
// 建立一個連接對象。
SqlConnection con = new SqlConnection(_connectionString);
// 建立一個命令對象。
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandText = "SELECT DISTINCT 部門 FROM 章立民研究室";
// 開啓連接。
con.Open();
// 傳回一個 SqlDataReader 物件。
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
public DataTable GetLimingchMember()
{
string commandText = "SELECT 員工號碼,姓名,性別,地址,部門 FROM 章立民研究室";
// 建立一個數據配接器對象。
SqlDataAdapter da = new SqlDataAdapter(commandText, _connectionString);
// 建立一個 DataSet 對象。
DataSet ds = new DataSet();
using (da)
{
// 將數據填入 DataSet 對象中的「章立民研究室」數據表。
da.Fill(ds, "章立民研究室");
}
// 傳回 DataTable 物件。
if (ds.Tables["章立民研究室"] != null) return ds.Tables["章立民研究室"];
return null;
}
}