2017-01-03 4 views
0

Je crée des options pour un menu déroulant dans une barre d'outils à partir d'une table de base de données, en donnant aux ID des options la même valeur que l'index dans la table, par la description de l'option. La liste déroulante visuelle sort gentiment, mais quand je demande une liste de toutes les options, elles sont triées par id, c'est-à-dire getAllListOptions() et forEachListOption(). Existe-t-il des moyens de rechercher la liste d'options dans l'ordre «correct» pour choisir la première option de la liste, autre que de trier la liste moi-même? Pour souligner le problème, les ID ne sont pas dans l'ordre croissant lorsque les options sont triées par description, mais dhtmlx les ordonne intérieurement dans l'ordre croissant par valeur plutôt que par nom comme ils le devraient. I.E, disons que l'option avec ID de 8 sort en tête de liste, la première option de la liste interne devrait être "8" et non pas la plus petite ID (dans mon cas 2). Le site Web est MVC et le back-end est MS SQL Server. Les structures de données, comme les listes d'options, sont transmises via des scripts de rasoir au format XML.Obtention des options de la liste d'outils dans le même ordre que celui affiché

I.E. l'appel ajax pour obtenir la liste d'options est passé à travers la couche bussiness à la couche DAL, qui demande une liste d'objets triés sur la description. Le script de rasoir crée alors le XML comme celui-ci

<item id="tbbOptions" type="buttonSelect" title="@(Messages.Lookup("Config"))" selected="-1" text="@Messages.Lookup("Config_Select")"> 
    @foreach (Analysis oAnalysis in Model.Analysis) 
    { 
     if (!string.IsNullOrEmpty(oAnalysis.SecondaryField)) 
     { 
      <item type="button" id="@(oAnalysis.ID)" img="blueprint.png" imgdis="blueprint.png" text="@string.Format("{0}", oAnalysis.Description)" /> 
     } 
     else 
     { 
      <item type="button" id="@(oAnalysis.ID)" img="blueprint.png" imgdis="blueprint.png" text="@string.Format("{0}", oAnalysis.Description)" /> 
     } 
    } 
</item> 

requête SQL:

public List<Analysis> GetConfig() 
    { 
     return UnitOfWork.Database.Fetch<Analysis>("SELECT * FROM [Analysis] ORDER BY [Description]"); 
    } 

Répondre

1

Après avoir écumé à travers le code source javascript pour la barre d'outils dhtmlx, j'ai construit une solution qui semble faire ce que je veux. Apparemment, il n'y a pas de fonctions qui exposent les options visuelles, donc seul moyen d'accéder est à travers les attributs sur l'objet.

Dans d'autres cas se jettent dans la même question, voici ce que je faisais:

//Get all visible options 
var asList = this.objPull[this.idPrefix + "tbb" + sChart].p_tbody.childNodes; 
//If options exist for Chart set drop-down to first option in list 
if (asList.length > 0) { 
    this.setListOptionSelected("tbb" + sChart, asList[0].idd); 
    this.setItemText("tbb" + sChart,"<strong>{0}</strong>".format(this.GetSelectedItemText("tbb" + sChart))); 
} 
0

LINQ OrderBy ou SortBy résoudra votre problème;)

utiliser sur votre modèle de vue dans la méthode d'action ou dans votre vue (non recommandé)

Model.Analysis.OrderBy(x=>x.ID) 
+0

Si je ID OrderBy, les options visibles dans la liste sont triées par ID ne la description plus longtemps . C'est vrai, cela fera de la liste des options visibles la même chose que la liste _listOptions interne de l'objet de la barre d'outils, mais cela ne respecte pas mon exigence que les options de la liste soient triées par ordre alphabétique. Je soupçonne que mon problème réside dans la façon dont la liste interne est créée, les objets sont "hachés" par leur identifiant numérique, et non l'ordre dans lequel ils ont été créés dans le modèle de vue ou de vue. – aggaton

+0

Ok, vous devez trier la liste alphabétiquement par description \ nom ou etc, non? Il suffit de commander par domaine dont vous avez besoin. Ou je n'ai pas compris votre problème? – blckt

+0

Les options sont déjà triées par ordre alphabétique à partir de la base de données, le problème est dhtmlx commandes internes par ID, par exemple si j'appelle getAllListOptions(), la première option de la liste n'est pas la première option visible dans le menu déroulant. l'ID le plus bas. Il y a un décalage entre la représentation interne et la représentation visuelle. – aggaton