2015-09-04 60 views
1

我创建了一个包含网格的UserControl动态创建一个带参数的用户控件

在主页面中,用户可以从组合中选择选项,然后,我需要为用户选择的每个选项生成一个UserControl

我有2个问题:

  1. 我需要的参数传递给用于配置网格的数据源的用户控制,但我不知道该怎么做。

  2. 如果我为测试设置了默认参数,当发生PostBack时,用户控件将被删除。

+1

请张贴一些代码。你不能在usercontrol构造函数中传递参数吗? – Murilo

回答

0

我没有看到你的任何代码,所以我给你留个简单的例子。

首先,定义一个属性时,您需要传递值:

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的旧值将被附加到重新创建的控件。

0

对不起,我不是张贴代码。

用户控制

<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他,我生成用户控制权,但是,当回发完成(在电网例如分组列),用户控件消失

感谢

+0

将代码添加到您的问题(您可以编辑它)并删除该答案。你读过我的回答吗?你试过最后的东西吗? – zed