Vai all'ultimo messaggio della discussione Vai all'ultimo messaggio  

3 pagine: [1] 2 3 Avanti >>


Object Query
Andufer non è online. Ultima attività: 30/11/2008 7.25.03Andufer
Inserito il: 13 ottobre 2008 16.36
29 messaggi dal 11 ago 2008 Istalla Microsoft Silverlight!
Ciao a tutti,
Ecco il mio dilemma:

<asp:Repeater ID="AlloggiRepeater" runat="server"
onitemdatabound="AlloggiRepeater_ItemDataBound">
<ItemTemplate>
<asp:HyperLink Runat="server" ID="MenuLink"
NavigateUrl='<%# Eval("Id", "../PageA.aspx?AlloggioId={0}") %>'>
<span>
<%# Eval("Nome") %>
</span>
</asp:HyperLink>
</ItemTemplate>
</asp:Repeater>

Prima domanda:
Come posso modificare il contenuto di NavigateUrl, aggiungendo un ulteriore parametro che posso prelevare dall'URL?

Seconda domanda:

Questo è il metodo AlloggiRepeater_ItemDataBound

protected void AlloggiRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
object lc = e.Item.DataItem;
}

Se osservo con il debugger l'oggetto lc è = a: { Id=14, Nome="Pippo", Descrizione="Pluto", FotoId=5 }, ma come faccio a recuperare in una variabile int il valore di Id?

Grazie a tutti e buona giornata.
Come avrete capito sono un principiante e oltretutto con il cervello spappolato dalla ricerca di queste soluzioni. Mi raccomando, se sono soluzioni molto semplici, ditemelo lentamente. Sapete... è due giorni che ci penso e ... non vorrei reagire istintivamente gettando tutto giù dalla finestra. (Tanto abito al piano terra.)

Andrea
Re: Object Query
andrewz non è online. Ultima attività: 04/12/2008 16.36.37andrewz
Inserito il: 13 ottobre 2008 16.46
contributi / Top Poster / Community manager / ciclismo.sitiasp.it / Blog / 2924 messaggi dal 29 ott 2001 Istalla Microsoft Silverlight!
Andufer wrote:
Prima domanda:
Come posso modificare il contenuto di NavigateUrl, aggiungendo un ulteriore parametro che posso prelevare dall'URL?

In questi casi fai molto prima a creare tu il link:

<ItemTemplate>
<a href='../PageA.aspx?AlloggioId=<%# Eval("Id")%>'>
<%# Eval("Nome") %></a>
....

Probabilmente c'è un'altra strada, ma io preferisco la semplicità di questa

Seconda domanda:

Questo è il metodo AlloggiRepeater_ItemDataBound

protected void AlloggiRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
object lc = e.Item.DataItem;
}

Se osservo con il debugger l'oggetto lc è = a: { Id=14, Nome="Pippo", Descrizione="Pluto", FotoId=5 }, ma come faccio a recuperare in una variabile int il valore di Id?

Ma usi una collection di una tua class? In questo caso:

protected void AlloggiRepeater_ItemDataBound(object sender,
RepeaterItemEventArgs e)
{
TuoObject lc = e.Item.DataItem as TuoObject;
int valore=lc.Id;
}

TuoObject è la classe con cui popoli il repeater.

Grazie a tutti e buona giornata.

Ciao
.

Andrea Zani
Anche un orologio rotto segna per ben due volte al giorno l'ora esatta.
RE: Object Query
PeppeDotNet non è online. Ultima attività: 04/12/2008 20.31.48PeppeDotNet
Inserito il: 13 ottobre 2008 16.49
contributi / www.peppedotnet.it / 371 messaggi dal 21 gen 2007 Istalla Microsoft Silverlight!
Per aggiungere al tuo link un parametro preso dalla qeurystring puoi fare una cosa del genere:

<asp:Repeater ID="AlloggiRepeater" runat="server"
onitemdatabound="AlloggiRepeater_ItemDataBound">
<ItemTemplate>
<asp:HyperLink Runat="server" ID="MenuLink"
NavigateUrl='<%# String.Format("../PageA.aspx?AlloggioId={0}&tuonuovoparametro={1}", Eval("Id"), Request.QueryString["PARAMETRO"]) %>'>
<span>
<%# Eval("Nome") %>
</span>
</asp:HyperLink>
</ItemTemplate>
</asp:Repeater>


mentre invece, per quanto riguarda la tua seconda domanda, con il debygger guarda di che tipo è l'oggetto "lc", così puoi fare un cast e recuperare il valore del campo "id" come intero.
metti caso quindi che il tipo è "MioTipo" allora puoi scrivere:

protected void AlloggiRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
MioTipo lc = e.Item.DataItem as MioTipo;
if(lc != null)
{
int id = lc.Id;
}
}

Marchi Giuseppe
http://www.peppedotnet.it
RE: Object Query
Andufer non è online. Ultima attività: 30/11/2008 7.25.03Andufer
Inserito il: 13 ottobre 2008 17.52
29 messaggi dal 11 ago 2008 Istalla Microsoft Silverlight!
Grazie a tutti.

La prima domanda ho visto che ha una semplice soluzione (sob!).
Per quanto concerne la seconda, credo sia un po' più complesso in quanto l'oggetto restituito da una Query LINQ è un tipo AnonymousType e quindi non ho la possibilità di fare un casting.

Ho creato una Classe che ha quattro proprietà identiche a quelle restituite nella Query, ma provando a risolvere con:

LCategorie lc = e.Item.DataItem as LCategorie;

mi risulta lc a null.

Qualche altro suggerimento?

Grazie ancora

Andrea
RE: Object Query
PeppeDotNet non è online. Ultima attività: 04/12/2008 20.31.48PeppeDotNet
Inserito il: 13 ottobre 2008 18.12
contributi / www.peppedotnet.it / 371 messaggi dal 21 gen 2007 Istalla Microsoft Silverlight!
Allora puoi scrivere un terzo metodo che ti effettua il cast dell'oggetto sfruttando i generics e passargli come tipo con cui effettuare il casting, un anonymous type costruito con le medesime proprietà del tuo.

protected void AlloggiRepeater_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
object o = e.Item.DataItem;
var mio = Cast(o, new {Id=0, Nome="", Descrizione="", FotoId=0});
if(mio != null)
{
int id = mio.Id;
}
}

T Cast<T>(object obj, T type)
{
   return (T)obj;
}

Marchi Giuseppe
http://www.peppedotnet.it
RE: Object Query
Andufer non è online. Ultima attività: 30/11/2008 7.25.03Andufer
Inserito il: 13 ottobre 2008 18.47
29 messaggi dal 11 ago 2008 Istalla Microsoft Silverlight!
Grazie Giuseppe, trovo che è un'ottima soluzione, ma non trovo l'operatore Cast. Devo usare qualche spazio dei nomi particolare?

Andrea
RE: Object Query
Andufer non è online. Ultima attività: 30/11/2008 7.25.03Andufer
Inserito il: 13 ottobre 2008 19.53
29 messaggi dal 11 ago 2008 Istalla Microsoft Silverlight!
Scusa Giuseppe, ho visto ora che Cast era definito sotto.
Ho provato la tua soluzione, ma il debugger mi segnala un errore nella riga:
return(T)obj;

con il seguente messaggio:

Impossibile eseguire il cast di oggetti di tipo '<>f__AnonymousType3`4[System.Int32,System.String,System.String,System.Int32]' sul tipo '<>f__AnonymousType0`4[System.Int32,System.String,System.String,System.Int32]'.

Sinceramente non capisco.

Se hai tempo e voglia, mi spieghi cosa succede?

Grazie e buona serata.
Re: Object Query
andrewz non è online. Ultima attività: 04/12/2008 16.36.37andrewz
Inserito il: 14 ottobre 2008 09.13
contributi / Top Poster / Community manager / ciclismo.sitiasp.it / Blog / 2924 messaggi dal 29 ott 2001 Istalla Microsoft Silverlight!
Oltre all'ottimo suggerimento di Giuseppe, prendi in considerazione anche la possibilità di farti tornare dalla query eseguita da Linq, la classe esatta dell'oggetto voluto (quella presente nell'editor di Visual Studio 2008

Ciao
.

Andrea Zani
Anche un orologio rotto segna per ben due volte al giorno l'ora esatta.

3 pagine: [1] 2 3 Avanti >>

Vai a:
Torna al forum |   Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.


PeppeDotNet - 1000 pt
gghi - 310 pt
fabrica - 50 pt

Iscriviti anche tu e raccogli punti. Questo mese in palio VS 2008, SQL Prompt e 1 ebook!


COMMUNITY
ULTIMI MESSAGGI


IN EVIDENZA
MISC
Powered by .db Forums