【发布时间】:2010-03-31 18:32:43
【问题描述】:
1) 在 aspx 页面上,我们定义了名为 gvwPolls 的 GridView 控件,在其模板中,我们定义了一个名为 pollBox1
的用户控件<asp:GridView ID="GridView1" DataSourceID="objPolls" ...>
<Columns>
<asp:TemplateField>
<ItemTemplate>
Question is : <%# Eval("QuestionText") %> <br />
<mb:PollBox ID="PollBox1" runat="server" PollID='<%# Eval("ID") %>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:ObjectDataSource ID="objPolls" ...></asp:ObjectDataSource>
a) 我假设在 gvwPolls 的 模板中,gvwPollBox1.DataBind 在PollID='<%# Eval("ID") %>' 和<%# Eval("QuestionText") %> 表达式被评估之前被调用?!
b) 有人可以解释在评估 PollID='<%# Eval("ID") %>' 和 <%# Eval("QuestionText") %> 表达式之前如何或为什么调用 gvwPollBox1.DataBind 吗?
2) 继续上面的例子:
-- pollBox1 用户控件定义了一个名为rptOptions的Repeater控件:
<asp:Repeater runat="server" ID="rptOptions">
<ItemTemplate>
<%# Eval("pollBoxTitle") %>
</ItemTemplate>
</asp:Repeater>
-- 在 pollBox1 的 代码隐藏文件中,我们将 rptOptions 绑定到 DoBinding() 方法内的数据源。
-- 我们还覆盖了 pollBox1 的 DataBind() 方法:
public override void DataBind()
{
base.DataBind();
DoBinding();
}
a) 我假设由于覆盖 pollBox1.DataBind(),数据绑定表达式 <%# Eval("pollBoxTitle") %>(在 rptOptions 模板中定义)将在 a调用 DoBinding 方法?如果是这样,那么<%# Eval("pollBoxTitle") %> 不会在 rptOptions 实际绑定到数据源之前得到评估吗?
b) 如果是这种情况,那么 rptOptions 如何能够从数据源中提取值(来自数据源的 pollBoxtitle 属性),如果当时<%# Eval("pollBoxTitle") %>
表达式已评估,rptOptions 尚未绑定到任何数据源?
感谢
【问题讨论】:
标签: asp.net data-binding gridview