none
Administración de usuarios y roles con menu ribbon 35 - Solucionado RRS feed

  • Pregunta

  • Buena noches, escribo porque llevo dias tratando de encontrar un modo de habilitar o deshabilitar botones del control ribbon35, que es free, ya que soy estudiante, el procedimiento almacenado y la lectura de los permisos ya los tengo, los cuales lo trae de una base de datos mysql.

    Si alguien me pudiera guian con alguna idea, ejemplo o algun link para profundizar.

    Programa en mvc de 3 capas, en visual studio community 2015 C#, y con el gestor de base de datos MySql y el menu con la libreria libre Ribbon35

    Intento de esta manera:

    foreach (Control control in ribbon1)
                {

    Pero al paarecer este control no trae habilitado esta funcion.



    • Editado VISANCOR74 domingo, 3 de abril de 2016 1:41
    sábado, 2 de abril de 2016 4:56

Respuestas

  • Para localizar el botón puedes hacerlo con el bucle que te ponía.

    El problema está en cómo identificarlo ya que los botones no tienen una propiedad Name. Si el valor del tag te vale podrías utilizarlo.

    Algo así:

            private void DisableButton(Ribbon ribbon, string buttonTag)
            {
                foreach (RibbonTab tab in ribbon1.Tabs)
                {
                    foreach (RibbonPanel panel in tab.Panels)
                    {
                        foreach (RibbonItem item in panel.Items)
                        {
                            RibbonButton button = item as RibbonButton;
                            if (button != null && (string) button.Tag == buttonTag)
                            {
                                button.Enabled = false;
                            }
                        }
                    }
                }
            }
    

    De esta forma deshabilitarías todos los botones con un valor determinado en su propiedad Tag.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta VISANCOR74 domingo, 3 de abril de 2016 1:37
    sábado, 2 de abril de 2016 6:59
  • Al fin solucionado, lo que queria realizar. Para que pueda servir a otras personas comparto el código.
      private void validarPerUsuario()
            {
                using (DataSetSeguridadTableAdapters.permisosTableAdapter TaPermisos = new DataSetSeguridadTableAdapters.permisosTableAdapter())
                {
                    DataSetSeguridad.permisosDataTable DtPermisos = new DataSetSeguridad.permisosDataTable();
                    DtPermisos = TaPermisos.GetDataByIdUsuario(Convert.ToInt32(IdUsuario));
                  //  System.Windows.Forms.Ribbon ofrm = new System.Windows.Forms.Ribbon();
                    try                
                    {
                        foreach (RibbonTab tab in ribbon.Tabs)
                        {
                            foreach (RibbonPanel panel in tab.Panels)
                            {
                                foreach (RibbonItem item in panel.Items)
                                {
                                    foreach (object Elemento in panel.Items)
                                    {
                                        Type TipoElemento = Elemento.GetType();
                                        if ((TipoElemento.FullName == "System.Windows.Forms.RibbonButton"))
                                        {
                                            RibbonButton button = (RibbonButton)Elemento;
                                            foreach (DataSetSeguridad.permisosRow DRPermiso in DtPermisos.Rows)
                                            {
                                                if (Convert.ToInt32( button.Tag) == DRPermiso.IdForm)
                                                {
                                                    button.Enabled = true;
                                                    break;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
            }
    Gracias a todos lo que de una u otra manera me ayudaron, pero en especial a Asier Villanueva


    • Editado VISANCOR74 domingo, 3 de abril de 2016 18:50
    • Marcado como respuesta VISANCOR74 miércoles, 11 de mayo de 2016 5:44
    domingo, 3 de abril de 2016 1:40

Todas las respuestas

  • De qué control se trata.

    ¿Puedes poner un link a la página del control?


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    sábado, 2 de abril de 2016 5:38
  • Buena noche y gracias por responder

    http://www.codeproject.com/Articles/364272/Easily-Add-a-Ribbon-into-a-WinForms-Application-Cs

    http://www.codeproject.com/script/Articles/ArticleVersion.aspx?aid=364272&av=749525

    https://ribbon.codeplex.com

    sábado, 2 de abril de 2016 5:43
  • Vale, al mencionar que se trataba de una aplicación MVC he pensado automáticamente en ASP.NET MVC y no me cuadraba.

    Por lo que veo el control Ribbon tiene una colección de Tabs (objetos RibbonTab), cada Tab tiene una colección de paneles (objetos RibbonPanel) y son éstos los que tienen los diferentes elementos (objetos RibbonItem):

                foreach (RibbonTab tab in ribbon1.Tabs)
                {
                    foreach (RibbonPanel panel in tab.Panels)
                    {
                        foreach (RibbonItem item in panel.Items)
                        {
                            item.Enabled = false;
                        }
                    }
                }
    

    Por cierto la versión del control que me he descargado es la del proyecto Office Ribbon Project que parece ser la continuación del proyecto de tu link.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    sábado, 2 de abril de 2016 6:34
  • Gracias pero necesito deshabilitar los botones

    Ya lo estoy probando, lo otro que habia pensado para deshabilitar los botones por el numero de tag, el cual es igual al número del formulario para saber si se habilita el permiso del formulario total.


    • Editado VISANCOR74 sábado, 2 de abril de 2016 6:45
    sábado, 2 de abril de 2016 6:42
  • Para localizar el botón puedes hacerlo con el bucle que te ponía.

    El problema está en cómo identificarlo ya que los botones no tienen una propiedad Name. Si el valor del tag te vale podrías utilizarlo.

    Algo así:

            private void DisableButton(Ribbon ribbon, string buttonTag)
            {
                foreach (RibbonTab tab in ribbon1.Tabs)
                {
                    foreach (RibbonPanel panel in tab.Panels)
                    {
                        foreach (RibbonItem item in panel.Items)
                        {
                            RibbonButton button = item as RibbonButton;
                            if (button != null && (string) button.Tag == buttonTag)
                            {
                                button.Enabled = false;
                            }
                        }
                    }
                }
            }
    

    De esta forma deshabilitarías todos los botones con un valor determinado en su propiedad Tag.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    • Marcado como respuesta VISANCOR74 domingo, 3 de abril de 2016 1:37
    sábado, 2 de abril de 2016 6:59
  • Buena tarde lo he adaptado a la necesidad. pero me bota este error: "Referencia a objeto no establecida como instancia de un objeto"

    este es el codigo:

     private void validarPerUsuario()
            {
                using (DataSetSeguridadTableAdapters.permisosTableAdapter TaPermisos = new DataSetSeguridadTableAdapters.permisosTableAdapter())
                {
                    DataSetSeguridad.permisosDataTable DtPermisos = new DataSetSeguridad.permisosDataTable();
                    DtPermisos = TaPermisos.GetDataByIdUsuario(Convert.ToInt32(IdUsuario));
                  //  System.Windows.Forms.Ribbon ofrm = new System.Windows.Forms.Ribbon();
                    try
                    {
                        foreach (RibbonTab tab in ribbon.Tabs)
                        {
                            foreach (RibbonPanel panel in tab.Panels)
                            {
                                foreach (RibbonItem item in panel.Items)
                                {
                                    RibbonButton button = item as RibbonButton;
                                    foreach (DataSetSeguridad.permisosRow DRPermiso in DtPermisos.Rows)
                                    {
                                        //RibbonButton button = item as RibbonButton;
                                        //if (button != null && (int)button.Tag == DRPermiso.IdForm)
                                        if (button != null && (int)button.Tag == DRPermiso.IdForm)
                                        {
                                            button.Enabled = true;
                                       }
                                    }
                                }
                            }
                        }
                    }
                    catch (Exception)
                    {
                        throw;
                    }
                }
            }
    

    De antemano muchas gracias

    sábado, 2 de abril de 2016 16:23
  • Hola:

     Debes de ir recorriendo los elementos del contenedor principal hasta el elemento mas pequeño, te dejo un ejemplo que utilice en un proyecto.

    private IEnumerable<EControl> GetRibbonBarTabItem(string moduleName)
            {
                var x = new MenuPrincipal(false);
                if (_control == null) _control = new EControl();
                var listElemnts = new List<EControl>();
    
                foreach (BaseItem item in x.ribbonControl1.Items)
                {
                    if (string.Equals(item.Name, moduleName))
                    {
                        RibbonTabItem ribbonTab = item as RibbonTabItem;
    
                        if (ribbonTab != null)
                        {
                            RibbonPanel panel = ribbonTab.Panel;
    
                            foreach (Control panelControl in panel.Controls)
                            {
                                if (panelControl is RibbonBar)
                                {
                                    EControl rbnControl = new EControl();
    
                                    rbnControl.Name = panelControl.Name;
                                    rbnControl.Text = panelControl.Text;
    
                                    listElemnts.Add(rbnControl);
                                }
                            }
                        }
                    }
                }
                return listElemnts;
            }

     De donde la clase EControl tiene esta definición:

        public class EControl
        {
            public string Name { get; set; }
            public string Text { get; set; }
        }

     Para poder usar la funcion anterior, primero se tiene que recuperar la lista de Tabs que contiene el Ribbon, para eso utilice este codigo:

            private List<EControl> GetTabItems()
            {
                var x = new MenuPrincipal(false);
                if (_control == null) _control = new EControl();
    
                var listElemnts = new List<EControl>() { new EControl() { Name = "", Text = "<<<Seleccione>>>" } };
                listElemnts.AddRange(from BaseItem item in x.ribbonControl1.Items select new EControl { Name = item.Name, Text = item.Text });
    
                return listElemnts;
            }

    El cual carga un ComboBox con los nombres de estos Tabs, despues uso el evento SelectionChangecommited del combobobox para recuperar el nombre de tab y pedir que me cargue sus elementos contenidos en un control ListView:

     private void cmboxModulos_SelectionChangeCommitted(object sender, EventArgs e)
            {
                try
                {
                    EControl control = cmboxModulos.SelectedValue as EControl;
    
                    if (control == null) return;
    
                    var rbnBarList = GetRibbonBarTabItem(control.Name);
     Espero te sirve de guia.


    Saludos desde Monterrey, Nuevo León, México!!!

    sábado, 2 de abril de 2016 17:03
  • Gracias por contestar, el ejemplo que colocas es con el ribbon de DevExpress, que maneja ribboncontrol.

    En si lo que necesito es escoger todos los RibbonButtons que esten en el control Ribbon, para comparar cada ribbonbutton.tag con

    DRPermiso.IdForm)

    que es dondes esta el valor de cada permiso que accesa a cada formulario desde cada boton.

    • Editado VISANCOR74 sábado, 2 de abril de 2016 17:31
    sábado, 2 de abril de 2016 17:11
  • Hola.

     Si, pero ambos controles tienen la misma logica, solo es cuestión de hacer el cast al nombre del control correspondiente.


    Saludos desde Monterrey, Nuevo León, México!!!

    sábado, 2 de abril de 2016 17:17
  • Hola.

     Si, pero ambos controles tienen la misma logica, solo es cuestión de hacer el cast al nombre del control correspondiente.


    Saludos desde Monterrey, Nuevo León, México!!!


    Pero el Ribbon35, no maneja el ribboncontrol que es un contenedor principal, segun entiendo; no se si estoy equivocado...
    sábado, 2 de abril de 2016 17:26
  • Al fin solucionado, lo que queria realizar. Para que pueda servir a otras personas comparto el código.
      private void validarPerUsuario()
            {
                using (DataSetSeguridadTableAdapters.permisosTableAdapter TaPermisos = new DataSetSeguridadTableAdapters.permisosTableAdapter())
                {
                    DataSetSeguridad.permisosDataTable DtPermisos = new DataSetSeguridad.permisosDataTable();
                    DtPermisos = TaPermisos.GetDataByIdUsuario(Convert.ToInt32(IdUsuario));
                  //  System.Windows.Forms.Ribbon ofrm = new System.Windows.Forms.Ribbon();
                    try                
                    {
                        foreach (RibbonTab tab in ribbon.Tabs)
                        {
                            foreach (RibbonPanel panel in tab.Panels)
                            {
                                foreach (RibbonItem item in panel.Items)
                                {
                                    foreach (object Elemento in panel.Items)
                                    {
                                        Type TipoElemento = Elemento.GetType();
                                        if ((TipoElemento.FullName == "System.Windows.Forms.RibbonButton"))
                                        {
                                            RibbonButton button = (RibbonButton)Elemento;
                                            foreach (DataSetSeguridad.permisosRow DRPermiso in DtPermisos.Rows)
                                            {
                                                if (Convert.ToInt32( button.Tag) == DRPermiso.IdForm)
                                                {
                                                    button.Enabled = true;
                                                    break;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                }
            }
    Gracias a todos lo que de una u otra manera me ayudaron, pero en especial a Asier Villanueva


    • Editado VISANCOR74 domingo, 3 de abril de 2016 18:50
    • Marcado como respuesta VISANCOR74 miércoles, 11 de mayo de 2016 5:44
    domingo, 3 de abril de 2016 1:40