2012-05-23 23 views
6

Digamos que tengo una propiedad que deseo que se muestre en un DataGridView, pero no cuando se muestra el mismo objeto en un PropertyGrid. Sé que puedo usar [Browsable(false)], pero eso lo oculta en ambas vistas. También puedo hacer un gridView.Columns["blah"].Visible = false;, pero esto es lo contrario de lo que quiero, ya que se esconde en DataGridView pero no en PropertyGrid. ¿Hay alguna forma de hacer el reverso? (En lugar de crear una DataTable completamente nueva para contener los mismos datos menos un campo, y volver a enlazar todo a eso en su lugar, esa es realmente una forma sencilla de hacer las cosas). Alternativamente, podría vivir con una solución que agrega una columna al DataGridView eso no está presente en la clase real.¿Hace una propiedad visible en DataGridView pero NO en PropertyGrid?

+1

Voy a aceptar ellos cuando en realidad responder a mis preguntas. La mitad de mis preguntas apenas tienen puntos de vista, y mucho menos buenas respuestas. –

+1

Llamo a esto un error. 'Browsable' especifica que determina la visibilidad de un miembro en una ventana de propiedades. Esto no tiene nada que ver con un DGV. Podría abrir un problema de conexión, pero las probabilidades de que lo solucionen son exactamente cero. Una solución sin duda rompería el código existente. Creo que no tienes suerte aquí. – Tergiver

+0

Maldita sea. Por supuesto, podrían agregar un nuevo decorador en lugar de intentar y corregir el navegador, pero todavía apesta que no hay forma de hacerlo. Uno pensaría que no sería una petición tan poco común ... –

Respuesta

6

es posible solucionar este problema utilizando la propiedad BrowsableAttributes de un PropertyGrid. En primer lugar, crear un nuevo atributo de la siguiente manera:

public class PropertyGridBrowsableAttribute : Attribute 
{ 
    private bool browsable; 
    public PropertyGridBrowsableAttribute(bool browsable){ 
     this.browsable = browsable; 
    } 
} 

A continuación, agregue este atributo para todas aquellas propiedades que desea que se muestra en su PropertyGrid:

[DisplayName("First Name"), Category("Names"), PropertyGridBrowsable(true)] 
public string FirstName { 
    get { return ... } 
    set { ... } 
} 

A continuación, establezca la propiedad BrowsableAttributes como esto:

myPropertyGrid.BrowsableAttributes = new AttributeCollection(
    new Attribute[] { new PropertyGridBrowsableAttribute(true) }); 

Esto solo mostrará las propiedades atribuidas en la cuadrícula de su propiedad y DataGridView todavía puede acceder a todas las propiedades con solo un poco más de esfuerzo de codificación.

Todavía me iría con Tergiver y llamar a este comportamiento un error, ya que la documentación del atributo de navegación indica claramente su uso para ventanas de propiedades solamente.

(crédito va a usuario "Maro" en http://www.mycsharp.de/wbb2/thread.php?postid=234565)

+0

Bueno, pasaron 3 meses desde la última vez que toqué este proyecto, y algunas partes relacionadas con esto fueron completamente refactorizadas, así que no puedo probar esto nunca más, pero voy a seguir adelante y acepto esta respuesta de todos modos, porque es el único que tengo, y es _looks_ válido ... –

+0

Me encontré con esto hace unos días, teniendo el mismo problema. Definitivamente funciona como un encanto! Pero es muy interesante ver que esto parece haber sido tocado solo muy pocas veces y que SOLO UNA persona ha encontrado una solución ... Bueno, ahora también está disponible en inglés. – Sebastian

Cuestiones relacionadas