完全失去了 - 数据绑定GridView的模板

完全失去了 - 数据绑定GridView的模板

问题描述:

1)在aspx页面内的表达式,我们定义了一个名为GridView控件gvwPolls,它的模板中,我们定义了一个名为pollBox1完全失去了 - 数据绑定GridView的模板

<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> 

一)我假设用户控制那gvwPolls的模板,gvwPollBox1.DataBind之前调用PollID='<%# Eval("ID") %>'<%# Eval("QuestionText") %>表达式得到评估?!

B)有人可以提供一些解释如何或为何gvwPollBox1.DataBind称为PollID='<%# Eval("ID") %>'<%# Eval("QuestionText") %>表现得到评估之前?

2)继续上述示例:

- pollBox1用户控制定义了一个名为一个中继器控制rptOptions

<asp:Repeater runat="server" ID="rptOptions"> 
    <ItemTemplate> 
     <%# Eval("pollBoxTitle") %> 
    </ItemTemplate> 
</asp:Repeater> 

- 在pollBox1的代码隐藏文件我们绑定rptOptions内部数据源DoBinding()方法。

- 我们还覆盖pollBox1的DataBind()方法:

public override void DataBind() 
    { 
     base.DataBind(); 
     DoBinding(); 
    } 

一个)我假定由于重写pollBox1.DataBind(),数据绑定表达式<%# Eval("pollBoxTitle") %>(内侧rptOptions的定义模板)将在得到评估之前致电DoBinding方法?如果是这样,<%# Eval("pollBoxTitle") %>之前会不会rptOptions实际上绑定到数据源?

b)中如果是这样的情况下,如何然后是rptOptions能够从数据源中提取的值(从数据源的pollBoxtitle属性),如果此时的<%# Eval("pollBoxTitle") %> 表达得到了评价,rptOptions还没有绑定到任何数据源?

感谢名单

我无法解释为什么在页面生命周期是是这样的,可能有事情做与父对象之前渲染的孩子的。什么时候你在PollBox控件中调用.DataBind()?尝试将其移入生命周期后期的事件,如PreRender。

还有另一种方法来确保它按照您想要的方式工作: 订阅RowDataBound事件,使用.FindControl(“YourPollBoxID”)获取控件当前绑定行的实例,设置属性和执行一个manuall .DataBind();