적절한 ObjectDatasource 사용
-
08-07-2019 - |
문제
인사말!
GridView 컨트롤에 데이터를 표시 할 사용자 컨트롤을 만들고 있습니다. 우리는 N-Tier Architecture를 사용하고 있으며 해당 데이터는 데이터베이스에서 검색되어 ReadonLyCollection으로 우리에게 반환됩니다. ournewobject는 여러 속성을 포함하는 클래스와 매개 변수가없는 빈 생성자입니다. 다음 네임 스페이스에 있습니다 : acme.objectmodel.
사용자 컨트롤에는 다음과 같은 것이 있습니다.
<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>
사용자 컨트롤 코드 뒤에는 다음과 같은 공개 방법이 있습니다.
public ReadOnlyCollection<OurNewObject> GetTopUsers()
{
return (OurDataProxy.GetJustTheTopUsers());
}
사용자 컨트롤을 웹 양식에 배치하고 실행하면 다음과 같은 메시지가 표시됩니다.
ObjectDataSource 'ourdatasource'는 매개 변수가없는 비 게 릭 방법 'gettopusers'를 찾을 수 없었습니다.
그래서 내 질문은 다음과 같습니다.
- ObjectDatasource를 잘못 사용하고 있습니까?
- 이 상황에서 ObjectDatasource를 사용하는 더 적절한 방법이 있습니까?
감사.
해결책
나는이 문제에 두 가지 속성이 없다고 생각합니다.
먼저 getTopusers () 메소드 에서이 속성을 추가하십시오.
[System.ComponentModel.DataObjectMethodAttribute
(System.ComponentModel.DataObjectMethodType.Select, true)]
그런 다음 실제 ournewobject 클래스 에서이 속성을 추가하십시오
[System.ComponentModel.DataObject]
다른 팁
일반적으로 메소드를 코드 베어드에 넣는 대신 데이터 액세스 방법을 포함하는 별도의 개체를 만듭니다. 별도의 객체는 인스턴스 또는 정적 일 수 있지만 객체 자체에는 매개 변수가없는 생성자가 있어야합니다 (또는 생성자가 전혀 없음).
또한 ObjectDatasource의 타이프 이름 속성은 위에서 언급 한 별도의 개체의 타이프 이름을 참조해야합니다. 예시:
public class SampleDataObject
{
public ICollection<OurNewObject> GetTopUsers()
{
//[...]
}
}
위에서 언급 한 속성 : [system.componentmodel.dataobject (true)] 클래스 레벨에서, [system.componentmodel.dataobjectmethod (dataObjectMethodtype.Select)]는 필요하지 않지만 설계 시간 지원에 도움이됩니다. ObjectDatasource를 연결하는 클래스를 찾을 때 다른 유형을 필터링합니다.
추가 해보세요 DataKeyNames
(기본 키 추가) 속성에 GridView
그리고 그것이 작동하는지 보시겠습니까?