0

ObjectDataSource 페이징을 사용하여 내 사이트에 사용자 지정 페이지를 추가하려고합니다. 나는 내가 필요로하는 저장 프로 시저를 올바르게 추가했다고 믿고 DAL과 BLL을 통해 가져왔다. 문제는 페이지에서 사용할 때 비어있는 DataGrid를 얻게된다는 것입니다. 정말 예상대로 데이터 층이 행동처럼 보인다 있도록 ASP.NET에서 사용자 지정 호출 문제가 발생했습니다.

<%@ 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에 false로 EnablePaging를 설정하고 마크 업에 주석 StartRowIndex 및 MaximumRows PARAMS를 추가

, 나는 데이터를 얻을. 코드 파일에는 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))  
    } 
} 
+0

페이지의 코드 숨김에서 무엇을하고 있든, 어둠 속에서도 viewstate를 비활성화했습니다. – RubbleFord

+0

안녕하세요. 나는 뒤에 코드를 추가했다. – JohnCC

답변

0

어둠 속에서 야생 찌르기 : StartRowIndex DefaultValue를 1로 설정하면 어떻게됩니까?

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

안녕 Luhmann. 이러한 매개 변수는 디버깅에만 사용됩니다. 페이징을 사용하면 ObjectDataSource가 자동으로 BLL에 제공합니다. 페이징을 사용하지 않고 표준 databinding을 테스트하기를 원한다면 올바른 메소드가 호출되도록 이들을 넣어야합니다. StartRowIndex를 1로 설정하면 예상대로 처음 10 개의 행을 얻습니다! 그러나 EnabledPaging = "false"일 때만. – JohnCC

0

안녕하세요 Johncc 나는 동일한 문제가있어서 마침내 자정에 범인을 해고 할 수있었습니다. 이 문제는 나에게 악몽을 주었다. 나는 그것을 고칠 수있어서 기쁘다. 해결책은 간단합니다.

내 계산 방법은 데이터를 저장하는 것이 었습니다. 그러나 일부 데이터 형식이 일치하지 않습니다. 내가 카운트를 하드 코딩하면.

return 16

작동 것입니다하지만 난 INT 변수에 바인딩과 변수를 반환 할 경우 작업을 wouldnt. 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; 
    } 

데이터 유형에 일부 불일치가 있습니다. 이제 바람처럼 작동합니다.

관련 문제