Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    55

    Controllo calendar in datagrid edit mode

    Salve, vi sottopongo un problema:
    sto utilizzando un calendar popup realizzato attraverso una pagina aspx che richiamo in una finestra popup a mezzo javascript. La funzione GetDate acquisisce come parametro il nome del controllo (cioè il suo ID),
    così che apro la finestra del calendario avente per parametri il nome del form e il nome del controllo, seleziono la data e attraverso un altro javascript restituisco la data del calendario al controllo chiamante.
    Fino a quando uso un textbox all'interno di una tabella, non ci sono problemi.
    Il problema è quando devo incollare la data del calendario in un textbox di un datagrid in modalità edit.
    Pare che non mi riconsca l'ID del textbox del datagrid.
    Credo che il problema stia nel fatto che il controllo textbox, in questo caso, è inserito nel controllo padre datagrid.
    Mi fornite qualche suggerimento?
    Vi posto le funzioni js GetDate e ReturnDate
    Grazie
    Enzo

    function GetDate(CtrlName)
    { ChildWindow = window.open('Calendar.aspx?FormName=' + document.forms[0].name + '&CtrlName=' + CtrlName, "PopUpCalendar", "width=270,height=300,top=200,left=200,toolbars=no ,scrollbars=no,status=no,resizable=no"); }
    function CheckWindow() {ChildWindow.close();}
    function ReturnDate()
    { window.opener.document.forms["<%=strFormName %>"].elements["<%=strCtrlName %>"].value = "<%=strSelectedDate %>";
    window.close(); }

  2. #2
    questa funzione suppongo che tu la richiami da un bottone, come il codice dove associ la funzione javascript ai bottoni della datagrid?

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    55
    <ItemTemplate>
    <asp:Label runat="server" text='<%# DataBinder.Eval(Container, "DataItem.datain","{0:dd/MM/yyyy}") %>'></asp:Label>
    </ItemTemplate>
    <EditItemTemplate>
    <asp:TextBox width="70" id="data" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.datain","{0:dd/MM/yyyy}") %>' ></asp:textbox>
    [img]../pic/calen.gif[/img]
    <asp:RequiredFieldValidator id="rfval1" runat="server" Display="Dynamic" ErrorMessage="Immettere una data (gg/mm/aaaa)" ControlToValidate="data"></asp:RequiredFieldValidator>
    <asp:CompareValidator id="cv" runat="server" ErrorMessage="Data non valida" Display="Dynamic" ControlToValidate="data" Operator="DataTypeCheck" Type="Date"></asp:CompareValidator>
    </EditItemTemplate>

  4. #4
    Il fatto è che l'id del controllo sul server non è lo stesso che avrè sul client (anche perchè di campi 'data' c'è ne sarebbe uno per ogni riga), quindi quando fai riferimento a 'data' in javascript non viene trovato nessun controllo.
    devi usare l'evento OnItemDataBound del datagrid per valorizzare il comando di quel javascript:

    nel tag della datagrid devi aggiungere l'handler per l'evento:
    codice:
    OnItemDataBound="TuaDataGrid_ItemDataBound"
    devi impostare il controllo anchor che ti lancia il javascript come un controllo server:
    codice:
    <a HRef="" id=DataAnchor runat=server>
    nell codebehind:
    codice:
    protected void DataGridSupports_ItemDataBound(object sender,  DataGridItemEventArgs e)
    {
        if(e.Item.FindControl("DataAnchor")) //Se trova il controllo anchor
           ((HtmlAnchor)e.Item.FindControl("DataAnchor")).HRef="javascript:GetDate('"+e.Item.FindControl("data").ClientID+"');";
    }
    più o meno

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2003
    Messaggi
    55
    Grazie 1000, fratello!
    Con qualche ritocco mi hai dato la soluzione.
    La posto, affinché possa essere di aiuto ad altri amici
    nel codebehind:
    Imports System.Web.UI.HtmlControls

    Sub calcoladata(ByVal sender As Object, ByVal e As DataGridItemEventArgs)
    If not (e.Item.FindControl("ancora")) is nothing Then
    dim pippo as HtmlAnchor=(CType(e.Item.FindControl("ancora"), HtmlAnchor))
    pippo.HRef="javascript:GetDate('"+e.Item.FindContr ol("data").ClientID+"')"
    End If
    end sub

    dove <calcoladata> è il gestore dell'evento OnItemDataBound del datagrid

    e <ancora> è il link associato al textbox del datagrid
    <a href="" id="ancora" runat="server" ><img.......> .

    Saluti
    Enzo

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.