2012-11-22 53 views
2

我試圖在ListView的LayoutTemplate中使用數據綁定表達式(例如<%# PageProperty %>)。在回發的ListView的LayoutTemplate內的數據綁定表達式

資源我看:

Access a control inside a the LayoutTemplate of a ListView

Get public string in codebehind into LayoutTemplate of ListView

http://forums.asp.net/p/1201992/3319344.aspx

http://www.codeproject.com/Articles/42962/Databind-Expression-in-ListView-LayoutTemplate

我能順利拿到數據綁定表達式同時使用的初始數據綁定工作以下方法:

protected void lvwExample_OnLayoutCreated(object sender, EventArgs e) { 
     lvwExample.Controls[0].DataBind();   
} 

protected void lvwExample_OnLayoutCreated(object sender, EventArgs e) {   
     ListView lv = lvwExample ; 
     Control template = new Control(); 
     lv.LayoutTemplate.InstantiateIn(template); 
     template.DataBind(); // resolve the problem 
     // remove current layout (without databind expressions) 
     lv.Controls.RemoveAt(0); 
     //add again the layout but with databound content 
     lv.Controls.Add(template);   

} 

的問題是,當列表視圖是反彈(listView.DataBind())在回發數據綁定表達式從佈局模板丟失。 之前的數據綁定表達式現在是模板中的靜態文本。

它工作正常時,ViewState被禁用的ListView,但ViewState是在這種情況下,需要維護分頁和排序(我相信視圖狀態是必需的,但我沒有真的看着它,可能處於控制狀態)。

我能做些什麼來得到這個工作?

回答

2

我有一個解決方案/解決方法似乎工作正常。

我所做的是包裹布局模板內容2個服務器端控件內的列表視圖我呼籲這兩個控件databind()(phHeader和phFooter)調用databind()後(佔位符)

   <LayoutTemplate> 
       <asp:PlaceHolder runat="server" ID="phHeader"> 
       ...   
       </asp:PlaceHolder> 
       <asp:PlaceHolder runat="server" ID="itmPlaceholder"></asp:PlaceHolder> <!-- ItemTemplate holder--> 
       <asp:PlaceHolder runat="server" ID="phFooter"> 
       ... 
       </asp:PlaceHolder> 
      </LayoutTemplate> 

伊辛的listview的FindControl方法。

數據綁定conrols在onLayoutCreated事件處理程序中不起作用。通常它會導致listview的佈局模板內容的狀態爲1回發過期。

我不認爲viewstate開啓或關閉對此解決方案/解決方法有任何影響。