2010-03-31 17 views
0

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還沒有綁定到任何數據源?

感謝名單

回答

1

我無法解釋爲什麼在頁面生命週期是是這樣的,可能有事情做與父對象之前渲染的孩子的。什麼時候你在PollBox控件中調用.DataBind()?嘗試將其移入生命週期後期的事件,如PreRender。

還有另一種方法來確保它按照您想要的方式工作: 訂閱RowDataBound事件,使用.FindControl(「YourPollBoxID」)獲取控件當前綁定行的實例,設置屬性和執行一個manuall .DataBind();