Pregunta

He estado trabajando en forma dinámica la generación de algunas etiquetas usando un DataList en código ASP.NET durante unos días, y no puedo, por la vida de mí, obtener el control de pantalla a la pantalla. Estoy bastante seguro de que el tema es un poco pequeña cosa sintáctica, o una etiqueta HTML que olvidé conjunto. He confirmado a través del depurador que la lista de datos es, de hecho, que se tira en el origen de datos, y cuando veo el código de la vista 'diseño' HTML, el control Hace pantalla. Sin embargo, cuando ejecuto la página, el control no es visible. Cualquier idea de por qué está sucediendo esto sería muy apreciado.

A continuación se muestra el código correspondiente a la pregunta ...

C # clase parcial:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            InventoryService service = new InventoryService();

            ArrayList foundYears = service.FindYears();
            DataSet ds = new DataSet();
            ds.Tables.Add("Years");
            ds.Tables[0].Columns.Add("Year");

            foreach (string yr in foundYears)
            {
                if (yr != "")
                {
                    DataRow dr = ds.Tables[0].NewRow();
                    dr["Year"] = yr;
                    ds.Tables[0].Rows.Add(dr);
                }
            }

            DataList headerRepeater = new DataList();
            headerRepeater.DataSource = ds.Tables[0];
            headerRepeater.DataKeyField = "Year";
            headerRepeater.DataBind();
            headerRepeater.Visible = true;
        }
    }

HTML clase parcial:

<table width="100%" align="center">
    <tr>
        <td style="width: 868px">
             <asp:DataList id='headerRepeater' Runat='server' CellPadding='5' CellSpacing='15' GridLines='Vertical' HorizontalAlign='Left' RepeatColumns='30' RepeatDirection='Horizontal' RepeatLayout='Table' ShowFooter='False' ShowHeader='False' Visible = 'True' CssClass='DataList' DataKeyField ='Year'>
            <ItemTemplate>
                <asp:Label runat='server' ID='lblItemName' Text='<%# DataBinder.Eval(Container.DataItem, "Year") %>'>
                </asp:Label>
            </ItemTemplate>
        </asp:DataList>
    </td>
</tr>
<tr>
¿Fue útil?

Solución

Usted está creando una nueva variable local cuando se dice:

DataList headerRepeater = new DataList(); .

Eliminar esta línea en el Page_Load la página debería funcionar bien.

La lista de datos ya se ha añadido a la colección de control Page por el evento de tiempo de carga de página se activa

Otros consejos

// Why do you create a new variable named 'headerRepeater' here?    
DataList headerRepeater = new DataList(); 
headerRepeater.DataSource = ds.Tables[0];
headerRepeater.DataKeyField = "Year";
headerRepeater.DataBind();
headerRepeater.Visible = true;

Eliminar la siguiente línea:

DataList headerRepeater = new DataList(); 

Su están creando una nueva instancia de un DataList y no han añadido a los controles de página.

DataList headerRepeater = new DataList(); //The problem is here ControlThatWillHoldTheDataList.Controls.Add(headerRepeater); //My Addition
headerRepeater.DataSource = ds.Tables[0];
headerRepeater.DataKeyField = "Year";
headerRepeater.DataBind();
headerRepeater.Visible = true;

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top