Pasar parámetros a un UserControl con LoadControl.

Fuente: a nil value.
18 del 3 de 2010

Si generamos un UserControl dinámicamente y queremos pasarle parámetros desde la página principal para poder trabajar con ellos tenemos dos métodos:

Metodo fácil:

Utilizando propiedades públicas en nuestro UserControl tal que:


myUserControl ctrl = this.Page.LoadControl("myUserControl.ascx");
ctrl.value1 = "First Parameter";
ctrl.value2 = 200
Panel.Contrlols.Add(ctrl);


Obviamente tendremos que tener dos propiedades publicas en nuestra clase myUserControl para los dos parámetros que queremos pasar.

Y el método ninja:

Añadimos la siguiente función en la página donde hagamos queramos cargar dinámicamente el UserControl:

private UserControl LoadControl(string UserControlPath, params object[] constructorParameters)
{
List constParamTypes = new List();
foreach (object constParam in constructorParameters)
{
constParamTypes.Add(constParam.GetType());
}

UserControl ctl = Page.LoadControl(UserControlPath) as UserControl;

// Find the relevant constructor
ConstructorInfo constructor = ctl.GetType().BaseType.GetConstructor(constParamTypes.ToArray());

//And then call the relevant constructor
if (constructor == null)
{
throw new MemberAccessException("The requested constructor was not found on : " + ctl.GetType().BaseType.ToString());
}
else
{
constructor.Invoke(ctl, constructorParameters);
}

// Finally return the fully initialized UC
return ctl;
}



Añadimos en nuestro UserControl dos constructores; uno vacío y otro con los parámetros que le queramos pasar.


public partial class myUserControl : System.Web.UI.UserControl
{
private string value1;
private int value2;
public myUserControl ()
{
}

public myUserControl (string parameter1, int parameter2)
{
this.value1 = parameter1;
this.value2 = parameter2;
}
}


Y por último cuando queramos añadir dinámicamente el control:


Control ctrl = LoadControl("myUserControl.ascx","First Parameter",200) ;
Panel.Controls.Add(ctrl) ;


Fuente: http://blah.winsmarts.com/2006/05/20/loadcontrol-a-usercontrol--and-pass-in-constructor-parameters.aspx

Recomendar a un amigo