2009-07-30 73 views
1

數據綁定可以說我有一個對象困惑在ASP.NET

class Person { 
    public string Name { get; set; } 
    public int Age { get; set; } 
} 

而該對象從工廠中檢索(即不能使用的SqlDataSource或類似的東西)

Person person = PersonFactory.GetPerson(); 

我怎樣才能雙向DataBind的兩個屬性到Web表單上的文本框?我看着FormView,但這似乎不符合我的需要,因爲我沒有迭代對象的集合。當我嘗試使用它時,我似乎無法獲取FormUpdated事件中Person對象中的發佈值。而我綁定這樣

標記

<asp:Textbox Text=<%# Bind("Name") %> /> 

代碼背後

FormView1.DataSource = new List() { person }; 
FormView1.DataBind(); 

我覺得我失去了一些東西真的很明顯。我應該使用FormView嗎?它似乎不適合簡​​單的數據綁定,但方法必須位於某種類型的容器中 - 是否有更合適的對象?

+0

我正在使用更新面板,如果有任何區別 – Bob 2009-07-30 18:25:49

回答

1

您需要處理更新到您的FormView - asp.net數據綁定控件中的更新不是自動的。我還會考慮使用ObjectDataSource - 將所有綁定保留在標記中可以使事情更容易找到。當您使用ObjectDataSource時,它會自動將您的單個對象包裝在IEnumerable中,因此綁定到返回Person的方法是可以接受的。如果您不想寫出表單yoruself,也可以考慮使用DetailsView。在你的情況,你可以做以下

<asp:FormView runat="server" DataSourceID="MyPersonDataSource"> ... </asp:FormView> 
<asp:ObjectDataSource runat="server" ID="MyPersonDataSource" 
    TypeName="PersonFactory" DataObjectTypeName="Person" 
    SelectMethod="GetPerson" UpdateMethod="UpdatePerson" /> 

,並促進這一點,你需要在你的PersonFactory類的UpdateMethod(人)的方法。這樣做可以消除您與代碼隱藏的綁定,並且可以讓您的個人對象更新持久保存到數據存儲中,而無需您自己處理更新事件。

1

嘗試在TextBox控件上調用DataBind方法。

protected override void OnLoad(EventArgs e) 
{ 
    base.OnLoad(e); 

    MyTextBox1.DataBind(); 
    MyTextBox2.DataBind(); 
} 

我從來沒有嘗試過做雙向之前正是這樣的結合,但使用綁定(「屬性」)語法,它應該以這種方式工作,據我所知。

如果調用DataBind方法不起作用,那麼FormView是您最好的選擇。

+0

文本框需要在容器中才能使用綁定。我現在使用FormView,但我似乎無法得到我的發佈值來反映在我的對象 – Bob 2009-07-30 17:53:05

+0

我想它必須在一個容器中。你如何檢查回發值?現在我想了解更多信息,我認爲您必須使用某種數據源,因爲這也是它會傳回這些更改的原因。 – 2009-07-30 18:19:29

-1
DataBinder.Eval(Container.DataItem, "Name") 

這應該做的伎倆,但我認爲你需要一些自己的事件處理做2路結合。