Question

Je travaille sur la génération dynamique des étiquettes en utilisant un DataList dans le code ASP.NET pour quelques jours maintenant, et ne peut pas, pour la vie de moi, obtenir le contrôle à l'affichage à l'écran. Je suis assez sûr que la question est une petite chose syntactique, ou une balise HTML que j'ai oublié ensemble. J'ai confirmé par le débogueur que la liste des données est, en fait, tiré dans la source de données, et quand je considère le code HTML « design » vue, le contrôle ne affichage. Cependant, quand je lance la page, le contrôle ne soit pas visible. Toute idée pourquoi cela se produit serait très apprécié.

Voici le code correspondant à la question ...

C # classe partielle:

    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 classe partielle:

<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>
Était-ce utile?

La solution

Vous créez une nouvelle variable locale quand vous dites:

DataList headerRepeater = new DataList(); .

Supprimer cette ligne de la Page_Load la page devrait fonctionner correctement.

La liste des données est déjà ajouté à la page collection de contrôle par l'événement Page Load temps est déclenchée

Autres conseils

// 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;

Supprimez la ligne suivante:

DataList headerRepeater = new DataList(); 

Votre créez une nouvelle instance d'un DataList et n'ont pas ajouté à des contrôles de la page.

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;

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top