he manejado esto unas cuantas maneras diferentes, es de esperar que esto sea útil.
La primera opción, como mencionó Justin, es establecer AutoGennerateColumns = false, y hacerlo manualmente desde allí. Si lo vincula, el tiempo de ejecución creará columnas para todas las propiedades públicas de Sample. Si desea eliminarlos, se puede hacer eso con
DataGridView.Columns["SomePropertyOfSample"].Remove();
Esta solución es un poco problemático, como sea necesario para mantenerlo actualizado, y eliminar explícitamente artículos.
Justin's Edit 2 La opción 2 de establecer el atributo Browsable en false en la propiedad es interesante, no lo he intentado antes.
La solución que he terminado usando, y que creo que funciona bastante bien, gira en torno a una interfaz.
Tenía dos DataGridViews diferentes que necesitaban mostrar los mismos datos, pero que mostraban y ocultaban diferentes columnas cada vez. En este caso puede hacer:
public interface ISimpleSample
{
string Name {get;}
int ID {get;}
}
public interface IAdvancedSample
{
string Name {get; set;}
int ID {get; set;}
string Make {get; set;}
string Model {get; set;}
}
public class Sample : ISimpleSample, IAdvancedSample
{
//Implementation skipped
}
A continuación, crear su colección de muestras mediante
BindingList<ISimpleSample> = new BindingList<ISimpleSample>();
y se unen a eso.
Si desea agregar columnas más tarde, simplemente agréguelas a la interfaz adecuada.
Esto funcionó bien para mi proyecto, déjame saber lo que piensas.
Gracias. La propiedad DataMember falta en la clase CompactGrid DataGrid. ¿Hay alguna manera de hacerlo en el nivel BindingList? Lo que estoy buscando es una forma de marcar una propiedad de muestra no enlazable ... – sarsnake