문제

질문 수업이 있습니다.

class Question {
    public int QuestionNumber { get; set; }
    public string Question { get; set; }
    public string Answer { get; set; }
}

이제 ObjectDataSource를 통해 사용할 수 있는 ICollection을 만들고 DataSource에 바인딩된 반복기를 사용하여 표시합니다.나는 사용한다 <%#Eval("질문")%> 질문을 표시하기 위해 TextBox를 사용하고 <%#Bind("답변")%> 답변을 수락합니다.

내 ObjectDataSource가 세 개의 질문 개체를 반환하는 경우 내 Repeater는 사용자가 답변을 제공할 수 있도록 각 질문 뒤에 TextBox와 함께 세 개의 질문을 표시합니다.

지금까지는 훌륭하게 작동합니다.

이제 사용자의 응답을 받아 관련 질문 클래스에 다시 넣고 이를 지속하겠습니다.

확실히 프레임워크가 이 모든 것을 처리해야 할까요?Bind 메서드를 사용하고, DataSourceID를 지정하고, ObjectDataSource 클래스에 Update 메서드를 지정했지만 실제로 모든 작업을 시작할 수 있는 방법은 없는 것 같습니다.

MyDataSource.Update()를 호출하는 코드 뒤에 명령 단추를 추가하려고 시도했지만 예상한 질문 매개 변수가 아닌 매개 변수 없이 업데이트 메서드를 호출하려고 시도했습니다.

코드 숨김이 거의 또는 전혀 없이 이 모든 것을 달성할 수 있는 쉬운 방법이 있습니까?

모든 부품이 있는 것처럼 보이지만, 모두 함께 붙이기에는 접착제가 부족합니다.

돕다!

앤서니

도움이 되었습니까?

해결책

포스트백 이벤트(버튼 클릭 등)를 처리한 다음 다음과 같이 반복 레이아웃 항목을 열거해야 합니다.

foreach(RepeaterItem item in rptQuestions.Items)
{
   //pull out question
   var question = (Question)item.DataItem;
   question.Answer = ((TextBox)item.FindControl("txtAnswer")).Text;

   question.Save() ?  <--- not sure what you want to do with it
}

다른 팁

바인드 방법은 실제로 반복기를 위한 것이 아니라 목록의 모든 항목이 아닌 목록의 한 항목만 편집하는 formview 또는 Gridview에 더 적합합니다.

두 가지 모두에서 편집 버튼을 클릭하면 바인딩된 컨트롤(바인딩을 사용하여 바인딩됨)이 제공되고 저장 링크를 누르면 코드 뒤에 항목이 없이 데이터 소스에 항목이 자동으로 저장됩니다.

그렇다면 포스트백 시 모든 백업을 수동으로 바인딩해야 하는 경우 Eval 메서드와 반대되는 Bind 메서드의 요점은 무엇입니까?

벤:시도해 본 결과 item.DataItem은 항상 null이며 다음 게시물에 따르면 그런 식으로 사용하도록 설계되지 않았습니다.

http://www.netnewsgroups.net/group/microsoft.public.dotnet.framework.aspnet/topic4049.aspx

그렇다면 도대체 어떻게 수동으로 다시 바인딩합니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top