2008-09-09 52 views
1

我有一个问题类:ASP.NET ObjectDataSource自动绑定到Repeater - 可能吗?

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

现在我把这些可用的ICollection的通过ObjectDataSource控件,并使用绑定到数据源中继器显示出来。我使用<%#Eval(“Question”)%>来显示问题,并使用TextBox和<%#Bind(“Answer”)%>接受答案。

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

到目前为止它效果很好。

现在我想要接受用户的回答,并将其放回相关的问题类中,然后我将坚持。

当然框架应该照顾所有这些对我来说?我已经使用了绑定方法,我已经指定了一个DataSourceID,我在ObjectDataSource类中指定了一个Update方法,但似乎没有办法实际开始整个事情。

我试着在调用MyDataSource.Update()的代码中添加一个Command按钮,但它试图调用我的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始终为空,所以这是无效的。 – paulwhit 2009-03-20 21:26:31

0

那么什么是在Bind方法点(而不是在Eval方法)如果我必须手动绑定所有东西回发?

1

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

在这两个你点击一个编辑按钮,然后给你绑定控件(绑定使用绑定),然后点击保存链接自动将项目保存到您的数据源没有任何代码后面。