Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQL存储过程和GridView的排序和分页问题_C#_Sql Server_Sorting_Stored Procedures_Gridview - Fatal编程技术网

C# SQL存储过程和GridView的排序和分页问题

C# SQL存储过程和GridView的排序和分页问题,c#,sql-server,sorting,stored-procedures,gridview,C#,Sql Server,Sorting,Stored Procedures,Gridview,我一直在谷歌上寻找一个好的解决方案,在我当前的项目中,在ASp GridView控件(.NET 4.0)上实现自定义分页和排序,但几乎没有成功 这是我尝试用作完成此任务的基础的最新站点: 这个解决方案的最大问题是,他的示例FirstID是一个整数,也是他的ProductID,我使用GUID作为唯一标识符。这显然是造成问题,当我试图订购这个或类似的东西。我尝试使用另一个列(AesExt varchar(50)),但这也不起作用,基本上,出于某种原因,它一直保存最上面一行。我还需要实现排序,所以当

我一直在谷歌上寻找一个好的解决方案,在我当前的项目中,在ASp GridView控件(.NET 4.0)上实现自定义分页和排序,但几乎没有成功

这是我尝试用作完成此任务的基础的最新站点:

这个解决方案的最大问题是,他的示例FirstID是一个整数,也是他的ProductID,我使用GUID作为唯一标识符。这显然是造成问题,当我试图订购这个或类似的东西。我尝试使用另一个列(AesExt varchar(50)),但这也不起作用,基本上,出于某种原因,它一直保存最上面一行。我还需要实现排序,所以当我在C#中获得该过程时,我将其填充到一个Datatable中,并使用DataView进行排序。我想知道是否有人有更好的解决方案,他们可以分享或向我展示我在做什么。我还试图找到一种在过程中进行排序的好方法,但它不起作用,因为我的老板希望扩展为varchar(50),因为没有条目(我个人认为应该是0)。因此,当我尝试按AesExt排序时,当我想转换为int以便排序正确时,它将在none处爆炸,我知道过程中的循环是一个no no no,所以我认为我必须在C代码中这样做

存储过程

USE [Inventory]
GO
/****** Object:  StoredProcedure [dbo].[usp_GetExtList]    Script Date: 06/26/2011 21:07:06 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:      <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[usp_GetExtList]
    -- Add the parameters for the stored procedure here
@startRowIndex INT,
@maximumRows INT, 
@sortExpression AS VARCHAR(50),
@sortDirection AS VARCHAR(50),
@totalRows INT OUTPUT

AS

DECLARE @first_id INT
DECLARE @startRow INT

SET @startRowIndex =  ((@startRowIndex - 1)  * @maximumRows) +1

IF @startRowIndex = 1 
SET @startRowIndex = 1


SET ROWCOUNT @startRowIndex

SELECT @first_id = AesExt FROM ExtItem 

PRINT @first_id
SET ROWCOUNT @maximumRows

SELECT ExtensionGUID, AesExt,Name FROM ExtItem WHERE 
AesExt >= @first_id

/*ORDER BY CASE WHEN @sortExpression ='Name' AND @sortDirection = 'Ascending' THEN Name
                END ASC,
         CASE WHEN @sortExpression = 'Name' AND @sortDirection='Descending' THEN Name
                END DESC,
         CASE WHEN @sortExpression = 'AesExt' AND @sortDirection = 'Ascending' THEN AesExt
                END ASC,
         CASE WHEN @sortExpression = 'AesExt' AND @sortDirection='Descending' THEN AesExt
                END DESC,
         CASE WHEN @sortExpression = 'AgentExt' AND @sortDirection = 'Ascending' THEN AgentExt
                END ASC,
         CASE WHEN @sortExpression = 'AgentExt' AND @sortDirection='Descending' THEN AgentExt
                END DESC
 */

     SET ROWCOUNT 0
C#代码


非常感谢您的帮助

这已被放弃,我们现在使用Select Top作为存储过程。在使用GridView时向智者致词。。。要么全是,要么什么都不是,所以我们要用它来让它看起来漂亮,并处理所有的数据处理

Ranhiru。。。你是想发什么东西吗?它没有出现在这里,我也从来没有收到过电子邮件
SELECT @totalRows = COUNT(ExtensionGUID) FROM Extitem
 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
            BindData();
    }

    #region BIND DATA

    private void BindData()
    {
        string connectionString = @"Server=localhost\SQLEXPRESS;" + "Database=Inventory;Trusted_Connection=true";

        SqlConnection myConnection = new SqlConnection(connectionString);
        SqlCommand myCommand = new SqlCommand("usp_GetExtList", myConnection);

        myCommand.CommandType = CommandType.StoredProcedure;

        myCommand.Parameters.AddWithValue("@startRowIndex", currentPageNumber);
        myCommand.Parameters.AddWithValue("@maximumRows", PAGE_SIZE);
        myCommand.Parameters.AddWithValue("@sortExpression", SortExpression);
        myCommand.Parameters.AddWithValue("@sortDirection", GridViewSortDirection);
        myCommand.Parameters.Add("@totalRows", SqlDbType.Int, 4);
        myCommand.Parameters["@totalRows"].Direction =
                           ParameterDirection.Output;

        SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(myCommand);

        //DataSet ds = new DataSet();
       // ad.Fill(ds);
        DataTable dataTable = new DataTable();
        sqlDataAdapter.Fill(dataTable);

        DataView dataView = new DataView(dataTable);
        dataView.Sort = "AesExt ASC";
        gvProducts.DataSource = dataView;
        gvProducts.DataBind();

        // get the total rows 
        double totalRows = (int)myCommand.Parameters["@totalRows"].Value;

        lblTotalPages.Text = CalculateTotalPages(totalRows).ToString();

        lblCurrentPage.Text = currentPageNumber.ToString();

        if (currentPageNumber == 1)
        {
            Btn_Previous.Enabled = false;

            if (Int32.Parse(lblTotalPages.Text) > 0)
            {
                Btn_Next.Enabled = true;
            }
            else
                Btn_Next.Enabled = false;

        }

        else
        {
            Btn_Previous.Enabled = true;

            if (currentPageNumber == Int32.Parse(lblTotalPages.Text))
                Btn_Next.Enabled = false;
            else Btn_Next.Enabled = true;
        }
    }