ASP.NET ObjectDataSource 分頁排序 篩選

分頁

<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;

    }

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章