ObjectDataSource?

venerdì 04 aprile 2008 - 20.08

allevaldo Profilo | Junior Member

Considerate che è la mia prima applicazione asp.net e uso c#
spiego brevemente il mio primo problema... il primo di infiniti.
devo costruire una applicazione che si interfaccerà a un web service, il quale andrà a interrogare il mio db tramite un insieme di business class.
in molti casi il mio web service deve ritornare degli array di struct che ho costruito nel back end dell'applicazione.

cosa mi consigliate di usare per "interrogare" il web service?

freeteo Profilo | Guru

ciao,
visual studio, e .net in particolare ti permettono di attaccarti molto facilemente ad un WebService, ed usare a "tempo zero" i metodi che espone.
Ti basta aggiungere nel tuo progetto un "Riferimento Web" (tastoDX sul progetto->Add Web Reference) e dirgli l'url del webservice, dargli un nome nella casella a destra (questo nome sara' il nome del Namespace che conterra' il nome del webservice, che dopo userai da codice) e visual studio ti crea automaticamente la classe per gestire le chiamate, si fa dare (tramite wsdl) i vari tipi che ritornano i vari metodi (quindi avrai gia' la struttura tua come ritorno del metodo) gia' tutto pronto all'uso", senza scrivere una riga di codice (la scrive lui per te).

A questo punto ti basta chiamare da codice il webservice in questo modo:
namespace.TuoWebService service = new namespace.TuoWebService(); TuaStruct struttura = service.Metodo(...parametri...);

Dovresti fare tutto in pochi minuti, ovviamente il webservice deve sottostare ad alcuni standard affinche' visual studio ti crei tutte le classi di "Wrapper" per interrogarlo, ma se il tuo a quanto ho capito è fatto in .net, è gia' tutto a posto.

Ti lascio cmq 1 link se vuoi approfondire:
http://msdn2.microsoft.com/it-it/library/ms172568(VS.80).aspx



ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

allevaldo Profilo | Junior Member

sì ok questa era una delle poke cose chiare che avevo :-)

il problema stava nel fatto del collegamento ai dati...

se uno dei metodi del mio web service mi ritorna un array di una struct custom... come posso ad esempio collegarlo ad una tabella?

c'è un modo o devo fare un ciclo foreach e assegnare io tutti i valori?

altra domanda...

meglio fare tutto da codice o crearmi una tabella in html o iniettare lì il codice?

fguida Profilo | Expert

E se usassi una GridView alla quale passi il source?
Io ad esempio quando popolo una <List> passo direttamente questo come sorgente ed è di facile applicazione...

Francesco

freeteo Profilo | Guru

>sì ok questa era una delle poke cose chiare che avevo :-)
>
>il problema stava nel fatto del collegamento ai dati...
>
>se uno dei metodi del mio web service mi ritorna un array di
>una struct custom... come posso ad esempio collegarlo ad una
>tabella?
devi collegarlo ad una Gridview, impostandone la proprieta' "DataSource".
Lo stesso vale per componenti come ListBox, DropDownList etc...imposti il DataSource agli array di oggetti che ti torna il webservice, e poi magari imposti i "dataMember" con il nome della proprieta' che ti interessa visualizzare.


>c'è un modo o devo fare un ciclo foreach e assegnare io tutti
>i valori?
si arrangia il componente a farlo, avere una collection di oggetti (List<miaClasse>) o un DataTable con gli stessi campi è la stessa cosa, anzi io uso sempre e solo Collection<T> perche' lavoro tipizzato e DataTable lo uso veramente pochissimo.


>altra domanda...
>meglio fare tutto da codice o crearmi una tabella in html o iniettare
>lì il codice?
usa i componenti asp.net per visualizzare dati, ovvero "<asp:GridView..." o "<asp:DataList..." o "<asp:Repeater..." sono nati per queste cose.
Puoi anche lavorare via html ma è assurdo dato che hai oggetti nati proprio per queste funzionalita


ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo

allevaldo Profilo | Junior Member

come devo fare?

nel codice aspx istanzio la gridview e poi da codice assegno le proprietà?

allora il metodo del web service mi ritorna un array di struct che contiene 4 proprietà

mi potete scrivere un po' di codice di esempio?

freeteo Profilo | Guru

ciao,
questa è una pagina di esempio:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

che chiama questo webservice (ovviamente referenziato dentro a visual studio con quel nome):
<%@ WebService Language="C#" Class="mioWebService" %> using System; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; using System.Collections.Generic; using Entities; using System.Threading; using System.Linq; using Managers; [WebService(Namespace = "http://tempuri.org/")] public class mioWebService: System.Web.Services.WebService { [WebMethod] public List<Articolo> GetArticoli() { List<Articolo> articoli = new List<Articolo>(); for (int i = 0; i < 10; i++) { Articolo articolo = new Articolo(); articolo.Codice = "ART" + i; articolo.Descrizione = "Descrizione " + i; ..... articoli.Add(articolo); } return articoli; } }

come vedi, la classe tornata è qualcosa che puoi agganciare direttamente al GridView tramite la proprieta' "dataSource", e lui automaticamente ti genera le colonne che ti interessano.
Il fatto che si chiami "localhost.mioWebService" è dato dal fatto che aggiungendo il riferimento ho messo "localhost" come namespace, e poi ovviamente la classe è "mioWebService" perche' cosi' si chiama nel asmx.


Se vuoi puoi anche definirle tu a design time queste colonne:
... <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" > <Columns> <asp:BoundField DataField="codice" HeaderText="codice" /> <asp:BoundField DataField="descrizione" HeaderText="descrizione" /> .... </Columns> </asp:GridView>


oppure fartele generare da visual studio senza scrivere niente, aggiungendo un objectDataSource dalla finestra "DataSource" o dallo "smart-tag" che compare in alto a destra delle gridview, appena la trascini dalla toolbox alla webForm e dicendogli che la classe che ti dara' i dati sara' il webservice.
Fatto il wizard dovresti avere qualcosa di questo tipo nella pagina:
<asp:GridView ID="GridView1" runat="server" DataSourceID="ObjectDataSource1" > <Columns> ........ </asp:GridView> <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetArticoli" TypeName="localhost.mioWebService"> </asp:ObjectDataSource>



ciao.

Matteo Raumer
[MCAD .net]
http://blogs.dotnethell.it/freeteo
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-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5