Search code examples
c#winformsdevexpressgridcontrolribbon-form

How to list all the barButton Items in a mdichild form from mdiparent RibbonForm?


I'm trying to list inside a gridcontrol in a form mdichild loaded in a xtraTabbedMdiManager1 all the barButtonItems from the ribbonpages in the mdiparent RibbonForm.

DataTable dt = new DataTable();
dt.Clear();
dt.Columns.Add("ID");
dt.Columns.Add("PAGE");
dt.Columns.Add("GROUP");
dt.Columns.Add("BARBUTTON");
DataRow dr;
RibbonControl parentRibbon = ((RibbonForm)this.MdiParent).Ribbon;
RibbonPageGroup group = parentRibbon.Pages.GetPageByName("ribbonPage1").Groups.GetGroupByText("ribbonPageGroup4");            
foreach (DevExpress.XtraBars.BarButtonItem item in parentRibbon.Controls)
{
dr = dt.NewRow();
dr["BARBUTTON"] = item.Name;
dt.Rows.Add(dr);
}
gridControl1.DataSource = dt;

But It doesn't run it. It shows me this error System.NullReferenceException. Please help me. Thanks in advance. enter image description here


Solution

  • try this :

    ItemLinks will give you all BarButtonItem access. you can read this article for more information : https://documentation.devexpress.com/WindowsForms/DevExpress.XtraBars.BarButtonItemLink.class

    Please remember that, Form1 is parent form and ribbonControl1 is parent form ribbon control.

        DataTable dt = new DataTable();
        dt.Clear();
        dt.Columns.Add("ID");
        dt.Columns.Add("PAGE");
        dt.Columns.Add("GROUP");
        dt.Columns.Add("BARBUTTON");
        DataRow dr;
        XtraForm frm = (XtraForm)Application.OpenForms["Form1"];
        RibbonControl parentRibbon = (RibbonControl)frm.Controls["ribbonControl1"];
        List<BarItemLink> var = parentRibbon.Pages.GetPageByName("ribbonPage1").Groups.GetGroupByText("ribbonPageGroup1").ItemLinks.ToList();
        foreach (DevExpress.XtraBars.BarItemLink bar in var)
        {
            dr = dt.NewRow();
            dr["BARBUTTON"] = bar.Caption; // bar.Item.Name; // bar.DisplayCaption;
            dt.Rows.Add(dr);
        }