0

我正在尝试使用 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>

当我在 ODS 上将 EnablePaging 设置为 false 并在标记中添加注释掉的 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))       
    }
}
4

2 回答 2

0

嗨,Johncc,我遇到了同样的问题,上周五午夜终于能够破解罪魁祸首。天哪,这个问题让我做噩梦,我很高兴我解决了它。解决方案很简单。

我的计数方法是返回数据。但似乎存在一些数据类型不匹配。如果我将计数硬编码为 .

return 16

它会起作用,但如果我将它绑定到一个 int 变量并返回它不会起作用的变量。如果您硬编码为 16,则它是一个 struct system.Int32 数据类型,但如果您返回一个 int 变量,它只是一个 Int32 变量。我认为问题出在这里。

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

然后经过长时间的搜索,幸运的是我在某个地方找到了这个解决方案。我将 count 方法的返回类型更改为 static int

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

数据类型存在一些不匹配。它现在像微风一样工作

于 2010-05-10T12:09:30.913 回答
0

黑暗中的野刺:如果将 StartRowIndex DefaultValue 设置为 1 会发生什么?

<asp:Parameter Name="StartRowIndex" Type="Int32" DefaultValue="1" />
<asp:Parameter Name="MaximumRows" Type="Int32" DefaultValue="10" />
于 2010-03-01T17:04:12.940 回答