Проблема с настраиваемой подкачкой в ​​ASP.NET

Я пытаюсь добавить пользовательский пейджинг на свой сайт с помощью пейджинга ObjectDataSource. Я считаю, что правильно добавил хранимые процедуры, которые мне нужны, и перенес их через DAL и BLL. У меня проблема в том, что когда я пытаюсь использовать его на странице, я получаю пустую сетку данных.

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="PageTest.aspx.cs" Inherits="developer_PageTest" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>

</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ObjectDataSource ID="ObjectDataSource1" SelectMethod="GetMessagesPaged" EnablePaging="true"
            SelectCountMethod="GetMessagesCount" TypeName="MessageTable" runat="server" >
            <SelectParameters>
                <asp:Parameter Name="DeviceID" Type="Int32" DefaultValue="112" />
                <asp:Parameter Name="StartDate" Type="DateTime" DefaultValue="" ConvertEmptyStringToNull="true"/>
                <asp:Parameter Name="EndDate" Type="DateTime" DefaultValue="" ConvertEmptyStringToNull="true"/>
                <asp:Parameter Name="BasicMatch" Type="Boolean" ConvertEmptyStringToNull="true" DefaultValue="" />
                <asp:Parameter Name="ContainsPosition" Type="Boolean" ConvertEmptyStringToNull="true" DefaultValue="" />
                <asp:Parameter Name="Decoded" Type="Boolean" ConvertEmptyStringToNull="true" DefaultValue="" />
<%--                <asp:Parameter Name="StartRowIndex" Type="Int32" DefaultValue="10" />
                <asp:Parameter Name="MaximumRows" Type="Int32" DefaultValue="10" />
--%>            </SelectParameters>    
        </asp:ObjectDataSource>        

        <asp:GridView ID="GridView1" runat="server" DataSourceID="ObjectDataSource1" AllowPaging="true" PageSize="10"></asp:GridView>
        <br />

        <asp:Label runat="server" ID="lblCount"></asp:Label>

    </div>
    </form>
</body>
</html>

Когда я устанавливаю для параметра EnablePaging значение false в ODS и добавляю закомментированные параметры StartRowIndex и MaximumRows в разметку, я получаю данные, поэтому кажется, что уровень данных ведет себя так, как должен. В кодовом файле есть код для помещения значения вызова GetMessagesCount в lblCount, и это всегда имеет разумное значение.

Я попытался взломать BLL и пройти через него, и вызывается бэкэнд, и он возвращает то, что выглядит как правильная информация и данные, но каким-то образом между ODS и GridView он исчезает.

Я создал фиктивный источник данных, который возвращал пронумерованные строки случайных чисел, и прикрепил его к этой форме, и пользовательский пейджинг сработал, поэтому я думаю, что мое понимание техники хорошее. Я просто не могу понять, почему это терпит неудачу здесь!

Любая помощь действительно ценится.

(РЕДАКТИРОВАТЬ.. вот код позади).

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;

public partial class developer_PageTest : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        lblCount.Text = String.Format("Count = {0}", MessageTable.GetMessagesCount(112, null, null, null, null, null))       
    }
}

2 ответа

Дикий удар в темноте: что произойдет, если вы установите StartRowIndex DefaultValue равным 1?

<asp:Parameter Name="StartRowIndex" Type="Int32" DefaultValue="1" />
<asp:Parameter Name="MaximumRows" Type="Int32" DefaultValue="10" />

Привет, Джонкк. У меня была та же проблема, и я смог наконец-то взломать преступника в прошлую пятницу в полночь. Черт возьми, эта проблема доставляла мне кошмары, и я рад, что исправил это. Решение простое.

Мой метод подсчета был ретуринга данных. Но, похоже, существует некоторое несоответствие типов данных. Если я жестко закодировать счет как.

return 16

это будет работать, но если я свяжу его с переменной int и верну переменную, это не сработает. Если вы жестко закодировали как 16, это тип данных struct system.Int32, но если вы возвращаете переменную int, то это просто переменная Int32. Я думаю, что проблема заключается здесь.

public int GetsrchCount(BeginDate,EndDate)
{
    int intrec;
    intrec = 23;
    return intrec; 
 }

Затем после долгих поисков, к счастью, я нашел это решение где-нибудь. Я изменил тип возвращаемого значения моего метода подсчета на статический int

public static int GetsrchCount(DateTime BeginDate, DateTime EndDate)
    {
        int intrec;
        intrec = 23;
        return intrec; 
     }

Существует некоторое несоответствие типов данных. Теперь это работает как ветер

Другие вопросы по тегам