2011-11-08 48 views
5

Tengo List<> de class X.¿Ocultar columnas en un DataGridView con una lista <> como DataSource?

X tiene 3 columnas: a, b y c.

Ahora se unen la lista de la DataGridView:

dataGrid.DataSource = list; 

Cómo mostrar solamente la columna A y c en el GridView, así ocultar la columna b?

No editaré la lista, si es posible, y no generaré una nueva lista, si es posible.

¿Alguna solución aquí?

Respuesta

3

Tendrá que:

dataGrid.AutoGenerateColumns = false; 

, entonces tendrá que añadir una columna para cada uno de los miembros de la clase X y los databind.

0

las materias básicas que necesita para hacer esto,

primer conjunto AutoGenerateColumns propiedad en False

dataGrid.AutoGenerateColumns = false; 

Después de que en RowDataBound Evento te gusta esta

protected void dataGrid_RowDataBound(object sender, GridViewRowEventArgs e) 
     { 
      if (e.Row.RowType == DataControlRowType.DataRow || e.Row.RowType==DataControlRowType.Header) 
      { 

       e.Row.Cells[index of the cell to hide].Visible =false; 

      } 
     } 
6

Ocultación de las columnas trabajo pero puede hacer que DataGridView sea más difícil de trabajar. Creo que es mejor que no agregue las columnas. Para lograr esto, me gusta crear una interfaz para mi objeto que solo expone los campos que quiero que sean visibles en mi DataGridView y luego se unen a la interfaz en lugar de al objeto.

public interface IMyBindingObject 
{ 
    string A { get; set; } 
    string C { get; set; } 
} 


public class MyObject : IMyBindingObject 
{ 
    public MyObject(string a, string b, string c) 
    { 
     A = a; 
     B = b; 
     C = c; 
    } 
    public string A { get; set; } 
    public string B { get; set; } 
    public string C { get; set; } 
} 


private void Form1_Load(object sender, EventArgs e) 
{ 
    List<IMyBindingObject> obj = new List<IMyBindingObject>(); 
    obj.Add(new MyObject("Test A", "Test B", "Test C")); 
    obj.Add(new MyObject("T A", "T B", "T C")); 

    dataGridView1.AutoGenerateColumns = true; 
    dataGridView1.DataSource = obj; 
} 
8

Estoy asumiendo que su clase es la siguiente:

private class MyClass { 
    [DisplayName("Foo/Bar")] 
    public string FooBar { get; private set; } 
    [Browsable(False)] 
    public decimal Baz { get; private set; } 
    [DisplayName("Baz")] 
    public CurrencyBaz 
    { 
     get { return string.Format(Baz, "C2"); } 
    } 
} 

En el código anterior los nombres de columna de GridView son así

  • columna nombre1: nombre2 ("Foo/Bar")
  • columna: "Baz"
  • nombre de columna3: "CurrencyBaz"

si usted no quiere mostrar la columna sólo se puede colocar como esto ... no se visualiza [navegable (Falso)]

En el código anterior nombre de la columna 2 ......

espero que le ayuda ...

+0

taaaan bien, gracias. no sabia sobre este Atributo! –

0

u ocultar las columnas por nombre

dgvEmployees.DataSource = data 
dgvEmployees.Columns("Id").Visible = False 
dgvEmployees.Columns("ElementEtat").Visible = False 
Cuestiones relacionadas