【问题标题】:Finding a Devexpress aspxribbon control by name按名称查找 Devexpress aspxribbon 控件
【发布时间】:2014-08-06 19:46:45
【问题描述】:

我有一个非常简单的 devexpress aspxribbon,它带有通过数据绑定构建的按日期过滤数据的控件。我正在尝试在服务器端创建一个函数,该函数将获取我的功能区对象并遍历其子对象并找到具有给定名称的控件。我必须使用它的原因是因为您无法通过数据绑定 (here's the list of allowed properties) 为 aspxribbon 设置我通常使用的 ID 或 ClientInstanceName 属性。

我编写此函数的尝试基本上只是一厢情愿地认为从系统控件到 Devexpress RibbonEditItem 的隐式转换(因此我可以访问 Name 属性)会起作用,但显然没有。任何帮助将不胜感激!

这是我用作功能区数据源的 XML:

<?xml version="1.0" encoding="utf-8" ?>
<TestInterface>
  <Panel Name="FilterTab" Text="Filter">
    <Group Name="DateSelectors" Text="Date Filter">
      <Item Name="DateFrom" ClientInstanceName="DateFrom" ItemType="DateEdit"></Item>
      <Item Name="DateTo" ItemType="DateEdit"></Item>
      <Item Name="FilterSubmit" Text="Filter"></Item>
    </Group>
    <Group Name="PredefinedDateFilters" Text="Pre-Defined Filters">
      <Item Name="FilterYesterday" Text="Yesterday"></Item>
      <Item Name="Filter7" Text="7 Days"></Item>
      <Item Name="Filter30" Text="30 Days"></Item>
    </Group>
  </Panel>
</TestInterface>

这是我尝试构建的功能:

protected RibbonEditItemBase getbyName(string name, Control parent)
{
    ControlCollection childControls = parent.Controls;
    foreach(RibbonEditItemBase ctrl in childControls)
    {
        //found, return control
        if (ctrl.Name == name)
            return ctrl;

        //recur for child controls
        if (parent.Controls[ctrl.Index].Controls != null)
        {
            RibbonEditItemBase recur = getbyName(name, parent.Controls[ctrl.Index]);
            //found, return control
            if (recur != null)
                return recur;
        }
    }

    return null; //not found, return null
}

【问题讨论】:

    标签: c# asp.net devexpress


    【解决方案1】:

    RibbonEditItemBase 类不是从Control 类继承的,所以不能转换为Control。要按名称查找特定项目,您可以使用 Ribbon-&gt;Tab-&gt;Group-&gt;Item 层次结构。
    这是一个例子:

    protected RibbonEditItemBase getbyName(string name, ASPxRibbon ribbon)
    {
        foreach (RibbonTab tab in ribbon.Tabs)
            foreach (RibbonGroup group in tab.Groups)
                foreach (RibbonItemBase item in group.Items)
                {
                    var edit = item as RibbonEditItemBase;
    
                    if (edit != null && edit.Name == name)
                        return edit;
                }
    
    
        return null; //not found, return null
    }
    

    【讨论】:

    • 谢谢!由于某种原因,返回类型 RibbonEditItemBase 总是返回 null,所以我去掉了编辑部分并将返回类型更改为 RibbonItemBase,因为它具有几乎相同的属性并且工作正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 2011-05-27
    • 1970-01-01
    相关资源
    最近更新 更多