我创建了一个包含网格的UserControl
。
在主页面中,用户可以从组合中选择选项,然后,我需要为用户选择的每个选项生成UserControl
。
我有两个问题:
我需要将参数传递给用户控件以配置网格的数据源,但我不知道该怎么做。
如果我为test设置默认参数,当发生PostBack时,将删除用户控件。
答案 0 :(得分: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
中的aspx
:
somePlaceHolder.Controls.Add(ctrl);
在回发时(即在下拉列表的selectedindexchanged上),该占位符内的所有控件都将消失,但信息仍在您的视图状态中,因此您需要做的就是在同一占位符内重新创建相应的控件viewstate中的旧值将附加到重新创建的控件。
答案 1 :(得分: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">
....
UserControl代码
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);
}
}
如果我这样做,我会生成用户控件,但是,当回发完成时(例如,在网格中对列进行分组),用户控件将消失
由于