3 messaggi dal 30 settembre 2007
Ciao a tutti,
mi sono accostato all'ASP.NET da poco tempo e, piano piano, sto prendendo mano con i vari controlli server.
In particolare mi chiedevo se fosse possibile, in una GridView, avere una diversa impaginazione del record dalla semplice riga.
Mi spiego: se devo stampare a video i campi di un record, mi piacerebbe che il campo "descrizione" stesse sotto al campo "titolo" e non di fianco.

L'effetto desiderato l'ho avuto con il repeater, ma ho incontrato difficoltà maggiori per quanto riguarda l'elaborazione dei dati (come il confronto).

Quindi: è possibile stampare in una pagina web un record di una gridview anche su più righe?
è possibile stampare un detailsview su più colonne invece che su di un unica colonna?

Grazie.
426 messaggi dal 17 aprile 2006
in merito al gridview non ci sono grossi problemi a farlo.
ti è sufficiente usare una colonna template e metterci dentro tutti i controlli che vuoi.
considera però che il tutto viene renderizzato all'interno di un table (a meno che non usi controlli tipo cssFriendlyadapter che renderizzano il tutto con html più cristiano...)
in pratica per semplicità entra in design nella pagina dove hai messo il gridview visualizza il Gridview Task e clicca su edit Columns.
converti il campo titolo in un campo templateFIeld
dai l'ok e torna nel source della pagina.

Ora al suo interno troverai tra i tag <Columns> e </Columns> un <asp:TemplateField>
al suo interno gestisci le varie "viste" della GridView e nello specifico.
<ItemTemplate> per la gridview in readonly <EditItemTemplate> per l'eventuale editing che dubito però vorrai far fare sul gridview.
In sintesi potresti fare:
<GridView runat="Server" ID="GridView1" DataSource....(etc etc)  >
<Columns>
<asp:TemplateField>
 <EditItemTemplate>
 </EditItemTemplate>
 <ItemTemplate>
 <asp:Label runat="server" ID="Label1" Text='<%# Bind("Titolo") %>' >  
 </asp:Label> 
 <br />
 <asp:Label runat="server" ID="Label2" Text='<%# Bind("Descrizione") %>' >  
 </asp:Label> 
 </ItemTemplate>
</asp:TemplateField>
</Columns>
</GridView>


non capisco invece quando dici che con il repeater hai difficoltà nell'elaborazione dei dati come il confronto...
per il detailsview su più colonne la vedo più dura, ma se devi snaturare il normale appealing del detailsView ti conviene piuttosto usare un FormView in maniera tale da avere a disposizione una struttura meno rigida e farne quel che vuoi.

Ciao Alessandro
3 messaggi dal 30 settembre 2007
Grazie mille per la risposta.
Considera che è da pochi giorni che mi sono messo a programmare con l'asp.net, quindi non ti stupire se non riesco a fare cose elementari

Ho utilizzato un repeater che mi stampava i campi di un record scelto in una certa maniera [...]

Ora io volevo mettere un linkbutton "prenota" e abilitarlo se e solo se i "posti" disponibili erano > 0 (ovviamente).

Ho risolto in questa maniera ma mi sembra troppo artificiosa, forse c'è qualcosa di più semplice.

Nella pagina ho messo questo:

<td align="right"><%#Prenota(Convert.ToInt32((DataBinder.EvalContainer.DataItem, "posti").ToString())), Convert.ToString((DataBinder.Eval(Container.DataItem, "id"))))%> </td>

Mentre negli script quest'altro.

protected string Prenota(int posti, string ID)
{
if (posti > 0)
return ("<div class='txt-8'><a href='prenota.aspx?id="+ID+"' target='_self'>Prenota>>></a></div>");
else
return ("<div class='txt-8G'>Prenota>>></div>");
}



In pratica non sono riuscito a metterci un linkbutton (e mi sarebbe piaciuto) ma soltanto testo con un normale link HTML.

Il primo problema che ho avuto è stato il non saper confrontare direttamente i valori contenuti in <%# DataBinder.Eval(Container.DataItem, "posti")%> oppure in <%# Eval("posti")%> un po' come se utilizzassimo l'asp 3.0.

Grazie per la disponibilità.
426 messaggi dal 17 aprile 2006
anche questo per fortuna è piuttosto semplice da fare
nel repeater metti il tuo bel linkButton
nel linkButton metti
visible='<%# bfnControllaPosti(Eval("posti"),Eval("id")) %>'

poi nel file cs metti
protected bool bfnControllaPosti(object oPosti)
{
if Convert.ToInt32(oPosti)>0 return true;
else return false;
}

e così il pulsante si vede o scompare in funzione dei posti

oppure lo puoi abilitare o diabilitare gestendo la proprietà Enabled

vedi un po' tu

Ciao Alessandro
5 messaggi dal 08 novembre 2007
taccio ha scritto:
in merito al gridview non ci sono grossi problemi a farlo.
ti è sufficiente usare una colonna template e metterci dentro tutti i controlli che vuoi.
considera però che il tutto viene renderizzato all'interno di un table (a meno che non usi controlli tipo cssFriendlyadapter che renderizzano il tutto con html più cristiano...)
in pratica per semplicità entra in design nella pagina dove hai messo il gridview visualizza il Gridview Task e clicca su edit Columns.
converti il campo titolo in un campo templateFIeld
dai l'ok e torna nel source della pagina.

Ora al suo interno troverai tra i tag <Columns> e </Columns> un <asp:TemplateField>
al suo interno gestisci le varie "viste" della GridView e nello specifico.
<ItemTemplate> per la gridview in readonly <EditItemTemplate> per l'eventuale editing che dubito però vorrai far fare sul gridview.
In sintesi potresti fare:
<GridView runat="Server" ID="GridView1" DataSource....(etc etc)  >
<Columns>
<asp:TemplateField>
 <EditItemTemplate>
 </EditItemTemplate>
 <ItemTemplate>
 <asp:Label runat="server" ID="Label1" Text='<%# Bind("Titolo") %>' >  
 </asp:Label> 
 <br />
 <asp:Label runat="server" ID="Label2" Text='<%# Bind("Descrizione") %>' >  
 </asp:Label> 
 </ItemTemplate>
</asp:TemplateField>
</Columns>
</GridView>


non capisco invece quando dici che con il repeater hai difficoltà nell'elaborazione dei dati come il confronto...
per il detailsview su più colonne la vedo più dura, ma se devi snaturare il normale appealing del detailsView ti conviene piuttosto usare un FormView in maniera tale da avere a disposizione una struttura meno rigida e farne quel che vuoi.



Scusa ho più o meno lo stesso problema, e cioè leggendo il post sono riuscito ad impaginare il gridview ma adesso come faccio a richiamare il campo da un dataaccesssource??

ovvero come lo scrivo io dove sbaglio:

<asp:AccessDataSource ID="Giardnew" runat="server" DataFile="~/mdb-database/xxxx.mdb"
SelectCommand="SELECT [img], [mod], [new], [trasm], [iar_new] FROM [Gia] DataSourceMode="DataSet">
</asp:AccessDataSource>
<asp:GridView ID="Gridg1" 
              runat="server" 
              AllowPaging="True" 
              AllowSorting="false"
              AutoGenerateColumns="false" 
              DataSourceID="Giardnew" 
              Width="685px">
<Columns>
<asp:TemplateField ShowHeader="false">
<ItemTemplate>
<table>
<tr>
<td>
<asp:Image ID="img" runat="server" 
ImageUrl="\public\new\<%# Bind("img_giar_new") %>" />
</td>
</tr>
</table>
</ItemTemplate>
</asp:TemplateField>
</Columns>
    </asp:GridView>


Se riesci ad illuminarmi

Mirko Roncolini
se non ho capito male la domanda, già lo usi e taccio ha già risposto

<%# Bind("img_giar_new") %>

è questa particolare espressione (in questo caso bidirezionale) a consentirti di recuperare un campo dal db

ciao marco
Modificato da nostromo il 21 dicembre 2007 09.52 -

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx
5 messaggi dal 08 novembre 2007
Il Problema è che o mi da errore oppure non mi restituisce niente.
Provo a postare il codice completo per vedere se riesci a dirmi dove sbaglio

<asp:AccessDataSource ID="Giardnew" runat="server" DataFile="~/mdb/data.mdb"
SelectCommand="SELECT [img_giar_new], [mod_giar_new], [hp_giar_new], [trasm_giar_new], [assale_giar_new] FROM [Giard_Nuovo] ORDER BY [id_giar_new]" DataSourceMode="DataSet">
</asp:AccessDataSource>
<asp:GridView ID="Gridgiardnew" 
              runat="server" 
              AllowPaging="True" 
              AllowSorting="false"
              AutoGenerateColumns="false" 
              DataSourceID="Giardnew" 
              Width="685px" SelectedIndex="3" GridLines="Both">
<Columns>
<asp:TemplateField ShowHeader="false">
<ItemTemplate>
<table>
<tr>
<td><asp:Image ID="imggiarnew" runat="server" ImageUrl="../public/giar_new/<%# Giardnew.DataBind(img_giar_new) %>"></asp:Image></td>
<td>
<table>
<tr>
<td>
 <asp:Label runat="server" ID="Label2" Text="" ><%#Giardnew.DataBind ("mod_giar_new") %></asp:Label> 
</td>
</tr>
</table>
</td>
</tr>
</table>
</ItemTemplate>
</asp:TemplateField>
 </Columns>
    </asp:GridView>


Ciao

Mirko Roncolini
non devi mettere: Giardnew.DataBind(img_giar_new) ma solo Bind("img_giar_new")

ciao marco

Chi parla senza modestia troverà difficile rendere buone le proprie parole.
Confucio

http://nostromo.spaces.live.com/default.aspx

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.