2015-09-04 61 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