Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [Framework 4 - C#] Intercettare l'evento di SELECT del Gridiview

    Ciao a tutti,
    ho una struttura un po' complessa e annidata di controlli:

    <dataList>
    ogni Item del dataList contiene:
    <diverse label />
    <objectDataSource />
    <gridview />
    </dataList>

    Ogni gridview viene popolato in base ai dati del dataItem.

    1° problema - Devo riuscire a personalizzare i parametri per la SELECT per popolare le varie Gridview, ho provato 2 modi ma non ci sono riuscito. a) Esiste un handler del gridview che viene eseguito appena prima di invocare il metodo di Select del objectDataSource? Perchè io ho provato con il metodo onDataBinding ma a quanto pare non sempre viene invocato. b) E' possibile sapere da un objectDataSource chi lo ha invocato? in tal caso riuscirei a settare i parametri giusti di quel particolare Gridview.

    2° Problema - c'è modo di conoscere l'indice di Item del DataList in cui è contenuto un controllo? Mi spiego meglio: Io elimino un record di un Gridview a fine operazione (onRowDeleted) ho bisogno di sapere l'indice dell'Item che contiene questo Gridview che ha appena eseguito l'operazione di delete.

    Qualcuno saprebbe aiutarmi?
    Grazie

  2. #2
    ciao,
    per rispondere in modo esaustivo alla tua esigenza, avrei bisogno di replicare interamente il tuo esempio...... (cosa che in questo momento non riesco a fare). Forse con qualche dettaglio in più del tuo codice, riusciamo comunque a trovare una soluzione.
    Non capisco infatti cosa intendi per "riuscirei a settare i parametri giusti di quel particolare Gridview"
    un gridview non ha parametri, casomai i parametri sono del datasource associato.

    Prova a spiegare meglio la situazione (magari con un po' di codice).


    riesco a rispondere solo in parte:

    1-a: esiste l'evento onSelecting dell'ObjectDataSource, nel quale puoi andare a modificare i parametri che stai per mandare al metodo sottostante

  3. #3
    Ciao,
    grazie della risposta. Io nel frattempo ho risolto il problema in questo modo, da questo codice capisci anche di cosa avevo bisogno:

    codice:
    protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
    {
    	switch (e.Item.ItemType)
    	{
    		case ListItemType.AlternatingItem:
    		case ListItemType.Item:
    		case ListItemType.EditItem:
    			
    			... codice vario ...
    			Label labAppo = null;
    						
    			//associazione gridview al record
    			string param1 = "", param2 = "", param3 = "", param4 = "", retMess = "";
    			GridView gvRec = (GridView)e.Item.FindControl("gvNotaa1");
    
    			labAppo = (Label)e.Item.FindControl("param1");
    			param1 = labAppo.Text;
    			labAppo = (Label)e.Item.FindControl("param2");
    			param2 = labAppo.Text;
    			labAppo = (Label)e.Item.FindControl("param3");
    			param3 = labAppo.Text;
    			labAppo = (Label)e.Item.FindControl("param3");
    			param4 = labAppo.Text;
    
    			gvRec.DataSource = eventiMethods.GetNotePerQuestoItem(param1, param2, param3, param4, out retMess);
    			gvRec.DataBind();
    			
    			... codice vario ...
    			
    			break;
    		
    		default:
    			break;
    	}
    }
    Il mio obbiettivo era di ottenere questo risultato usando però un object data source per ogni gridview, ovvero avere questo codice:

    codice:
    <asp:ObjectDataSource ID="Eve" TypeName="evenNeg" SelectMethod="GetElenco"
    		runat="server" OnSelecting="Eve_Selecting" OnSelected="Eve_Selected">
    </asp:ObjectDataSource>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
    	<ContentTemplate>
    
    		<asp:DataList ID="DataList1" runat="server" DataSourceID="Eve" Visible="false"
    			OnItemDataBound="DataList1_ItemDataBound" DataKeyField="IDcampo" OnItemCommand="DataList1_ItemCommand">
    			<HeaderTemplate>
    				... svariato codice ...
    			</HeaderTemplate>
    			<ItemTemplate>
    				<asp:Table ID="tabItem" runat="server">
    					... svariato codice ...
    				</asp:Table>
    				<div class="divDettagli">
    					... svariato codice ...
    					<h3>NOTE</h3>
    					<asp:UpdatePanel runat="server" UpdateMode="Conditional">
    						<ContentTemplate>
    							<asp:objectDataSource ... ></asp:objectDataSource>
    							<!--Ogni gridview doveva essere associato al corrispettivo objectdatasource dentro questo updatePanel,
    								in fase di select volevo personalizzare i campi di select tramite i campi dell'item in cui mi trovo
    								(che arrivano dalla select di ObjectDataSource con ID="Eve" -->
    							<asp:GridView runat="server" ID="gvNotaa1" DataKeyNames="...campi chiave..." 
    								OnRowDataBound="gvNote_RowDataBound" OnRowDeleting="gvNote_RowDeleting">
    								<Columns>
    									... le varie colonne ...
    								</Columns>
    							</asp:GridView>
    							... svariato codice ...
    						</ContentTemplate>
    					</asp:UpdatePanel>
    				</div>
    			</ItemTemplate>
    		</asp:DataList>
    			
    	</ContentTemplate>
    </asp:UpdatePanel>
    Però in questo modo non riuscivo in fase di esecuzione a specificare i parametri per la SELECT

  4. #4
    a parer mio è più corretta la soluzione che hai trovato.

    Giusto per conoscenza, l'altra soluzione poteva essere la seguente:
    la griglia la associavi ad un ObjectDataSource come ti eri prefissato; a questo ObjectDataSource gli configuravi 4 "ControlParameter" che facevano riferimento alle 4 label (param1, param2, param3, param4)

    Questo è l'equivalente a quello che hai fatto da codice.
    codice:
    <asp:ObjectDataSource ID="..." runat="server"  ... >
        <SelectParameters>
            <asp:ControlParameter ControlID="Param1" Name="..." PropertyName="Text" Type="String" DefaultValue="" />
            <asp:ControlParameter ControlID="Param2" Name="..." PropertyName="Text" Type="String" DefaultValue="" />
            <asp:ControlParameter ControlID="Param3" Name="..." PropertyName="Text" Type="String" DefaultValue="" />
            <asp:ControlParameter ControlID="Param4" Name="..." PropertyName="Text" Type="String" DefaultValue="" />
            <asp:Parameter Direction="Output" Name="..." Type="String" />
        </SelectParameters>
    </asp:ObjectDataSource>
    Come puoi vedere dal codice, non ho messo i nomi ai parametri. Questo perché dovrai metterli uguali ai nomi dei parametri della funzione GetNotePerQuestoItem.

    ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.