Lets say I have an object
class Person {
public string Name { get; set; }
public int Age { get; set; }
}
And that object is retrieved from a Factory (ie Can’t use SQLDataSource or anything like that)
Person person = PersonFactory.GetPerson();
How can I two-way DataBind the two properties to Textboxes on a web form? I looked into FormView, but that doesn’t seem to fit my needs as I am not iterating over a collection of objects. And when I tried to use it, I don’t seem to be getting the posted values in the Person object in the FormUpdated event. And I am binding like this
Markup
<asp:Textbox Text=<%# Bind("Name") %> />
Code behind
FormView1.DataSource = new List() { person };
FormView1.DataBind();
I feel like I am missing something really obvious. Should I be using a FormView? It doesn’t seem like it a proper fit for simple data binding, but the <#% Bind %> method must be in some type of container — is there a more suitable object?
You need to handle the updates to your FormView – the updates in the asp.net databound controls are not automatic. I’d also consider using an ObjectDataSource – keeping your binding all in the markup can make things easier to find. When you use the ObjectDataSource – it’ll automatically wrap your single object in an IEnumerable, so binding to a method that returns a Person is acceptable. You could also consider using a DetailsView if you don’t want to write out the form yoruself. In your case, you could do the following
And to facilitate this, you’d need an UpdateMethod(Person) method on your PersonFactory class. Doing it this way eliminates your binding from the codebehind, and will allow your updates to your person object to be persisted to your data store without you having to handle the update events yourself.