Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo fornisce informazioni su come visualizzare i dati gerarchici usando i controlli Repeater annidati e Visual C# .NET.
Versione originale del prodotto: Visual C#
Numero KB originale: 306154
Riepilogo
Questo articolo descrive come usare i controlli Repeater annidati per visualizzare i dati gerarchici. È possibile applicare questo concetto ad altri controlli associati all'elenco.
Questo articolo fa riferimento agli spazi dei nomi della libreria di classi microsoft .NET Framework seguenti:
System.Data
System.Data.SqlClient
Eseguire l'associazione alla tabella padre
Avviare Visual Studio .NET.
Scegliere Nuovo dal menu Filee quindi fare clic su Progetto.
Fare clic su Progetti Visual C# in Tipi di progetto e quindi su ASP.NET'applicazione Web in Modelli.
Nella casella Percorso eliminare WebApplication#, quindi digitare NestedRepeater. Se si usa il server locale, lasciare il nome del server come
http://localhost
. Ilhttp://localhost/NestedRepeater
percorso viene visualizzato nella casella Posizione . Scegliere OK.In Esplora soluzioni fare clic con il pulsante destro del mouse sul nodo del nome del progetto NestedRepeater, scegliere Aggiungi e quindi fare clic su Aggiungi modulo Web.
Per assegnare un nome al Web Form, digitare NestedRepeater e fare clic su Apri.
Viene creato il nuovo Web Form. Viene aperto in Visualizzazione progettazione nell'IDE (Integrated Development Environment) di Visual Studio .NET. Nella casella degli strumenti selezionare il controllo Repeater e quindi trascinarlo nella pagina Web Form.
Modificare la proprietà ID di questo controllo Repeater in parentRepeater.
Passare alla visualizzazione HTML per questo Web Form. A tale scopo, fare clic sulla scheda HTML nell'angolo inferiore sinistro della finestra di progettazione. Il controllo Repeater genera il codice HTML seguente:
<asp:Repeater id="parentRepeater" runat="server"></asp:Repeater>
Aggiungere il codice seguente nei
Repeater
tag:<itemtemplate> <b> <%# DataBinder.Eval(Container.DataItem, "au_id") %> </b> <br> </itemtemplate>
Dopo aver eseguito questa operazione, il codice HTML per Repeater è il seguente:
<asp:Repeater id="parentRepeater" runat="server"> <itemtemplate> <b> <%# DataBinder.Eval(Container.DataItem, "au_id") %> </b> <br> </itemtemplate> </asp:Repeater>
In Esplora soluzioni fare clic con il pulsante destro del mouse su NestedRepeater.aspx e quindi scegliere Visualizza codice per passare al file code-behind NestedRepeater.aspx.cs.
Aggiungere la dichiarazione dello spazio dei nomi seguente all'inizio del file:
using System.Data; using System.Data.SqlClient;
Aggiungere il codice seguente all'evento
Page_Load
per creare una connessione al database Pubs e quindi associare laAuthors
tabella al controllo Repeater:public void Page_Load(object sender, EventArgs e) { //Create the connection and DataAdapter for the Authors table. SqlConnection cnn = new SqlConnection("server=(local);database=pubs; Integrated Security=SSPI"); SqlDataAdapter cmd1 = new SqlDataAdapter("select * from authors",cnn); //Create and fill the DataSet. DataSet ds = new DataSet(); cmd1.Fill(ds,"authors"); //Insert code in step 4 of the next section here. //Bind the Authors table to the parent Repeater control, and call DataBind. parentRepeater.DataSource = ds.Tables["authors"]; Page.DataBind(); //Close the connection. cnn.Close(); }
Note
Potrebbe essere necessario modificare il database stringa di connessione in base alle esigenze dell'ambiente.
Salvare tutti i file.
In Esplora soluzioni fare clic con il pulsante destro del mouse sul NestedRepeater.aspx e quindi scegliere Imposta come pagina iniziale.
Scegliere Compila soluzione dal menu Compila per compilare il progetto.
Visualizzare la pagina .aspx nel browser e quindi verificare che la pagina funzioni finora. L'output dovrebbe essere visualizzato come segue:
172-32-1176 213-46-8915 238-95-7766 267-41-2394 ...
Eseguire l'associazione alla tabella figlio
Nella visualizzazione HTML della pagina NestedRepeater.aspx individuare la riga di codice seguente:
<b> <%# DataBinder.Eval(Container.DataItem, "au_id") %> </b> <br>
Aggiungere il codice seguente dopo questo codice:
<asp:repeater id="childRepeater" runat="server"> <itemtemplate> <%# DataBinder.Eval(Container.DataItem, "[\"title_id\"]")%> <br> </itemtemplate> </asp:repeater>
Questo nuovo codice aggiunge un secondo controllo Repeater alla
ItemTemplate
proprietà del controllo Repeater padre.Impostare la
DataSource
proprietà per il controllo Repeater figlio come indicato di seguito:<asp:repeater ... datasource='<%# ((DataRowView)Container.DataItem).Row.GetChildRows("myrelation") %>' >
Dopo aver impostato la
DataSource
proprietà per il controllo Repeater figlio, il codice HTML per i due controlli Repeater (padre e figlio) viene visualizzato come segue:<asp:Repeater id="parentRepeater" runat="server"> <itemtemplate> <b> <%# DataBinder.Eval(Container.DataItem, "au_id") %> </b> <br> <asp:repeater id="childRepeater" runat="server" datasource='<%# ((DataRowView)Container.DataItem).Row.GetChildRows("myrelation") %>' > <itemtemplate> <%# DataBinder.Eval(Container.DataItem, "[\"title_id\"]")%><br> </itemtemplate> </asp:Repeater> </itemtemplate> </asp:Repeater>
Aggiungere la direttiva di pagina seguente all'inizio della pagina:
<%@ Import Namespace="System.Data" %>
Nella pagina code-behind sostituire la riga seguente nell'evento
Page_Load
://Insert code in step 4 of the next section here. //Create a second DataAdapter for the Titles table. SqlDataAdapter cmd2 = new SqlDataAdapter("select * from titleauthor",cnn); cmd2.Fill(ds,"titles"); //Create the relation between the Authors and Titles tables. ds.Relations.Add("myrelation", ds.Tables["authors"].Columns["au_id"], ds.Tables["titles"].Columns["au_id"]);
In questo modo la
Titles
tabella viene aggiunta all'oggetto DataSet e quindi vengono aggiunte le relazioni tra leAuthors
tabelle eTitles
.Salvare e compilare l'applicazione.
Visualizzare la pagina nel browser e quindi verificare che la pagina funzioni finora. L'output dovrebbe essere visualizzato come segue:
172-32-1176 PS3333 213-46-8915 BU1032 BU2075 238-95-7766 PC1035 267-41-2394 BU1111 TC7777
codice Nestedrepeater.aspx
<%@ Page language="c#" Codebehind="NestedRepeater.aspx.cs" AutoEventWireup="false" Inherits="NestedRepeater.NestedRepeater" %>
<%@ Import Namespace="System.Data" %>
<html>
<body>
<form runat=server>
<!-- start parent repeater -->
<asp:repeater id="parentRepeater" runat="server">
<itemtemplate>
<b>
<%# DataBinder.Eval(Container.DataItem,"au_id") %>
</b>
<br>
<!-- start child repeater -->
<asp:repeater id="childRepeater" datasource='<%# ((DataRowView)Container.DataItem).Row.GetChildRows("myrelation") %>' runat="server">
<itemtemplate>
<%# DataBinder.Eval(Container.DataItem, "[\"title_id\"]")%><br>
</itemtemplate>
</asp:repeater>
<!-- end child repeater -->
</itemtemplate>
</asp:repeater>
<!-- end parent repeater -->
</form>
</body>
</html>
Nestedrepeater.aspx.cs codice
using System;
using System.Data;
using System.Data.SqlClient;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace NestedRepeater
{
public class NestedRepeater : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Repeater parentRepeater;
public NestedRepeater()
{
Page.Init += new System.EventHandler(Page_Init);
}
public void Page_Load(object sender, EventArgs e)
{
//Create the connection and DataAdapter for the Authors table.
SqlConnection cnn = new SqlConnection("server=(local);database=pubs; Integrated Security=SSPI ;");
SqlDataAdapter cmd1 = new SqlDataAdapter("select * from authors",cnn);
//Create and fill the DataSet.
DataSet ds = new DataSet();
cmd1.Fill(ds,"authors");
//Create a second DataAdapter for the Titles table.
SqlDataAdapter cmd2 = new SqlDataAdapter("select * from titleauthor",cnn);
cmd2.Fill(ds,"titles");
//Create the relation bewtween the Authors and Titles tables.
ds.Relations.Add("myrelation",
ds.Tables["authors"].Columns["au_id"],
ds.Tables["titles"].Columns["au_id"]);
//Bind the Authors table to the parent Repeater control, and call DataBind.
parentRepeater.DataSource = ds.Tables["authors"];
Page.DataBind();
//Close the connection.
cnn.Close();
}
private void Page_Init(object sender, EventArgs e)
{
InitializeComponent();
}
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
}
}
Ulteriori informazioni
Per altre informazioni, vedere Controllo server Web Repeater.