Datalist in ASP.NET non visualizzerà?
-
14-10-2019 - |
Domanda
Ho lavorato sulla dinamica generazione di alcune etichette utilizzando un DataList nel codice ASP.NET per un paio di giorni ormai, e non può, per la vita di me, ottenere il controllo per visualizzare la schermata. Sono abbastanza sicuro che la questione è un po 'piccola cosa sintattica, o un tag HTML che ho dimenticato di set. Ho confermato tramite il debugger che l'elenco dei dati è, infatti, essere tirato nel origine dati, e quando ho visualizzare il codice di 'design' visualizzazione HTML, il controllo non display. Tuttavia, quando si esegue la pagina, il controllo non è visibile. Qualsiasi comprensione quanto a perché questo sta accadendo sarebbe molto apprezzato.
Di seguito è riportato il codice relativo alla domanda ...
C # classe parziale:
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 parziale:
<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>
Soluzione
Si sta creando una nuova variabile locale quando si dice:
DataList headerRepeater = new DataList(); .
Rimuovi questa linea dal Page_Load pagina dovrebbe funzionare bene.
L'elenco dei dati è già aggiunto alla raccolta di controllo Page dall'evento tempo di caricamento della pagina viene attivata ??p>
Altri suggerimenti
// 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;
Rimuovere la seguente riga:
DataList headerRepeater = new DataList();
Il tuo stanno creando una nuova istanza di un DataList e non hanno aggiunto ai controlli di pagina.
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;