我創建了一個包含網格的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