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;

    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值