我创建了一个包含网格的UserControl
。动态创建一个带参数的用户控件
在主页面中,用户可以从组合中选择选项,然后,我需要为用户选择的每个选项生成一个UserControl
。
我有2个问题:
我需要的参数传递给用于配置网格的数据源的用户控制,但我不知道该怎么做。
如果我为测试设置了默认参数,当发生PostBack时,用户控件将被删除。
我创建了一个包含网格的UserControl
。动态创建一个带参数的用户控件
在主页面中,用户可以从组合中选择选项,然后,我需要为用户选择的每个选项生成一个UserControl
。
我有2个问题:
我需要的参数传递给用于配置网格的数据源的用户控制,但我不知道该怎么做。
如果我为测试设置了默认参数,当发生PostBack时,用户控件将被删除。
我没有看到你的任何代码,所以我给你留个简单的例子。
首先,定义一个属性时,您需要传递值:
public partial class SomeControl : System.Web.UI.UserControl
{
public int AProperty { get; set; }
...
}
那么,从您需要使用您的用户控件aspx
,先注册它像往常一样:
<%@ Register Src="~/MyControls/SomeControl.ascx" TagPrefix="my" TagName="SomeControl" %>
并在以后使用它,并将其值传递给物业,像这样:
<my:SomeControl runat="server" ID="SomeControl1" AProperty="1" />
您也可以设置该属性,从包含控制你的aspx
背后的代码,这样的:
SomeControl1.AProperty = 1;
动态控制
您可以创建这个动态控制是这样的:
var ctrl = new SomeControl();
ctrl.AProperty = 1;
然后将这些控件添加到您的中的<asp:PlaceHolder
:
somePlaceHolder.Controls.Add(ctrl);
在回发(即在selectedindexchanged下拉列表上)时,该占位符内的所有控件都将消失,但信息仍处于视图状态,因此您只需在相同的占位符内重新创建相应的控件,来自viewstate的旧值将被附加到重新创建的控件。
对不起,我不是张贴代码。
用户控制
<div class="row panel">
<div id="datos" class="col-md-9">
<telerik:RadGrid ID="gridDatos" runat="server" GroupPanelPosition="Top" AllowPaging="True" ShowGroupPanel="True"
AllowSorting="True" ShowFooter="True" AllowFilteringByColumn="true" OnDataBound="gridDatos_DataBound" CellSpacing="-1" GridLines="Both">
....
用户控件代码
public void SetDataSource(List<EntitiesInforme.SP.InformeProcesado> listaDatos)
{
gridDatos.DataSource = null;
gridDatos.DataSource = listaDatos;
gridDatos.MasterTableView.DataSource = listaDatos;
gridDatos.DataBind();
}
页代码
protected void btnGenerarInforme_Click(object sender, EventArgs e)
{
int numeroSemana = 0;
int estadoOperacion = 0;
Int32.TryParse(comboNumeroSemanas.SelectedValue.ToString(), out numeroSemana);
Int32.TryParse(comboEstadoOperacion.SelectedValue.ToString(), out estadoOperacion);
if (numeroSemana <= 0 || estadoOperacion <= 0)
return;
lv.Controls.Clear();
// Create an user control for each checked
foreach (var opcion in comboTipoOperacion.CheckedItems)
{
// Get data
var datos = GetInforme(numeroSemana, Convert.ToInt32(opcion.Value), estadoOperacion);
var di = (DatosInforme)LoadControl("/UserControls/DatosInforme.ascx");
di.SetDataSource(datos);
lv.Controls.Add(di);
}
}
如果我做T他,我生成用户控制权,但是,当回发完成(在电网例如分组列),用户控件消失
感谢
将代码添加到您的问题(您可以编辑它)并删除该答案。你读过我的回答吗?你试过最后的东西吗? – zed
请张贴一些代码。你不能在usercontrol构造函数中传递参数吗? – Murilo