Pregunta

He escrito un método de extensión fuera de DataGridView denominado HideColumns.

public static class Extensions
{
    public static void HideColumns(this DataGridView dataGridView, params string[] columnNames)
    {
        foreach (string str in columnNames)
        {
            if (dataGridView.Columns[str] != null)
            {
                dataGridView.Columns[str].Visible = false;
            }
        }
    }

}

Yo paso mi rejilla en una secuencia de comandos IronRuby como una variable llamada main_grid

Cuando mis llamadas de script     main_grid.HideColumns ( "Nombre", "Apellido") el guión explota con error en Script método no definido '' HideColumns para System.Windows.Forms.DataGridView: System :: Windows :: Forms :: DataGridView

Los métodos de extensión parecen funcionar bien desde C #. Lo que da?

¿Fue útil?

Solución

Fwiw, IronRuby 1,1 (necesita .NET 4) proporciona el método using_clr_extensions - como se señala en las notas de esto activa todos los métodos de extensión definidas en clases definidas en un espacio de nombres dado, independientemente del conjunto que se definen en; ensamblados cargados en el futuro que definen los métodos de extensión del espacio de nombres activado aparecerán automáticamente en los tipos correctos, como este:

load_assembly "System.Core"
using_clr_extensions System::Linq

# ...

products.
  where(lambda { |p| p.units_in_stock == 0 }).
  each { |x| puts x.product_name }

Las notas de la versión también apuntan en toda una serie de ejemplos a http://github.com/ironruby/ironruby/blob/master/Languages/Ruby/Samples/Linq/101samples.rb

Otros consejos

El método de extensión es sólo azúcar sintáctico, tendrá que llamar como:

Extensions.HideColumns(main_grid, "FirstName", "LastName")

crear alternativamente una nueva clase en C # que se deriva de DataGridView y añadir el método:

public class DataGridViewExt : DataGridView  
{
    public void HideColumns(params string[] columnNames)
    {
        foreach (string str in columnNames)
        {
            if (this.Columns[str] != null)
            {
                this.Columns[str].Visible = false;
            }
        }
    }        
}

y utilizar esta clase en lugar de la clase System.Windows.Forms en su formulario.

Ya que menciona en los comentarios sobre la respuesta del JDunkeryly, aquí te mostramos cómo extender la red desde el lado rubí. Sólo tiene que abrir la clase y añadir un método (sólo funciona desde el lado rubí).

class System::Windows::Forms::DataGridView
  def hide_columns(*columnNames)
    column_names.each do |cn|
      self.columns[cn].visible = false
    end
  end
end

En cuanto a la sugerencia de utilizar el método de extensión directamente, la palabra clave params es doloroso IronRuby. Es necesario construir un conjunto de tipos con sus argumentos y pasarlo. No se puede simplemente envolver sus cadenas de rubí en una matriz de rubí. He logrado esto hace unas horas en un blog publicar . Pero si usted tiene una forma más suave de manejar eso, por favor hágamelo saber.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top