1

인사말!적절한 ObjectDataSource 사용

GridView 컨트롤에 데이터를 표시 할 사용자 정의 컨트롤을 만들고 있습니다. 우리는 n-tier 아키텍처를 사용하고 있으며 문제의 데이터는 데이터베이스에서 검색되어 ReadOnlyCollection으로 반환됩니다. OurNewObject는 여러 속성을 포함하는 클래스이고 매개 변수를 사용하지 않는 빈 생성자입니다.이 이름은 다음 네임 스페이스에 있습니다. Acme.ObjectModel. 사용자 정의 컨트롤에서

, 나는 다음과 같은 한 :

public ReadOnlyCollection<OurNewObject> GetTopUsers() 
{ 
    return (OurDataProxy.GetJustTheTopUsers()); 
} 

가 나는에 사용자 컨트롤을 배치 :

<asp:GridView ID="ourGrid" runat="server" DataSourceID="ourDataSource"> 
    <columns> 
    <asp:BoundField DataField="Name" HeaderText="Full Name" /> 
    <asp:BoundField DataField="Gender" HeaderText="Gender" /> 
    <asp:BoundField DataField="BirthYear" HeaderText="Year of Birth" /> 
    <asp:BoundField DataField="JoinDate" HeaderText="Date Joined" /> 
    </columns> 
</asp:GridView> 
<asp:ObjectDataSource ID="ourDataSource" runat="server" SelectMethod="GetTopUsers" TypeName="Acme.Model.OurNewObject"> 
</asp:ObjectDataSource> 

을 사용자 정의 컨트롤의 코드에서 뒤에, 나는 다음과 같은 공공 방법을 웹 양식을 작성하고 실행하면 다음 메시지가 나타납니다.

ObjectDataSource 'ourDataSource'가 pa가없는 일반 메소드 'GetTopUsers'를 찾을 수 없습니다. rameters.

그래서 제 질문은 다음과 같습니다

  1. 것은 내가 ObjectDataSource를 잘못을 사용하고 있습니까?
  2. 이 상황에서 ObjectDataSource를 사용하는 더 적절한 방법이 있습니까?

감사합니다.

답변

0

저는 두 가지 속성이 없다고 생각합니다. 당신의 GetTopUsers에

먼저() 메소드에이 속성

[System.ComponentModel.DataObject] 
+0

문제는 OurNewObject가 다른 어셈블리에 정의되어 있으므로 해당 특성을 추가 할 수 없다는 것입니다. – Bullines

+0

그런 다음 다른 방식으로 바인딩해야합니다. 컬렉션을 가져 와서 데이터 소스를 설정 한 다음 코드 숨김에서 databind를 호출하십시오. –

0

시도 DataKeyNames는 (기본 키를 추가) 추가 속성을 추가 실제 OurNewObject 클래스에 다음이 속성

[System.ComponentModel.DataObjectMethodAttribute 
    (System.ComponentModel.DataObjectMethodType.Select, true)] 

를 추가 GridView 그리고 작동하는지 확인하십시오.

2

일반적으로 코드 숨김에 메서드를 넣는 대신 데이터 액세스 메서드가 포함 된 별도의 개체를 만듭니다. 개별 객체는 인스턴스 또는 정적 일 수 있지만 객체 자체에는 매개 변수없는 생성자가 있어야합니다 (또는 생성자가 전혀 없어야 함).

또한 ObjectDataSource의 TypeName 속성은 위에서 언급 한 별도 개체의 typename을 참조해야합니다. 실시 예 : 상술 한

public class SampleDataObject 
{ 
    public ICollection<OurNewObject> GetTopUsers() 
    { 
    //[...] 
    } 
} 

속성 : [System.ComponentModel.DataObject는 (TRUE) 상기 게터 메소드의 클래스 레벨 및 [System.ComponentModel.DataObjectMethod (DataObjectMethodType.Select)]에 있지 필요하지만 ObjectDataSource를 최대로 연결하기 위해 클래스를 찾을 때 다른 유형을 필터링하여 디자인 타임 지원을 도와줍니다.