Автоматично обвързване на ASP.NET ObjectDataSource с повторител - възможно ли е?

Имам клас Въпроси:

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

Сега правя ICollection от тях достъпни чрез ObjectDataSource и ги показвам с помощта на Repeater, свързан с DataSource. Използвам ‹%#Eval("Question")%> за показване на въпроса и използвам текстово поле и ‹%#Bind("Answer")%> за приемете отговор.

Ако моят ObjectDataSource върне три обекта Question, тогава моят Repeater показва трите въпроса с TextBox след всеки въпрос, за да може потребителят да даде отговор.

Засега работи чудесно.

Сега искам да взема отговора на потребителя и да го върна обратно в съответните класове Въпроси, които след това ще продължа.

Със сигурност рамката трябва да се погрижи за всичко това вместо мен? Използвах метода Bind, посочих DataSourceID, посочих метод Update в моя клас ObjectDataSource, но изглежда няма начин действително да стартирам цялото нещо.

Опитах се да добавя команден бутон и в кода зад извикването на MyDataSource.Update(), но той се опитва да извика моя метод за актуализиране без параметри, вместо параметъра Question, който очаква.

Със сигурност има лесен начин да постигнете всичко това с малко или никакъв код?

Изглежда, че всички части са там, но липсва малко лепило, за да ги залепи всички заедно.

Помогне!

Антъни


person littlecharva    schedule 09.09.2008    source източник


Отговори (4)


Трябва да обработите събитието за обратно изпращане (щракване върху бутон или каквото и да е), след което да изброите елементите на ретранслатора по следния начин:

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
}
person Ben Scheirman    schedule 09.09.2008
comment
DataItem винаги е нула, така че това не е валидно. - person paulwhit; 21.03.2009
comment
как връзваш повторителя? DataItem не трябва да е нула. - person Ben Scheirman; 21.03.2009

Методът на свързване наистина не е за ретранслатора, той е по-скоро за изгледа на формуляра или мрежата, където редактирате само един елемент в списъка, а не всеки елемент в списъка.

И на двете щракнете върху бутон за редактиране, който след това ви дава обвързаните контроли (обвързани чрез свързване) и след това натиснете връзката за запазване, която автоматично записва елемента обратно във вашия източник на данни без никакъв код зад него.

person Solmead    schedule 09.09.2008

Тогава какъв е смисълът в метода Bind (за разлика от метода Eval), ако трябва да обвържа всичко архивно ръчно при обратно изпращане?

person littlecharva    schedule 09.09.2008

Бен: След като го опитах, item.DataItem винаги е null и според следната публикация не е проектиран да се използва по този начин:

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

И така, как, за бога, да го вържа ръчно обратно?

person littlecharva    schedule 10.09.2008