ciao, allora questa è classe derivante da ModalPopupExtender
public class ModalExtenderAutoLoad : ModalPopupExtender
{
/// <summary>Evento scatenato alla chiusura del controllo</summary>
public event EventHandler<EventArgs> Close = null;
/// <summary>Legge/Imposta l'evento Close (salvataggio per non perderlo nel postback)</summary>
private EventHandler<EventArgs> CloseEvent
{
get { return GetSessionData("CloseEvent") as EventHandler<EventArgs>; }
set { SetSessionData("CloseEvent", value); }
}
/// <summary>Legge/Imposta il percorso del controllo da caricare</summary>
public string Path
{
get { return GetSessionValue("PopupExtenderAutoLoadPath"); }
set { SetSessionValue("PopupExtenderAutoLoadPath", value); }
}
/// <summary>Legge/Imposta l'eventuale classe con i parametri per il controlo</summary>
private object Parameters
{
get { return GetSessionData("ParametersLoadPath"); }
set { SetSessionData("ParametersLoadPath", value); }
}
/// <summary>Legge/Imposta l'oggetto derivante dall'interfaccia IModalForm</summary>
private IModalForm Form
{
get { return GetSessionData("FormAutoLoadPath") as IModalForm; }
set { SetSessionData("FormAutoLoadPath", value); }
}
/// <summary>Legge/Imposta il colore del pannello</summary>
public Color PanelColor
{
get { return (Color)(GetSessionData("PanelColorAutoLoad") ?? Color.White); }
set { SetSessionData("PanelColorAutoLoad", value); }
}
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
if (!Page.IsPostBack)
ClearParam();
if (!Path.IsNullOrEmpty())
Show();
}
/// <summary>Rimuove il path e la lista dei parametri</summary>
private void ClearParam()
{
Path = "";
Parameters = null;
}
/// <summary>Ritorna i dati della sessione con la chiave specificata</summary>
/// <param name="key">Chiave dei dati</param>
/// <returns>I dati</returns>
private object GetSessionData(string key)
{
return Global.Current.GetSessionData(key);
}
/// <summary>Ritorna il valore della sessione con la chiave specificata</summary>
/// <param name="key">Chiave del valore</param>
/// <returns>Il valore</returns>
private Any GetSessionValue(string key)
{
return Global.Current.GetSessionValue(key);
}
/// <summary>Imposta i dati della sessione con la chiave specificata</summary>
/// <param name="key">Chiave del valore</param>
/// <param name="data">Dati da usare (default elimina la chiave)</param>
/// <returns>L'esito</returns>
private bool SetSessionData(string key, object data = null)
{
return Global.Current.SetSessionData(key, data);
}
/// <summary>Imposta il valore della sessione con la chiave specificata</summary>
/// <param name="key">Chiave del valore</param>
/// <param name="value">Valore da usare (default elimina la chiave)</param>
/// <returns>L'esito</returns>
private bool SetSessionValue(string key, Any value = default(Any))
{
return Global.Current.SetSessionData(key, value.GetValue());
}
/// <summary>Carica il controllo</summary>
new public void Show()
{
if (Close != null)
CloseEvent = Close;
else if (CloseEvent != null)
Close += CloseEvent;
Form = Page.LoadControl(Path) as IModalForm;
if (Form == null)
throw new GenericException("Il controllo non deriva dall'interfaccia IModalForm");
if (Parameters != null)
Form.InitParameters(Parameters);
Control ctrl = (Control)Form;
ctrl.ID = Form.ColtrolID.ValidString("AutoLoadControl");
IMasterPage master = (IMasterPage)Page.Master;
master.PanelForm.Controls.Add(ctrl);
master.PanelForm.BackColor = PanelColor;
master.UpdatePanelForm1.Update();
if (!Form.DragId.IsNullOrEmpty())
master.PopupExtender.PopupDragHandleControlID = Form.DragId;
base.Show();
}
/// <summary>Rimuove il controllo</summary>
new public void Hide()
{
ClearParam();
base.Hide();
RemoveControl();
OnClose(this, Form.CloseArgs ?? EventArgs.Empty);
Form = null;
CloseEvent = null;
}
protected virtual void OnClose(object sender, EventArgs e)
{
if (Close != null)
Close(this, e);
}
/// <summary>Rimuove il controllo dall'updatepanel</summary>
private void RemoveControl()
{
IMasterPage master = (IMasterPage)Page.Master;
master.PanelForm.Controls.Clear();
master.UpdatePanelForm1.Update();
}
/// <summary>Imposta la classe con i parametri per l'oggetto da caricare</summary>
/// <typeparam name="T">Tipo della classe</typeparam>
/// <param name="param">Classe da impostare</param>
public void SetParameters<T>(T @param)
where T : class
{
Parameters = param;
}
}
questa è l'interfaccia da cui devono derivare tutti i controlli
/// <summary>Interfaccia per le form caricate dinamicamente</summary>
public interface IModalForm
{
/// <summary>Id dell'oggetto per il drag della finestra</summary>
string DragId { get; }
/// <summary>Id del controllo</summary>
string ColtrolID { get; }
/// <summary>Evento chiusura</summary>
EventArgs CloseArgs { get; set; }
/// <summary>Imposta la classe con i parametri</summary>
/// <param name="param">Classe dei parametri</param>
void InitParameters(object param);
}
e questo è come richiamo il tutto
protected void cmdFind_Click(object sender, EventArgs e)
{
// Controllo che sia stato selezionato un archivio
if ((!TableName.IsNullOrEmpty()) && (ColumnsArchive != null) && (ColumnsArchive.Count >= 1))
{
ModalExtenderAutoLoad autoLoad = ((IMasterPage)Page.Master).PopupExtender;
autoLoad.Path = "/UI/FieldFilterControl.ascx";
autoLoad.SetParameters(new ParamFilter
{
ColumnsArchive = ColumnsArchive
});
autoLoad.Close += (caller, args) =>
{
CloseWithClearEventArgs args1 = args as CloseWithClearEventArgs;
switch (args1.ButtonPressed)
{
case ButtonChoiceWithClear.Clear:
case ButtonChoiceWithClear.Confirm:
ClearSelectedDocument();
// Riaggiorno la griglia con l'imposatzione del where
FillGridView();
break;
}
};
autoLoad.Show();
}
}
sono veramente in alto mare
se riesci a darmi una mano te ne sarei molto grato. grazie in anticipo