我需要構建一個帶有DetailsView的網頁,其中包含一組文本框以及綁定到ObjectContainerDataSource的下拉列表。這是使用InsertItemTemplate進行單向綁定的。在DetailsView中動態添加TemplateField並不會設置綁定屬性
我可以很容易地得到這兩個文本框和下拉列表使用靜態定義的字段,但是我的特殊情況需要在運行時添加字段,因爲網頁需要高度可配置。
對於文本框,通過BoundField類很容易,但是當我嘗試使用TemplateField作爲下拉列表時,這一切都變得非常糟糕。我已經嘗試了許多不同的方法,包括編寫自己的TemplateField類,並使用CompiledBindableTemplateBuilder直接設置InsertItemTemplate。但不管我做什麼,基本問題是在單擊插入按鈕後,TemplateFields不會綁定到對象數據源。我相信這是因爲InsertItemTemplate在回發時爲空(請注意,當所有字段都以標記聲明時,InsertItemTemplate不爲空)。如果有人已經完成了我想要做的事情,請回復,因爲我現在已經完成了我的繫繩。
我已經恢復回模板字段內的簡單文本框以進行概念證明,但它也不起作用。我粘貼了我在下面所做的。在這種情況下,我試圖將TextBox輸入綁定到名爲「CustomerRef」的屬性。我認爲我的問題可能與我如何設置Text屬性有關,但我無法找到任何其他方式將Text屬性設置爲在後面的代碼中綁定(...)。
這是我插入我的模板領域:
var tf = new TemplateField();
tf.InsertItemTemplate = new CompiledBindableTemplateBuilder(delegate(Control container)
{
TextBox text = new TextBox();
text.ID = "MyTextBoxId";
text.Attributes.Add("Text", "<%# Bind(\"CustomerRef\") %>");
container.Controls.Add(text);
},
delegate(Control container)
{ // I've tried throwing an exception in here but it never gets executed
OrderedDictionary dict = new OrderedDictionary();
dict["CustomerRef"] = ((TextBox)container.Controls[0]).Text;
return dict;
});
而且這是我的字段添加到我的DetailsView的字段列表:
ShipmentSearchView.Fields.Add(tf);
我把一些文字的文本框,然後按插入按鈕...然後在插入事件的事件處理程序中,我嘗試獲取像這樣的數據源:
var dataSource = e.Instance as MyClassName;
此時在調試環境中,我注意到有問題的字段不再具有InsertItemTemplate - 它是null,並且未設置MyCustomerRef。
我曾嘗試在Page_Load()中的各個位置添加字段 - 在每次回發時只在第一次加載時;在Page_Init()中,也在Details View的Init()事件中,但它似乎從未如此做過。提前感謝您對此問題的任何幫助。