12 messaggi dal 09 maggio 2001
Salve,
Sto sviluppando un'applicazione in c# e ho messo dentro ad un repeater una
tabella nella quale voglio vedere l'elenco degli interventi assegnati e da
assegnare ai tecnici.
Su SQL ho creato un'archivio con 2 campi: "Intervento" e "Tecnico"
Dopo aver creato il DataAdapter e fatto il Fill del Dataource, passo
quest'ultimo al repeater attraverso i comandi:
Repeater1.Datasource = dsInterventi.Tables[0];
Repeater1.Databind();
Fin qui tutto a posto!!!

La mia necessità ora è che se un'intervento "NON" è stato ancora assegnato
(quindi il campo Tecnico è VUOTO), il sistema automaticamente (invece di far
apparire il campo vuoto) dovrà rendere invisibile la "Label" con il nome del tecnico (che altrimenti sarebbe vuota) e far apparire una dropdownlist e un bottone
(già creati all'interno del repeater, ma resi invisibili) per poter dare la
possibilità di assegnare tale intervento ad un tecnico presente nella
dropdownlist.
Nel caso in cui, invece, il campo Tecnico fosse riempito (e quindi
l'intervento fosse stato già assegnato ad un tecnico) allora mi dovrà
solamente visualizzare il nome del tecnico nella Label apposita.

Sono andato su internet e alcuni siti parlano di utilizzare il metodo
PreRender del Repeater e altri di utilizzare il DataBound per fare tali
operazioni, ma non sono riuscito utilizzarli per il mio scopo.
Potete aiutarmi per piacere???

Grazie in anticipo
Adriano Fabri

Per comodità vi mando il codice della pagina Aspx (ridotto delle parti che
non servono) e del Code Behind:

Interventi.aspx

<div align="center"><asp:repeater id="rptListIntAttivi" runat="server">
<HeaderTemplate>
<table border="1" width="100%">
<tr>
<td align="center" class="TableTDIntestazioneInterventiInAttesa">
Tecnico
</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
</td>
<td width="180" align="center" class="TableTDTextInterventiInAttesa">
<asp:dropdownlist id="ddlTechnicians" runat="server"
Visible=False></asp:dropdownlist><br>
<asp:button id="btnAssegna" runat="server" Text="Assegna"
Visible=False></asp:button><br>
<asp:Label id="lblTecnico" runat="server" Text='<%#
DataBinder.Eval(Container.DataItem, "Tecnico")%>' Font-Size="8" >
</asp:Label>
</td>
</FORM>
</tr>
</ItemTemplate>
<FooterTemplate>
</TABLE>
</FooterTemplate>
</asp:repeater></div>


Interventi.aspx.cs

using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

namespace assistenzatecnica.moduli
{
/// <summary>
/// Descrizione di riepilogo per ElencoInterventi.
/// </summary>
public class ElencoInterventi : System.Web.UI.UserControl
{
protected System.Web.UI.WebControls.Button btnCode;
protected System.Web.UI.WebControls.Label lblAttive;
protected System.Web.UI.WebControls.Label lblSospese;
protected System.Web.UI.WebControls.Button btnAssegna;
protected System.Web.UI.WebControls.Repeater rptListIntAttivi;
protected System.Web.UI.WebControls.Repeater rptListIntSospesi;
protected System.Web.UI.WebControls.Label lblTec;
protected System.Web.UI.WebControls.Label lblTecnico;
protected System.Web.UI.WebControls.Label lblTecnico2;

//Inizializzo la Stringa di connessione
protected SqlConnection sqlcn = new
SqlConnection((string)HttpContext.Current.Items["ConnDBStr"]);

private void Page_Load(object sender, System.EventArgs e)
{
// Visualizzo gli Interventi in attivo
rptListIntAttivi.DataSource = ATGetInterventi();
rptListIntAttivi.DataBind();
}
public DataTable ATGetInterventi()
{
DataSet dsInterventi = new DataSet();
SqlDataAdapter daInterventi = new SqlDataAdapter("ATGetAllIntPerTec",
this.sqlcn);
daInterventi.SelectCommand.CommandType = CommandType.StoredProcedure;
daInterventi.Fill(dsInterventi);

return dsInterventi.Tables[0];
}

Adriano Fabri
che problema hai avuto utilizzando l'evento ItemDataBound(che credo faccia propio al fatto tuo)

ciao marco

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

http://nostromo.spaces.live.com/default.aspx
12 messaggi dal 09 maggio 2001
sinceramente ho fatto dei tentativi ma non sono riuscito a trovare il modo di utilizzarlo per fare il controllo sul contenuto del campo "Tecnico".

Dato che è la prima volta che uso questo comando, probabilmente ho sbagliato a scrivere il codice.

Potresti aiutarmi facendomi un esempio esplicativo di come utilizzarlo???

Grazie in anticipo dell'interessamento e buone feste


Adriano Fabri

Adriano Fabri
3.168 messaggi dal 06 settembre 2002
Contributi | Blog
Ciao Adriano,

il discroso è un po lungo.
L'evento ItemDataBound viene scatenato per ogni riga che viene costruita nel repeater, comprese intestazione e footer. Di conseguenza l'evento si scatenerà anche per tutte le righe della Datatable che fa da sorgente dati.

All'interno dell'vento dovresti quindi accedere alla riga che della DataTable che stai leggendo: DataRowView drv = (DataRowView)e.Data.DataItem;

Una volta avuto il riferimento alla riga corrente ti testi il valore del campo "tecnico" e poi imposti la proprietà Visible dei tuoi controlli in funzione del suo valore. Per accedere a questi devi cercarli all'interno della riga. WebControl ctrl = e.Item.FindControl("NomeControllo");

Facci sapere..

HTH,

Nothing can be born from hartred

Stefano (SM15455) Mostarda
http://blogs.aspitalia.com/SM15455
Rome Italy
allora nel tag inserisci:

<asp:Repeater id=Repeater1 <b>OnItemDataBound="R1_ItemDataBound"</b> runat="server">


la parte in grassetto è quella necessaria a richiamare il metodo

nel codebehind

void R1_ItemDataBound(Object Sender, RepeaterItemEventArgs e) {
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 
{
....codice....
}
}
       }



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.