Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 2.0 / 3.5 / 4.0
Chiarimento su DataBinding con Object Data Source, Details View con og...
lunedì 08 novembre 2010 - 10.13
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
C#
|
.NET 4.0
|
Windows Server 2003
|
Visual Studio 2010
vale_a
Profilo
| Newbie
1
messaggi | Data Invio:
lun 8 nov 2010 - 10:13
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.
Torna su
Stanze Forum
Elenco Threads
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 !