通过名称查找Devexpress aspxribbon控件

本文关键字:Devexpress aspxribbon 控件 查找 | 更新日期: 2023-09-27 18:16:53

我有一个非常简单的devexpress aspxribbon控件,按日期过滤数据,这是通过数据绑定构建的。我试图在服务器端创建一个函数,这将采取我的丝带对象,并通过它的孩子,并找到给定名称的控件。我必须使用这个的原因是因为你不能设置ID或ClientInstanceName属性,我通常会使用,通过数据绑定(这里是允许的属性列表)。

我在写这个函数的尝试基本上只是一厢情愿的想法,从系统控制到Devexpress RibbonEditItem的隐式转换(所以我可以访问Name属性)将工作,它显然没有。任何帮助将不胜感激!

这是我的XML,作为ribbon的数据源:

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

通过名称查找Devexpress aspxribbon控件

RibbonEditItemBase类不是继承自Control类,因此不能转换为Control类。要按名称查找特定项目,您可以使用Ribbon -> Tab -> Group -> 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
}