Classe datatable: come usarla?

sabato 01 luglio 2006 - 16.46

Giovanni_3478 Profilo | Senior Member

Ciao

vorrei usare la classe datatable per visualizzare dei determinati dati del db
(il controllo server gridview non fa al mio caso)

Da codice ho scritto:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra
Per visualizzare dei dati del db che sintassi dovrò usare?
Dovrò usare la classe datatable e datarow?

freeteo Profilo | Guru

ciao,
cosa vuol dire che gridview non fa alcaso tuo, in che senso? Ti chiedo questo perche' il gridview è quello che a livello di drag&drop è il piu veloce per sviluppare e supporta gia paginazione, ordinamento.
In ogni caso cmq, per visualizzare dati, devi usare i controlli che nella toolbox soo sotto la voce "data", ovvero quelli dedicati a questo tipo di funzionamento. Se ad esempio vuoi piu liberta' di visualizzazione devi usare 1repeater, ma ricorda che puoi raggiungere gli stessi risultati usando colonne template (templatefiled) del gridview, dove lavori come i repeater specificando il bindings classico: <%# Eval("nome) %> ...

Dai 1occhiata al tutoria per capire cosa ti va meglio : http://www.asp.net/QuickStart/aspnet/doc/ctrlref/data/default.aspx
ciao.

Matteo Raumer
MCAD ... .net addicted :-)
http://blogs.dotnethell.it/freeteo

Giovanni_3478 Profilo | Senior Member

Ho bisogno di forti personalizzazioni dell'accesso ai dati,
per andare al record precedente,
per potere leggere un intero record intero alla volta,
per poter andare alla fine della tabella,
per poter andare all'inizio della tabella,
per leggere solo i campi che specifico,
per leggere tutti i dati di un solo campo.

Come posso fare?


freeteo Profilo | Guru

ciao,
per tutte queste cose niente di piu efficace del gridview con paginazione, autogeneratecolumns=true, ed eventualmente puoi usare il classico modo di "master details" dove visualizzi, magari piu in basso, 1 detailsview.
Guardati anche questi tutorials:
http://www.dotnethell.it/articles/GridviewASPNET20.aspx
http://msdn.microsoft.com/asp.net/reference/ui/default.aspx?pull=/library/en-us/dnvs05/html/grddetview.asp
http://www.asp.net/QuickStart/util/srcview.aspx?path=~/aspnet/samples/data/GridViewMasterDetailsPage.src&file=GridViewMasterDetailsPage_vb.aspx
http://www.exforsys.com/content/view/1656/265/
e questo video:
http://download.microsoft.com/download/8/3/6/836dd5f8-fa92-499f-8219-0d326f13bf18/hilo_data_final.wmv
ciao.

Matteo Raumer
MCAD ... .net addicted :-)
http://blogs.dotnethell.it/freeteo

Giovanni_3478 Profilo | Senior Member

Ho letto i tutorial e visto il filmato.
Sono tutti interessanti ma non credo facciano al mio caso
perchè (come è stato già discusso [url=http://www.dotnethell.it/forum/messages.aspx?ThreadID=8396]qui[/url]
1) devo tradurre in sintassi :

visualizzami un multiview
if campo (flag)= true then
visualizzami
linkbutton

if campo (flag)= true then
visualizzami
literalcontrol
view
1 record del database

come farò a riferirmi al campo boolean flag?





freeteo Profilo | Guru

ciao,
devi intercettare l'evento "RowDataBound" e andare a fare le verifiche sull'oggetto "e" che ti da l'evento e andare a prenderti gli elementi che ti servono di quella riga, con il metodo "FindControl", e settarci le varie proprieta'.
Ad esempio:
protected void dlRowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType == DataControlRowType.DataRow) { DataRowView mioDatarow = (DataRowView)e.Row.DataItem; if (!Convert.ToBoolean(mioDatarow ["campoFlag"])) { ((Label)e.Row.FindControl("mialabel")).Text = "miotesto";
Ovviamente questo è 1 esempio adattalo 1po alla tua esigenza...
ps: la label l'hpo aggiunta con 1 colonna "TemplateColumn" dove dentro puoi metterci quello che vuoi (di asp.net)
ciao.

Matteo Raumer
MCAD ... .net addicted :-)
http://blogs.dotnethell.it/freeteo

Giovanni_3478 Profilo | Senior Member

Sto seguendo parte dei tuoi suggerimenti:
sto usando il gridview con il templatefield
[b]nella aspx[/b]
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$
ConnectionStrings:jaykay.netConnectionString2 %>"
SelectCommand="SELECT [text], [flag] FROM
[Pagine_illimitate] WHERE ([flag] =
@flag)">
<SelectParameters>
<asp:Parameter DefaultValue="true"
Name="flag" Type="Boolean" />
</SelectParameters>
</asp:SqlDataSource>

<asp:GridView ID="GridView1" runat="server"
AutoGenerateColumns="False"
DataSourceID="SqlDataSource1" ShowHeader="false">

<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton ID="LinkButton" [color=blue]+i[/color]
runat="server">linkbutton[color=blue]+i[/color]
</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
[color=red]<%-- qui vorrei andare a capo; br non può essere usato --%>[/color]
<asp:TemplateField>
<ItemTemplate>
<asp:Literal ID="Literal1" runat="server">ciao</asp:Literal>
<%#Eval("text")%>
</ItemTemplate>
</asp:TemplateField>
</Columns>


</asp:GridView>

[b]da codice[/b]

Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As
System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
Dim i As Integer = 0
i += 1

End If



End Sub

1) [color=red]tra un templatefield e l'altro, vorrei andare a capo: è possibile usare un br o una specie di artifizio che lo emuli? oppure devo associare al controllo templatefield un foglio di stile?[/color]
2) [color=blue]Vorrei dare al linkbutton, id e testo che vari [/color]con l'evento ondatabound:
cioè con la reazione della prima riga
vorrei creare un linkbutton con id linkbutton1 e testo linkbutton1
e con la creazione della seconda riga
vorrei creare un linkbutton con id linkbutton2 e testo linkbutton2.
Con il metodo usato sopra (la sintassi con color ble) dà errore.
C'è un modo per ottenere il risultato che ho spiegato sopra?

ps. ho usato il bbcode non sapendo che il forum non lo supporta;
però a vedere assolve lo stesso la sua funzione

freeteo Profilo | Guru

>1) [color=red]tra un templatefield e l'altro, vorrei andare a
>capo: è possibile usare un br o una specie di artifizio che lo
>emuli? oppure devo associare al controllo templatefield un foglio
>di stile?[/color]
se vuoi puoi usare 1foglio di stile altrimenti puoi mettere 1 tag "br" dentro all ItemTemplate, non c'e' motivo di metterlo tra i template, non ha senso mi sa che non hai capito come funzionano i controlli data in generale.I controlli data ripetono 1modelo (template) per tutte le righe che gli passi come sorgente (tipicamente derivanti da 1a query), e poi bindi dei contenuti delle righe a questo modello, in modo che vengano visualizzati i valori...

>2) [color=blue]Vorrei dare al linkbutton, id e testo che vari
>[/color]con l'evento ondatabound:
>cioè con la reazione della prima riga
>vorrei creare un linkbutton con id linkbutton1 e testo linkbutton1
>e con la creazione della seconda riga
>vorrei creare un linkbutton con id linkbutton2 e testo linkbutton2.
>Con il metodo usato sopra (la sintassi con color ble) dà errore.
>C'è un modo per ottenere il risultato che ho spiegato sopra?
si arrangia lui con i nomi, tu puoi tranquillamente dare 1nome qualsiasi alla tua combo, tanto lui aruntime da 1 id generato da lui.
Il nome ti serve per accedere al controllo nell'evento "RowDataBound" dove lo chiami per il nome tuo, ma quell'evento viene scatenato per ogni riga, quindi non preoccuparti del nome, sara' sempre "label1" per te, e ci accederai con "findControl("Label1") , proprio perche' è locale alla riga, setterai le proprieta' di quel solo controllo.

Devi cmq guardarti bene 1po di teoria prima di "smanettare", dedicaci qualche oretta per capire dalle basi, è sempre ben spesa
ciao.

Matteo Raumer
MCAD ... .net addicted :-)
http://blogs.dotnethell.it/freeteo

Giovanni_3478 Profilo | Senior Member

>I controlli data ripetono 1modelo (template)
Leggono il primo template e lo ripetono per il numero di righe,
leggono il secondo template e le ripetono per il numero di righe,
ma: in questo modo vengono create 2 colonne, l'una al fianco di un'altra.

Io le vorrei posizionare una sotto l'altra.


>si arrangia lui con i nomi, tu puoi tranquillamente dare 1nome qualsiasi alla tua combo, >tanto lui aruntime da 1 id generato da lui.
Gli id dei controlli inseriti nei template li devo conoscere perchè
dovrò inserire nel template un controllo view
(dopo aver precedentemente inserito un controllo multiview);
devo conoscere gli id dei linkbutton perchè poi scriverò
onclick - id del primo likbutton specifico - multiView.ActiveViewIndex() = 1
onclick - id del secondo likbutton specifico - multiView.ActiveViewIndex() = 2
e così via


>((Label)e.Row.FindControl("mialabel")).Text = "miotesto";
Non l'ho specificato prima: scrivo codice in Visual Basic.
Digitando e.Row.FindControl("controllo da trovare")).Text
mi dà come errore : "text non è un membro di System.web.UI.Control".
La sintassi in visual Basic qual'è?


>Devi cmq guardarti bene 1po di teoria prima di "smanettare", dedicaci qualche oretta per >capire dalle basi, è sempre ben spesa
Li devo comprare.


freeteo Profilo | Guru

prova a mettere dentro al template 1altro controllo data repeater, e come ti dicevo con l'evento RowCreated, gli setti il datasource, in modo da fare repeater "innestati" :
http://support.microsoft.com/default.aspx?scid=kb;EN-US;306154

la stessa cosa vale per l'evento buttonClick, solo che li devi settarli l'handler dell'evento...la cosa si complica 1pochettino
ciao.

Matteo Raumer
MCAD ... .net addicted :-)
http://blogs.dotnethell.it/freeteo

Giovanni_3478 Profilo | Senior Member

Rispondo in ritardo, ma meglio tardi che mai

Il controllo repeater è quello che fa al mio caso;
permette personalizzazioni di layout
e mi permette quindi di ottenere il risultato che volevo.

Per quanto riguarda i repeater "innestati" cioè la creazioni di controlli repeater padre/figlio
ho esaminato il link,
e sono arrivato a conclusione che non mi servono
perchè già il controllo repeater mi dà i risultati che cerco.


Quindi grazie per l'aiuto.

Ho acquistato 2 libri per l'asp.net 2.0.
>la stessa cosa vale per l'evento buttonClick, solo che li devi settarli l'handler dell'evento...la cosa si complica 1pochettino.
Non ho trovato nulla che riguardi il cambiamento di impostazioni dell'handler di un evento.
E' un argomento che riguarda più in particolare il linguaggio di programmazione Visual Basic (o C#) ?
E' un argomento che ha un nome particolare?

freeteo Profilo | Guru

>Quindi grazie per l'aiuto.
di niente figurati, siamo qui per questo

>Ho acquistato 2 libri per l'asp.net 2.0.
>>la stessa cosa vale per l'evento buttonClick, solo che li devi settarli l'handler dell'evento...la cosa si complica 1pochettino.
>Non ho trovato nulla che riguardi il cambiamento di impostazioni
>dell'handler di un evento.
ti do questo link da dove puoi partire:
http://msdn.microsoft.com/library/ita/default.asp?url=/library/ITA/cpref/html/frlrfsystemeventhandlerclasstopic.asp
cmq prova a cercare in msdn

>E' un argomento che riguarda più in particolare il linguaggio
>di programmazione Visual Basic (o C#) ?
>E' un argomento che ha un nome particolare?
diciamo che è 1a cosa che riguarda il framework .net, poi ogni linguaggio ha differenze sintattiche ma il concetto è generale.
La sintassi è piu o meno questa:
linkbutton1.OnClick += [PREMI "TAB"] cosi ti aiuta l'intellisense]

Cmq puoi cercare "EventHandler" ovvero colui che maneggia l'evento


ciao.

Matteo Raumer
MCAD ... .net addicted :-)
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-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5