9
votes

Rendu une liste non ordonnée à l'aide de ASP.NET

J'ai besoin de rendre une liste non ordonnée avec les données obtenues à partir de la base de données à l'aide de ASP.NET/C#.MY Data ressemble à ceci.

<ul class="simpleTree">
<li class="root">
<span><a href="#" title="root">root</a></span>
<ul>
<li class="open" >
<span><a href="#" title=1>ELECTRONICS</a></span>
<ul>
<li>
<span>TELEVISIONS</span>
<ul>
<li>
<span class="text"><a href="#" title=3>TUBE</a></span>
</li>
<li>
<span class="text"><a href="#" title=4>LCD</a></span>
</li>
<li><span class="text"><a href="#" title=5>PLASMA</a></span>
</li>
</ul>
</li>
<li>
<span>PORTABLE ELECTRONICS</span>
<ul>
<li>
<span class="text"><a href="#" title=7>MP3 PLAYERS</a></span>
<ul>
<li>
<span class="text"><a href="#" title=8>FLASH</a></span>
</li>
</ul>
</li>
<li>
<span class="text"><a href="#" title=9>CD PLAYERS</a></span>
</li>
<li>
<span class="text"><a href="#" title=10>2 WAY RADIOS</a></span>
</li>
</ul>
</li></ul>
</li></ul>
</li></ul>


0 commentaires

4 Réponses :


3
votes

Utilisez le contrôle de répéteur.

échantillons:


3 commentaires

Le contrôle du répéteur est presque obsolète par le contrôle ListView.


Bonjour Barrett, une fois que je présente la liste non commandée sous la forme d'une arborescence, je dois appliquer des JS pour fournir une fonctionnalité de glisser-déposer. C'est possible si j'utilise la commande TreeView à la place? Aussi j'ai environ 500 enregistrements dans La DB.Si je les présente comme un arbreView est que cela ne sera pas une charge sur le serveur et de créer des retards entre les post-retours?


@Kranthi: Pour les fonctionnalités de glisser-déposer et de riches, vous pouvez essayer un composant 3ème partie comme Telerik Telerik.com/Products/aspnet-ajax/treeeview.aspx



2
votes

sauf si vous utilisez .NET 2.0, vous devez utiliser le contrôle ListView.

Utilisation de la liste ListView et DataPager's ASP.NET 3.5: Affichage des données avec la listeView


0 commentaires

4
votes

Vous pouvez faire quelque chose comme celui-ci dans le code, puis donner le résultat à un contrôle littéral de votre page: xxx

update: je l'ai fait mettra dans une classe CSS sur les éléments de la liste liés à la profondeur comme demandé dans les commentaires.


9 commentaires

Je veux vraiment DV Cela, mais c'est une déclaration techniquement correcte, mais je ne recommande jamais de faire cela. Il y a des contrôles signifiants pour cela, je préférerais lier une boucle de foresach dans la page ASPX avant cela.


Bonjour Chris, pourquoi ne recommanderiez-vous pas la méthode ci-dessus?


J'aimerais bien entendre pourquoi vous pensez que cela est si mauvais par rapport à un groupe de liste de liste imbriquée (que je ne suis pas sûr de travailler même dans ce cas sans beaucoup de code supplémentaire, compte tenu de la quantité flexible de profondeur à ses listes). Et si vous avez mis cette boucle de régime dans le code derrière ou dans la page ASPX elle-même, il n'y a vraiment aucune différence que si vous ne soumonnez pas la sortie de votre page.


Parce que le code comme celui-ci est essentiellement systématique. S'il a besoin de listes imbriquées, vous pouvez rendu listeViews à l'intérieur d'une liste de réception. Lorsque la liste de réalisation de ListView en dehors d'être plus facile à étendre offre également à la possibilité de disposer du support d'événement inclus et bien sûr, la vérification de la liste déroulante est une énorme plus.


J'ai déjà implémenté ce scénario exact avec une liste de répertorie qui rend une liste de répertorie et je lie la liste des parents une liste des listes et c'est fait.


Je n'ai rien contre ListViews. Mais dans ce cas particulier, en regardant la structure de ses données (aucune relation parent / enfant autre que la commande dans l'ensemble de données), je dessine un vide sur la manière dont vous pouvez simplement lier ce jeu de données exact à un niveau 4 imbriqué Ensemble profond de liste de liste et obtenez ce que vous voulez. C'est pourquoi j'ai écrit cela en code. Si vous pouviez poster le code que vous utiliseriez dans votre réponse, cela vous aiderait à voir ce qui me manque (car l'exemple que vous liez n'est pas identique à cette situation).


@ Patmortech, avec le code que vous avez fourni à la mise en œuvre de l'ONUNEREDEDList. Vous serez capable de suggérer des améliorations au code afin de générer les éléments «LI» avec différentes classes CSSClasses qui leur sont attribuées.Veuillez consulter le lien suivant Stackoverflow.com/Questtions/2361561/... , où j'ai posté une autre question concernant la déposératrice générée.


@ Kranthi: Etant donné que votre code d'échantillon n'a pas de cours sur les balises LI, il est difficile de dire exactement ce que vous devez faire. Comment les classes sont-elles déterminées (signification, sont-elles toutes de la même classe, ou différentes basées sur la profondeur ou quelque chose)?


Merci @ Patmortech, j'ai besoin d'attribuer les classes basées sur la profondeur mais pas exactement comme votre mise à jour.Mayez-vous que vous donniez un exemple.Veuillez voir la mise à jour dans ma question originale.avec le code dans ma question originale, je suis capable de Obtenez le résultat souhaité (voir mis à jour une désordredlist) .Mais la mise à jour que j'ai faite semble plutôt mauvaise.



0
votes
     void PopulateChild(int ParentId, StringBuilder output)
                {
                    var childs = GetChildren(ParentId); //get all the chilren with respect to that parent
                    if (childs.Count > 0)
                    {
//if children are there append another list to the parent node
                        output.Append("<ul>");
                        childs.ForEach(x =>
                        {
                            if (GetChildren(x.Id).Count > 0)
                            {
                                output.AppendFormat("<li><a href=\"#\">{0}</a>", x.Email);
                                output.Append("<ul>");
                                PopulateChild(x.Id, output);
                                output.Append("</li>");
                                output.Append("</ul>");

                            }
                            else
                                output.AppendFormat("<li><a href=\"#\">{0}</a></li>", x.Email);

                        });
                    }

                    output.Append("</ul>");
                }

    //call this method with the parentid 
    private void PopulateList(int CustomerId)
                {
                    StringBuilder output = new StringBuilder();
                    var row = GetCustomerDetailById(CustomerId);
                    output.Append("<ul>");
                    output.AppendFormat("<li><a href=\"#\">{0}</a>", row.Email);

                    PopulateChild(CustomerId, output);

                    output.Append("</li></ul>");

                    Literal1.Text = output.ToString();
                }

1 commentaires

Bonjour et bienvenue à la présente. C'est beaucoup de code que vous avez écrit mais ce n'est pas trop facile à comprendre sans commentaires. Il serait très utile pour les autres utilisateurs si vous avez ajouté cette réponse avec quelques phrases sur la manière dont votre code fonctionne et comment il résout le problème de l'OP ~