By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
443,494 Members | 1,079 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 443,494 IT Pros & Developers. It's quick & easy.

Binding custom object to formview

P: n/a
Hi,

I have an object, for example User. User contains various properties which i
have been able to bind to successfully using wizards and the form view.
However if the class User has a property which is not a string, for example
a custom type Address which contains properties such as StreetAddress, City,
County, Country etc how do i bind to those properties on the same form view?

I have tried doing Bind("Address.StreetAddress") but this just raises a
compile error?

Thanks for your help

Ash
Feb 19 '07 #1
Share this Question
Share on Google+
8 Replies


P: n/a

Me.txtOne.DataBindings.Add(New Binding("Text", Me.m_user,
"Address.StreetAddress"))
Me.txtTwo.DataBindings.Add(New Binding("Text", Me.m_user,
"Address.StreetAddress"))

try this.

it works in winforms. not sure about asp.net off hand.


"Ash" <As*@discussions.microsoft.comwrote in message
news:3D**********************************@microsof t.com...
Hi,

I have an object, for example User. User contains various properties which
i
have been able to bind to successfully using wizards and the form view.
However if the class User has a property which is not a string, for
example
a custom type Address which contains properties such as StreetAddress,
City,
County, Country etc how do i bind to those properties on the same form
view?
>
I have tried doing Bind("Address.StreetAddress") but this just raises a
compile error?

Thanks for your help

Ash

Feb 19 '07 #2

P: n/a
Hi Ash,

Bind() method does not support complex binding expressions (i.e. set a
property of object-type property as you presented), but Eval() does.
Unfortunatelly, Eval() can only be used to evaluate expression when data is
bound (one way), and not to read changed value back. So you if go for Eval,
you will end up handling FormView's events to set insertparameters or
updateparanmeters manually.

--
Milosz
"Ash" wrote:
Hi,

I have an object, for example User. User contains various properties which i
have been able to bind to successfully using wizards and the form view.
However if the class User has a property which is not a string, for example
a custom type Address which contains properties such as StreetAddress, City,
County, Country etc how do i bind to those properties on the same form view?

I have tried doing Bind("Address.StreetAddress") but this just raises a
compile error?

Thanks for your help

Ash
Feb 19 '07 #3

P: n/a

If it works , please post a response.

I'd like to know myself.



"sloan" <sl***@ipass.netwrote in message
news:%2***************@TK2MSFTNGP02.phx.gbl...
>
Me.txtOne.DataBindings.Add(New Binding("Text", Me.m_user,
"Address.StreetAddress"))
Me.txtTwo.DataBindings.Add(New Binding("Text", Me.m_user,
"Address.StreetAddress"))

try this.

it works in winforms. not sure about asp.net off hand.


"Ash" <As*@discussions.microsoft.comwrote in message
news:3D**********************************@microsof t.com...
Hi,

I have an object, for example User. User contains various properties
which
i
have been able to bind to successfully using wizards and the form view.
However if the class User has a property which is not a string, for
example
a custom type Address which contains properties such as StreetAddress,
City,
County, Country etc how do i bind to those properties on the same form
view?

I have tried doing Bind("Address.StreetAddress") but this just raises a
compile error?

Thanks for your help

Ash


Feb 19 '07 #4

P: n/a
Hi thanks for the information,

What about a GridView i have it displaying objects but if one of the
properties is an object itself of which i need a property of how would i
access that? for example below i BillingType is an object but I need to
access a property of that object?

<asp:BoundField DataField="BillingType" HeaderText="Billing Type"
SortExpression="BillingType" />

Thanks for your help

"Milosz Skalecki [MCAD]" wrote:
Hi Ash,

Bind() method does not support complex binding expressions (i.e. set a
property of object-type property as you presented), but Eval() does.
Unfortunatelly, Eval() can only be used to evaluate expression when data is
bound (one way), and not to read changed value back. So you if go for Eval,
you will end up handling FormView's events to set insertparameters or
updateparanmeters manually.

--
Milosz
"Ash" wrote:
Hi,

I have an object, for example User. User contains various properties which i
have been able to bind to successfully using wizards and the form view.
However if the class User has a property which is not a string, for example
a custom type Address which contains properties such as StreetAddress, City,
County, Country etc how do i bind to those properties on the same form view?

I have tried doing Bind("Address.StreetAddress") but this just raises a
compile error?

Thanks for your help

Ash
Feb 20 '07 #5

P: n/a
Hi there,

I think complex data binding also does not work for BoundField, you have to
use templatefield with Eval("Property.AnotherProperty")
--
Milosz
"Ash" wrote:
Hi thanks for the information,

What about a GridView i have it displaying objects but if one of the
properties is an object itself of which i need a property of how would i
access that? for example below i BillingType is an object but I need to
access a property of that object?

<asp:BoundField DataField="BillingType" HeaderText="Billing Type"
SortExpression="BillingType" />

Thanks for your help

"Milosz Skalecki [MCAD]" wrote:
Hi Ash,

Bind() method does not support complex binding expressions (i.e. set a
property of object-type property as you presented), but Eval() does.
Unfortunatelly, Eval() can only be used to evaluate expression when data is
bound (one way), and not to read changed value back. So you if go for Eval,
you will end up handling FormView's events to set insertparameters or
updateparanmeters manually.

--
Milosz
"Ash" wrote:
Hi,
>
I have an object, for example User. User contains various properties which i
have been able to bind to successfully using wizards and the form view.
However if the class User has a property which is not a string, for example
a custom type Address which contains properties such as StreetAddress, City,
County, Country etc how do i bind to those properties on the same form view?
>
I have tried doing Bind("Address.StreetAddress") but this just raises a
compile error?
>
Thanks for your help
>
Ash
Feb 20 '07 #6

P: n/a
Thanks for your responses they have been great help.

i have got everything to work so far but i am a bit confused as to where i
should put the event handeling you were discussing earlier about the update
and insert parameters when using Eval?

"So you if go for Eval, you will end up handling FormView's events to set
insertparameters or updateparanmeters manually.
"
How do i make sure that my code only gets executed not the formviews default
handeling?

Thanks
"Milosz Skalecki [MCAD]" wrote:
Hi there,

I think complex data binding also does not work for BoundField, you have to
use templatefield with Eval("Property.AnotherProperty")
--
Milosz
"Ash" wrote:
Hi thanks for the information,

What about a GridView i have it displaying objects but if one of the
properties is an object itself of which i need a property of how would i
access that? for example below i BillingType is an object but I need to
access a property of that object?

<asp:BoundField DataField="BillingType" HeaderText="Billing Type"
SortExpression="BillingType" />

Thanks for your help

"Milosz Skalecki [MCAD]" wrote:
Hi Ash,
>
Bind() method does not support complex binding expressions (i.e. set a
property of object-type property as you presented), but Eval() does.
Unfortunatelly, Eval() can only be used to evaluate expression when data is
bound (one way), and not to read changed value back. So you if go for Eval,
you will end up handling FormView's events to set insertparameters or
updateparanmeters manually.
>
--
Milosz
>
>
"Ash" wrote:
>
Hi,

I have an object, for example User. User contains various properties which i
have been able to bind to successfully using wizards and the form view.
However if the class User has a property which is not a string, for example
a custom type Address which contains properties such as StreetAddress, City,
County, Country etc how do i bind to those properties on the same form view?

I have tried doing Bind("Address.StreetAddress") but this just raises a
compile error?

Thanks for your help

Ash
Feb 20 '07 #7

P: n/a
Howdy,

Sorry, i meant handling objectdatasource events, of course if you use
formview in conjunction with any datasource control, if not i can't really
see the posint of using FormView for edit/insert operations. I prepared a
simple example:

-- begin aspx code --
<script runat="server">

private void SetPersonInaccessibleDetails(Person person)
{
if (person == null)
throw new NullReferenceException("person");

TextBox textBox = (TextBox)fv.FindControl("FirstNameTextBox");
person.Name.FirstName = textBox.Text;

textBox = (TextBox)fv.FindControl("LastNameTextBox");
person.Name.LastName = textBox.Text;
}
protected void ds_Inserting(object sender, ObjectDataSourceMethodEventArgs
e)
{
SetPersonInaccessibleDetails((Person)e.InputParame ters[0]);
}

protected void ds_Updating(object sender, ObjectDataSourceMethodEventArgs e)
{
SetPersonInaccessibleDetails((Person)e.InputParame ters[0]);
}
</script>

<asp:ObjectDataSource runat="server" ID="ds"
TypeName="PersonManager"
SelectMethod="Get" DataObjectTypeName="Person"
UpdateMethod="Update" InsertMethod="Insert"
OnInserting="ds_Inserting" OnUpdating="ds_Updating">
<SelectParameters>
<asp:Parameter Name="id" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>

<asp:FormView runat="server" ID="fv"
DefaultMode="Insert"
DataSourceID="ds"
DataKeyNames="Id">
<InsertItemTemplate>
Age:
<asp:TextBox ID="AgeTextBox" runat="server"
Text='<%# Bind("Age") %>'>
</asp:TextBox><br />
First Name:
<asp:TextBox ID="FirstNameTextBox" runat="server">
</asp:TextBox><br />
Last Name:
<asp:TextBox ID="LastNameTextBox" runat="server">
</asp:TextBox><br />
<asp:LinkButton ID="InsertButton" runat="server"
CausesValidation="True"
CommandName="Insert" Text="Insert">
</asp:LinkButton>
<asp:LinkButton ID="InsertCancelButton" runat="server"
CausesValidation="False" CommandName="Cancel"
Text="Cancel">
</asp:LinkButton>
</InsertItemTemplate>
<EditItemTemplate>
Age:
<asp:TextBox ID="AgeTextBox" runat="server"
Text='<%# Bind("Age") %>'>
</asp:TextBox><br />
First Name:
<asp:TextBox ID="FirstNameTextBox" runat="server"
Text='<%# Eval("Name.FirstName") %>'>
</asp:TextBox><br />
Last Name:
<asp:TextBox ID="LastNameTextBox" runat="server"
Text='<%# Eval("Name.LastName") %>'>
</asp:TextBox><br />
<asp:LinkButton ID="UpdateButton" runat="server"
CausesValidation="True" CommandName="Update" Text="Insert">
</asp:LinkButton>
<asp:LinkButton ID="UpdateCancelButton" runat="server"
CausesValidation="False" CommandName="Cancel"
Text="Cancel">
</asp:LinkButton>
</EditItemTemplate>
<ItemTemplate>
Id:
<asp:Label ID="IdLabel" runat="server"
Text='<%# Eval("Id") %>'></asp:Label><br />
Age:
<asp:Label ID="AgeLabel" runat="server"
Text='<%# Eval("Age") %>'></asp:Label><br />
Name:
<asp:Label ID="NameLabel" runat="server"
Text='<%# Eval("Name.FirstName") %>'/><br />
<asp:LinkButton ID="NewButton" runat="server"
CausesValidation="False" CommandName="New"
Text="New">
</asp:LinkButton>
</ItemTemplate>
</asp:FormView>

-- end aspx code --

-- begin c# code (separate file with pesudo: D business object --
-- end c# code --

/// <summary>
/// Summary description for ProductsBLL
/// </summary>
public class PersonManager
{

public void Update(Person person)
{
}

public void Insert(Person person)
{
//
}

private Random random = new Random();
public Person Get(int id)
{
string str = id.ToString();

Person person = new Person();

person.Id = id;
person.Age = this.random.Next(1, 100);
person.Name.FirstName = "FirstName" + str;
person.Name.LastName = "LastName" + str;

return person;
}
}
[Serializable]
public class Person
{

private int id;
/// <summary>
///
/// </summary>
public int Id
{
get
{
return this.id;
}
set
{
this.id = value;
}
}
private FullName fullName = new FullName();
public FullName Name
{
get
{
return this.fullName;
}
}

private int age = 18;
/// <summary>
///
/// </summary>
public int Age
{
get
{
return this.age;
}
set
{
if (value < 0)
throw new ArgumentOutOfRangeException();
this.age = value;
}
}

}

public class FullName
{
public FullName()
{
}

private string firstName;
/// <summary>
///
/// </summary>
public string FirstName
{
get
{
return this.firstName == null ?
String.Empty : this.lastName;
}
set
{
this.firstName = value;
}
}

private string lastName;
/// <summary>
///
/// </summary>
public string LastName
{
get
{
return this.lastName == null ?
String.Empty : this.lastName;
}
set
{
this.lastName = value;
}
}
}
--
Milosz
"Ash" wrote:
Thanks for your responses they have been great help.

i have got everything to work so far but i am a bit confused as to where i
should put the event handeling you were discussing earlier about the update
and insert parameters when using Eval?

"So you if go for Eval, you will end up handling FormView's events to set
insertparameters or updateparanmeters manually.
"
How do i make sure that my code only gets executed not the formviews default
handeling?

Thanks
"Milosz Skalecki [MCAD]" wrote:
Hi there,

I think complex data binding also does not work for BoundField, you have to
use templatefield with Eval("Property.AnotherProperty")
--
Milosz
"Ash" wrote:
Hi thanks for the information,
>
What about a GridView i have it displaying objects but if one of the
properties is an object itself of which i need a property of how would i
access that? for example below i BillingType is an object but I need to
access a property of that object?
>
<asp:BoundField DataField="BillingType" HeaderText="Billing Type"
SortExpression="BillingType" />
>
Thanks for your help
>
>
>
"Milosz Skalecki [MCAD]" wrote:
>
Hi Ash,

Bind() method does not support complex binding expressions (i.e. set a
property of object-type property as you presented), but Eval() does.
Unfortunatelly, Eval() can only be used to evaluate expression when data is
bound (one way), and not to read changed value back. So you if go for Eval,
you will end up handling FormView's events to set insertparameters or
updateparanmeters manually.

--
Milosz


"Ash" wrote:

Hi,
>
I have an object, for example User. User contains various properties which i
have been able to bind to successfully using wizards and the form view.
However if the class User has a property which is not a string, for example
a custom type Address which contains properties such as StreetAddress, City,
County, Country etc how do i bind to those properties on the same form view?
>
I have tried doing Bind("Address.StreetAddress") but this just raises a
compile error?
>
Thanks for your help
>
Ash
Feb 20 '07 #8

P: n/a
Thanks works great!

"Milosz Skalecki [MCAD]" wrote:
Howdy,

Sorry, i meant handling objectdatasource events, of course if you use
formview in conjunction with any datasource control, if not i can't really
see the posint of using FormView for edit/insert operations. I prepared a
simple example:

-- begin aspx code --
<script runat="server">

private void SetPersonInaccessibleDetails(Person person)
{
if (person == null)
throw new NullReferenceException("person");

TextBox textBox = (TextBox)fv.FindControl("FirstNameTextBox");
person.Name.FirstName = textBox.Text;

textBox = (TextBox)fv.FindControl("LastNameTextBox");
person.Name.LastName = textBox.Text;
}
protected void ds_Inserting(object sender, ObjectDataSourceMethodEventArgs
e)
{
SetPersonInaccessibleDetails((Person)e.InputParame ters[0]);
}

protected void ds_Updating(object sender, ObjectDataSourceMethodEventArgs e)
{
SetPersonInaccessibleDetails((Person)e.InputParame ters[0]);
}
</script>

<asp:ObjectDataSource runat="server" ID="ds"
TypeName="PersonManager"
SelectMethod="Get" DataObjectTypeName="Person"
UpdateMethod="Update" InsertMethod="Insert"
OnInserting="ds_Inserting" OnUpdating="ds_Updating">
<SelectParameters>
<asp:Parameter Name="id" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>

<asp:FormView runat="server" ID="fv"
DefaultMode="Insert"
DataSourceID="ds"
DataKeyNames="Id">
<InsertItemTemplate>
Age:
<asp:TextBox ID="AgeTextBox" runat="server"
Text='<%# Bind("Age") %>'>
</asp:TextBox><br />
First Name:
<asp:TextBox ID="FirstNameTextBox" runat="server">
</asp:TextBox><br />
Last Name:
<asp:TextBox ID="LastNameTextBox" runat="server">
</asp:TextBox><br />
<asp:LinkButton ID="InsertButton" runat="server"
CausesValidation="True"
CommandName="Insert" Text="Insert">
</asp:LinkButton>
<asp:LinkButton ID="InsertCancelButton" runat="server"
CausesValidation="False" CommandName="Cancel"
Text="Cancel">
</asp:LinkButton>
</InsertItemTemplate>
<EditItemTemplate>
Age:
<asp:TextBox ID="AgeTextBox" runat="server"
Text='<%# Bind("Age") %>'>
</asp:TextBox><br />
First Name:
<asp:TextBox ID="FirstNameTextBox" runat="server"
Text='<%# Eval("Name.FirstName") %>'>
</asp:TextBox><br />
Last Name:
<asp:TextBox ID="LastNameTextBox" runat="server"
Text='<%# Eval("Name.LastName") %>'>
</asp:TextBox><br />
<asp:LinkButton ID="UpdateButton" runat="server"
CausesValidation="True" CommandName="Update" Text="Insert">
</asp:LinkButton>
<asp:LinkButton ID="UpdateCancelButton" runat="server"
CausesValidation="False" CommandName="Cancel"
Text="Cancel">
</asp:LinkButton>
</EditItemTemplate>
<ItemTemplate>
Id:
<asp:Label ID="IdLabel" runat="server"
Text='<%# Eval("Id") %>'></asp:Label><br />
Age:
<asp:Label ID="AgeLabel" runat="server"
Text='<%# Eval("Age") %>'></asp:Label><br />
Name:
<asp:Label ID="NameLabel" runat="server"
Text='<%# Eval("Name.FirstName") %>'/><br />
<asp:LinkButton ID="NewButton" runat="server"
CausesValidation="False" CommandName="New"
Text="New">
</asp:LinkButton>
</ItemTemplate>
</asp:FormView>

-- end aspx code --

-- begin c# code (separate file with pesudo: D business object --
-- end c# code --

/// <summary>
/// Summary description for ProductsBLL
/// </summary>
public class PersonManager
{

public void Update(Person person)
{
}

public void Insert(Person person)
{
//
}

private Random random = new Random();
public Person Get(int id)
{
string str = id.ToString();

Person person = new Person();

person.Id = id;
person.Age = this.random.Next(1, 100);
person.Name.FirstName = "FirstName" + str;
person.Name.LastName = "LastName" + str;

return person;
}
}
[Serializable]
public class Person
{

private int id;
/// <summary>
///
/// </summary>
public int Id
{
get
{
return this.id;
}
set
{
this.id = value;
}
}
private FullName fullName = new FullName();
public FullName Name
{
get
{
return this.fullName;
}
}

private int age = 18;
/// <summary>
///
/// </summary>
public int Age
{
get
{
return this.age;
}
set
{
if (value < 0)
throw new ArgumentOutOfRangeException();
this.age = value;
}
}

}

public class FullName
{
public FullName()
{
}

private string firstName;
/// <summary>
///
/// </summary>
public string FirstName
{
get
{
return this.firstName == null ?
String.Empty : this.lastName;
}
set
{
this.firstName = value;
}
}

private string lastName;
/// <summary>
///
/// </summary>
public string LastName
{
get
{
return this.lastName == null ?
String.Empty : this.lastName;
}
set
{
this.lastName = value;
}
}
}
--
Milosz
"Ash" wrote:
Thanks for your responses they have been great help.

i have got everything to work so far but i am a bit confused as to where i
should put the event handeling you were discussing earlier about the update
and insert parameters when using Eval?

"So you if go for Eval, you will end up handling FormView's events to set
insertparameters or updateparanmeters manually.
"
How do i make sure that my code only gets executed not the formviews default
handeling?

Thanks
"Milosz Skalecki [MCAD]" wrote:
Hi there,
>
I think complex data binding also does not work for BoundField, you have to
use templatefield with Eval("Property.AnotherProperty")
--
Milosz
>
>
"Ash" wrote:
>
Hi thanks for the information,

What about a GridView i have it displaying objects but if one of the
properties is an object itself of which i need a property of how would i
access that? for example below i BillingType is an object but I need to
access a property of that object?

<asp:BoundField DataField="BillingType" HeaderText="Billing Type"
SortExpression="BillingType" />

Thanks for your help



"Milosz Skalecki [MCAD]" wrote:

Hi Ash,
>
Bind() method does not support complex binding expressions (i.e. set a
property of object-type property as you presented), but Eval() does.
Unfortunatelly, Eval() can only be used to evaluate expression when data is
bound (one way), and not to read changed value back. So you if go for Eval,
you will end up handling FormView's events to set insertparameters or
updateparanmeters manually.
>
--
Milosz
>
>
"Ash" wrote:
>
Hi,
Feb 20 '07 #9

This discussion thread is closed

Replies have been disabled for this discussion.