2010-10-13 6 views
1

Je suis si proche, mais jusqu'à présent. J'ai deux tables, une pour les détails de publication, l'autre pour la liste d'adjacence des catégories.Affichage de données partiellement hiérarchiques avec des répéteurs imbriqués

J'essaie d'afficher l'ensemble des données avec des répéteurs imbriqués (sauf si il y a une meilleure façon) et je construis mon DataSet comme le montre:

string strSql = "SELECT category_id, parent_id, cat_name_en " + 
       "FROM categories;" + 
       "SELECT pub_id, title_en, category_id " + 
       "FROM publications;"; 

SqlConnection conn = new SqlConnection(connString.ConnectionString); 
SqlDataAdapter da = new SqlDataAdapter(strSql, conn); 

DataSet _ds = new DataSet(); 
da.Fill(_ds); 
_ds.DataSetName = "categories"; 
_ds.Tables[0].TableName = "category"; 
_ds.Tables[1].TableName = "publications"; 

_ds.Relations.Add("ParentChild", 
        _ds.Tables["category"].Columns["category_id"], 
        _ds.Tables["category"].Columns["parent_id"], false); 
_ds.Relations[0].Nested = true; 

_ds.Relations.Add("CategoryMembers", 
        _ds.Tables["category"].Columns["category_id"], 
        _ds.Tables["publications"].Columns["category_id"], false); 
_ds.Relations[1].Nested = true; 


categoryRepeater.DataSource = _ds.Tables["category"]; 
categoryRepeater.DataBind(); 

J'afficher les données comme ceci: J'ai imbriqué les répéteurs comme ça parce que certaines catégories n'ont pas de catégories enfants, mais ont quand même des publications.

J'ai donc les relations en place pour obtenir des catégories enfants, puis obtenir toutes les publications appartenant à cette catégorie. Je reçois la liste des catégories avec leurs enfants et toutes les publications qui appartiennent à la catégorie.

Le problème est que je n'arrive pas à comprendre comment empêcher certaines catégories enfants d'être traitées comme des parents. Il y a des catégories qui n'ont pas de parents, mais qui ont quand même des publications. Ces catégories s'afficheront correctement sous leur parent, puis AGAIN comme leur propre catégorie parente.

Comment configurer les tables ou les relations afin que les catégories enfants ne soient pas traitées comme des parents?

+0

Voici bel article détaillé sur le contrôle du répéteur imbriqué pour afficher les données hiérarchiques http: // goo. gl/I37Nuj –

Répondre

2

D'abord, vous devrez créer un DataView avec le RowFilter soit « id_parent est nulle » ou parent_id = « » en fonction de ce que les données sont

bind suivant qui Dataview au lieu de la table.

par exemple.

DataView dv = new DataView(_ds.Tables["category"]); 
dv.RowFilter = "parent_id is null"; 

categoryRepeater.DataSource = dv; 

Vous ne devriez pas avoir à toucher votre fonction GetChildRelation car elle sera toujours obtenir un DataRowView de Container.DataItem

+0

Ouais c'était ça. J'avais le sentiment que ce serait quelque chose de petit comme ça. Merci beaucoup. – TomCDona

Questions connexes