ASP.NET ObjectDataSource自动绑定到转发器 - 可能吗?

时间:2008-09-09 18:04:25

标签: asp.net repeater bind objectdatasource

我有一个问题类:

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

现在我通过ObjectDataSource对这些ICollection进行ICollection,并使用绑定到DataSource的Repeater显示它们。我使用&lt;%#Eval(“Question”)%&gt; 来显示问题,并使用TextBox和&lt;%#Bind(“Answer”)%&gt; < / strong>接受答案。

如果我的ObjectDataSource返回三个Question对象,那么我的Repeater会在每个问题后面显示三个问题,以便用户提供答案。

到目前为止,效果很好。

现在我想接受用户的回复并将其重新放回相关的问题类中,然后我将继续这样做。

框架当然应该为我解决所有这些问题?我已经使用了Bind方法,我已经指定了一个DataSourceID,我已经在我的ObjectDataSource类中指定了一个Update方法,但似乎没有办法真正启动整个方法。

我尝试添加一个Command按钮并在调用MyDataSource.Update()后面的代码中,但是它尝试使用没有参数的调用我的Update方法,而不是它期望的Question参数。

肯定有一种简单的方法可以在很少或没有代码隐藏的情况下实现所有这些目标?

似乎所有的东西都存在,但是缺少一些粘合剂将它们粘在一起。

帮助!

安东尼

4 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:1)

bind方法实际上不适用于转发器,它更适用于formview或gridview,您只需编辑列表中的一个项目而不是列表中的每个项目。

在你同时点击一个编辑按钮然后给你绑定的控件(使用bind绑定),然后点击保存链接,自动将项目保存回你的数据源而不需要任何代码。

答案 2 :(得分:0)

然后,如果我必须在回发时手动绑定所有内容,那么Bind方法(与Eval方法相反)的重点是什么?

答案 3 :(得分:0)

Ben:尝试过之后,item.DataItem始终为null,并且根据以下帖子,它不是设计为以这种方式使用:

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

那么我该如何手动绑回它呢?