关于ASP.NET ObjectDataSource自动绑定到Repeater:ASP.NET ObjectDataSource自动绑定到Repeater-可能吗?

关于ASP.NET ObjectDataSource自动绑定到Repeater:ASP.NET ObjectDataSource自动绑定到Repeater-可能吗?

ASP.NET ObjectDataSource Binding Automatically to Repeater - Possible?

我有一个问题类:

1
2
3
4
5
class Question {
    public int QuestionNumber { get; set; }
    public string Question { get; set; }
    public string Answer { get; set; }
}

现在,我通过ObjectDataSource使它们的ICollection可用,并使用绑定到DataSource的Repeater来显示它们。我使用<%#Eval(" Question")%>显示问题,并使用TextBox和<%#Bind(" Answer")%>接受答案。

如果我的ObjectDataSource返回三个Question对象,那么我的Repeater将在每个问题之后显示三个问题以及一个文本框,以供用户提供答案。

到目前为止,效果很好。

现在,我想获取用户的响应,并将其放回到相关的Question类中,然后我将坚持下去。

当然,框架应该为我照顾所有这些吗?我使用了Bind方法,指定了DataSourceID,在ObjectDataSource类中指定了Update方法,但是似乎没有办法真正启动整个过程。

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

当然,有一种简单的方法可以在几乎没有代码隐藏的情况下实现所有这些目标?

似乎所有的碎片都在那儿,但是缺少一些胶水将它们粘在一起。

帮帮我!

安东尼


bind方法实际上不是针对中继器的,而是针对formview或gridview的,在这里您只编辑列表中的一个项目,而不是列表中的每个项目。

在两者上,您都单击一个编辑按钮,这将为您提供绑定控件(使用bind绑定),然后单击保存链接,该链接会将项目自动保存回您的数据源,而无需任何代码。


您必须处理回发事件(单击按钮或执行其他操作),然后枚举转发器项目,如下所示:

1
2
3
4
5
6
7
8
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
}

Ben:尝试过后,item.DataItem始终为null,根据以下文章,它并非旨在用于这种方式:

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

那么,究竟该如何手动将其绑定回去?


那么,如果我必须在回发时手动绑定所有备份内容,那么Bind方法(与Eval方法相对)又有什么意义呢?


推荐阅读