【问题标题】:Getting toolbar list options in same order as they are displayed以与显示顺序相同的顺序获取工具栏列表选项
【发布时间】:2017-01-04 05:33:44
【问题描述】:

我正在从数据库表中为工具栏上的下拉菜单构建选项,为选项提供与表中索引相同的值,但按选项描述的字母顺序排列。视觉下拉列表很好地排序,但是当我询问所有选项的列表时,它们按 id 排序,即 getAllListOptions() 和 forEachListOption()。除了我自己再次对列表进行排序之外,还有其他方法可以按“正确”顺序查找选项列表以选择列表中的第一个选项吗?

To emphasize, the problem is ID's are not in ascending order when options are sorted by description, however dhtmlx order them internally in ascending order by value instead of by name as they should.即,假设 ID 为 8 的选项位于列表顶部,内部列表中的第一个选项应该是“8”,而不是最小的 ID(在我的情况下为 2)。

网站是 MVC,后端是 MS SQL Server,数据结构,如选项列表,通过 razor 脚本作为 XML 传回。

I.E.获取选项列表的 ajax 调用通过业务层传递到 DAL,DAL 请求按描述排序的对象列表。 razor 脚本然后像这样创建 XML

<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>

SQL 查询:

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

【问题讨论】:

    标签: javascript dhtmlx


    【解决方案1】:

    在浏览了 dhtmlx 工具栏的 javascript 源代码之后,我构建了一个似乎可以满足我要求的解决方案。显然没有公开可视选项的函数,因此访问的唯一方法是通过对象上的属性。

    如果其他人遇到同样的问题,这就是我所做的:

    //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)));
    }
    

    【讨论】:

      【解决方案2】:

      让数据库对列表进行排序,例如find().sort() 为 mongoDB:

      https://docs.mongodb.com/getting-started/shell/query/#sort-query-results

      您使用的是哪个数据库?

      【讨论】:

      • 向问题添加了更多信息
      【解决方案3】:

      LINQ OrderBy 或 SortBy 将解决您的问题;)

      在您的视图模型中使用它在操作方法或视图中(不推荐)

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

      【讨论】:

      • 如果我按 ID 排序,列表中的可见选项不再按 ID 排序,而不是描述。确实,这将使可见选项列表与工具栏对象上的内部 _listOptions 列表相同,但是它违反了我对列表选项按字母顺序排序的要求。我怀疑我的问题在于创建内部列表的方式,对象通过它们的数字 id 被“散列”,而不是它们在视图或视图模型中的创建顺序。
      • 好的,您需要按描述\名称等按字母顺序对列表进行排序,对吗?只需按您需要的字段订购。还是我不明白你的问题?
      • 选项已经从数据库中按字母顺序排序,问题是 dhtmlx 内部按 ID 排序选项,即如果我调用 getAllListOptions(),列表中的第一个选项不是下拉列表中的第一个可见选项-down,但是 ID 最低的那个。内部表示和视觉表示不匹配。
      • 您可以将您的查询添加到帖子中吗?
      • 在底部添加查询
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多