Проблемы сортировки и разбиения на страницы с хранимыми процедурами SQL и GridView - PullRequest
0 голосов
/ 27 июня 2011

Я пытался найти хорошее решение, гуглящее вокруг, и у меня мало успеха в моем текущем проекте по реализации настраиваемой подкачки и сортировки на элементе управления ASp GridView (.NET 4.0).

Этосамый последний сайт, который я пытался использовать в качестве базы для выполнения этой задачи: http://www.codeproject.com/KB/webforms/GridViewCustomPaging.aspx

Самая большая проблема, с которой я столкнулся при таком решении, состоит в том, что его пример FirstID является целым числом, а также его ProductID, и я использую GUID какмой уникальный идентификатор.Это, очевидно, вызывает проблемы, когда я пытаюсь заказать это или что-то подобное.Я попытался использовать другой столбец (AesExt varchar (50)), но он тоже не работает, в основном, по какой-то причине он продолжает сохранять строку верхнего ряда.Мне также нужно реализовать сортировку, поэтому, когда я возвращаю процедуру в C #, я помещаю ее в Datatable и использую DataView для выполнения сортировки.Мне было интересно, есть ли у кого-нибудь лучшее решение для этого сценария, которым они могли бы поделиться или показать мне, что я делаю правильно.Я также пытался найти хороший способ сделать сортировку в процедуре, но она не сработает, потому что мой босс хотел расширение как varchar (50), потому что нет записей (лично я думаю, что это должно быть 0).Поэтому, когда я пытаюсь отсортировать по AesExt, когда я хочу преобразовать в int, чтобы сортировка работала правильно, она взорвалась ни при чем, и я знаю, что зацикливание в процедуре - нет, нет, поэтому я застрял, делая это в коде 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

- Получить общее количество строк

SELECT @totalRows = COUNT(ExtensionGUID) FROM Extitem

Код C #

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

Любая помощь значительнооценили!

1 Ответ

0 голосов
/ 29 июня 2011

Это было отменено, и теперь мы используем Select Top в качестве хранимой процедуры.Слово мудрому при использовании GridView ... это все или ничего, поэтому мы просто собираемся использовать его, чтобы он выглядел хорошо и обрабатывал всю обработку данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...