2008-09-09 3 views
1

У меня есть класс Вопрос:ASP.NET ObjectDataSource Binding автоматически для повторителя - возможно?

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

Теперь я делаю ICollection из них доступны через ObjectDataSource, и отображать их с помощью Repeater, связанного с DataSource. Я использую <% # Eval («Question»)%>, чтобы отобразить вопрос, и я использую TextBox и <% # Bind («Ответ»)%>, чтобы принять ответ.

Если мой объект ObjectDataSource возвращает три объекта Question, мой ретранслятор отображает три вопроса с помощью TextBox после каждого вопроса, чтобы пользователь дал ответ.

Пока это отлично работает.

Теперь я хочу принять ответ пользователя и вернуть его в соответствующие классы Вопросов, которые я сохраню.

Несомненно, структура должна позаботиться обо всем этом для меня? Я использовал метод Bind, я указал DataSourceID, я указал метод Update в моем классе ObjectDataSource, но, похоже, нет никакого способа начать все это.

Я попытался добавить кнопку Command и код, вызывающий MyDataSource.Update(), но он пытается вызвать мой метод Update без параметров, а не параметр Question, который он ожидает.

Несомненно, есть простой способ достичь всего этого с небольшим или отсутствующим кодом?

Кажется, что все биты есть, но есть некоторый клей отсутствует, чтобы соединить их все вместе.

Помощь!

Энтони

ответ

1

Вы должны обрабатывать событие обратной передачи (кнопка щелчка или любой другой), а затем перечислить элементы повторителя, как это:

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 
} 
+0

DataItem всегда имеет значение null, поэтому это недопустимо. – paulwhit 2009-03-20 21:26:31

0

Тогда какой смысл в методе Bind (в отличие от Eval), если мне нужно связать все резервное копирование вручную при обратной передаче?

1

Метод привязки действительно не для ретранслятора, это больше для формы или gridview, где вы редактируете только один элемент в списке, а не каждый элемент в списке.

Нажимайте на кнопку редактирования, которая затем дает вам связанные элементы управления (связанные с помощью bind), а затем удаляет ссылку сохранения, которая автоматически сохраняет элемент обратно в ваш источник данных без какого-либо кода.