Chiarimento su DataBinding con Object Data Source, Details View con og...

lunedì 08 novembre 2010 - 10.13
Tag Elenco Tags  C#  |  .NET 4.0  |  Windows Server 2003  |  Visual Studio 2010

vale_a Profilo | Newbie

Salve a tutti, avrei bisogno di capire come funziona il data bindind all'ODS e alla DV di una classe composta in questo modo:
public class Customer
{
private string _firstName = string.Empty;
private string _lastName = string.Empty;


[DataMember]
public string FirstName
{
get { return _firstName; }
set {_firstName = value; }
//altre proprietà...
//proprietà di tipo Indirizzo vedi classe sotto definita
private Indirizzo _ind = new Indirizzo();
public Indirizzo IndirizzoPrincipale
{
get { return _ind; }
set
{
if (value.Equals(null))
{
throw new ArgumentNullException("Indizzo", "l'indirizzo non può essere vuoto");
}
else
{
_ind = value;
}
}
}
public Customer() { }
public Customer(string fName, string lName, Indirizzo i)
{
this._firstName = fName;
this._lastName = lName;
this._ind = i;

}

//metodi per recuperare dal db i records della tabella Customers + operazioni CRUD


La classe Indirizzo è la seguente:
public class Indirizzo
{
private string _via, _cap, _city;
public string Via
{
get { return _via; }
set {_via = value; }
}
public string CAP
{
get { return _cap; }
set { _cap = value; }
}
public string Citta
{
get { return _city; }
set { _city = value; }
}
//costruttore
public Indirizzo()
{
this._cap = "34100";
this._city = "TS";
this._via = "prova";
}
public Indirizzo(string via, string citta, string cap)
{
this._cap = cap;
this._city =citta;
this._via = via;
}

public override string ToString()
{
return string.Concat(Via, "- ", CAP, "-", Citta);
}

}
Nella mia UI, ho una pagina aspx in cui mi servo di un controllo Obiect Data Source per visualizzare l'elenco dei clienti. Fin qui tutto ok.
I problemi iniziano quando voglio inserire/modificare un record di questo tipo, mi spiego: ho una DetailsView collegata all'ODS in cui ho modificato il campo Indirizzo in un template field, in modo da recuperare dalla sessione un elenco di indirizzi e visualizzarli in un dropdown:
<asp:TemplateField HeaderText="IndirizzoPrincipale"
SortExpression="IndirizzoPrincipale">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server"
Text='<%# Bind("IndirizzoPrincipale") %>'></asp:TextBox>
</EditItemTemplate>
<InsertItemTemplate>
<InsertItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" DataMember="ID"
DataSource='<%# HttpContext.Current.Session["elencoIndirizzi"] %>'
DataTextField="Name" DataValueField="ID">
</asp:DropDownList>
</InsertItemTemplate>
</InsertItemTemplate>
<ItemTemplate>
<asp:Label Id="Label1" runat="server" Text='<%# Bind("IndirizzoPrincipale") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>

All'evento DetailsView1_ItemInserting, ho provato a fare così:

e.Values["IndirizzoPrincipale"] = DropDownList1.SelectedValue.ToString();

ma -ovviamente- ricevo l'errore
"Impossibile convertire il valore del parametro 'IndirizzoPrincipale' da 'System.String' a 'IndirizzoPrincipale'.
Sono costretta a creare un oggetto di tipo Indirizzo:

Types.Indirizzo ind = new Indirizzo(id_mag.SelectedValue.ToString(), "city", "34103");
e.Values["IndirizzoPrincipale"] = (Types.Indirizzo)ind;

in questo modo l'inserimento funziona. Idem per la modifica del record selezionato dalla GV.

Mi chiedo: è corretto questo approccio? Ho sbagliato di modificare il template del campo Indirizzo o specificare da qualche parte che il campo è di tipo Indirizzo??
Grazie dell'attenzione,
v.a.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5