20 messaggi dal 26 luglio 2004
Propondo una discussione di un'altro forum....

----------------------------------------------------------------------------------------------------

MESSAGGIO 1

Da:Valerio Di Maria (dimaria_v@hotmail.com)
Oggetto:Elemento <INPUT type="file"> e Datagrid


View this article only
Newsgroups:microsoft.public.it.dotnet.csharp
Data:2004-08-18 07:10:31 PST


Gentili utenti,
qualcuno sa spiegarmi perchè inserendo un <INPUT type="file"
id="NewFile"> in una <asp:tableCell> nel codebehind associato alla
pagine viene "visto" benissimo e invece quando inserisco un'altro
<INPUT type="file" id="UpdateFile"> in un <ItemEditTemplate> di un
datagrid non viene passato alcun riferimento al cs?(dà valore
indefinito) (se tutti e due gli elementi stessero solo nel tag
<asp:tableCell> il cs vede i riferimenti, ma purtroppo mi serve per
forza dentro un <ItemEditTemplate>)

----------------------------------------------------------------------------------------------------

MESSAGGIO 2 di risposta

Semplcissimo, perchè i template sono degli 'stili' e non rappresentano
controlli reali.
Quando definisci un template, indichi solo il layout e gli attributi che
dovranno avere i controlli quando saranno creati.

Infatti tu definisci una sola serie di controlli dentro il template ma poi
la datagrid ne crea tante copie quante sono le righe che vengono mostrate.
Se nel code behind venissero messi i riferimenti ai controlli, quanti ne
dovrebbero essere messi visto che il numero di righe dipende dai dati
presenti nel datasource?

Questo è il motivo per cui è la datagrid a generare i controlli
dinamicamente durante il binding. A te sta il compito di gestire (se vuoi)
l'evento ItemDataBound al cui interno devi usare
e.Item.FindContro("IdDelControllo") per ottenere il reference al controllo
generato nella riga a cui l'evento si riferisce.
Attenzione che l'evento ItemDataBound occorre una volta per ogni riga,
header e footer compresi. Quindi e.Item si riferisce alla riga attualmente
in costruzione.
"IdDelControllo" è l'id che hai specificato dentro il template.
Il controllo tornato da FindControl lo puoi castare al tipo di controllo che
hai usato nel template (LinkButton, Label, ...) su cui potrai usare i
metodi, proprietà ed eventi.

----------------------------------------------------------------------------------------------------

MESSAGGIO 3

Non sono riuscito a correggere il problema e quindi ho risposto:

Da:Valerio Di Maria (dimaria_v@hotmail.com)
Oggetto:Re: Elemento <INPUT type="file"> e Datagrid


View this article only
Newsgroups:microsoft.public.it.dotnet.csharp
Data:2004-08-19 03:36:01 PST


Caro Raffaele, ho provato come dici ma si blocca al momento che
richiedo la pagina e va in stallo l'intera applicazione:
Allora la datagrid è dichiarata nel seguente modo:

<asp:DataGrid ID="QuestionsGrid" runat="server"
CssClass="Grid_General"
HeaderStyle-CssClass="Grid_Header"
ItemStyle-CssClass="Grid_Item"
AlternatingItemStyle-CssClass="Grid_AlternatingItem"
AllowSorting="True"
AutoGenerateColumns="False" DataKeyField="QuestionID"
OnEditCommand="QuestionsGrid_Edit"
OnCancelCommand="QuestionsGrid_CancelEdit"
OnUpdateCommand="QuestionsGrid_Update"
OnItemDataBound="Question_Bound"
OnSortCommand="QuestionsGrid_Sort"
Width="100%">

, l'EditItemTemplate è questo:

<EditItemTemplate>
<asp:TextBox runat="server" CssClass="TextBox"
Text='<%# DataBinder.Eval(Container.DataItem,
"UrlImage") %>'
ID="EditUrlImage" Width="100%" />
<input type="file" ID="UpdateFile" runat="server" size="35"
NAME="UpdateFile">
</EditItemTemplate>

,nel page load del codebehind ho scritto:

QuestionsGrid.ItemDataBound +=new
DataGridItemEventHandler(this.Question_Bound);

ed infine il metodino che mi hai spiegato è questo:

protected void Question_Bound(Object sender, DataGridItemEventArgs e)
{
UpdateFile = (HtmlInputFile)e.Item.FindControl("UpdateFile");
}


FINE
---------------------------------------------------------------------------------------------------
Potete aiutarmi?

The Pupon's

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.