2011-11-08 17 views
5

Mam List<> z class X.Ukrywanie kolumn w DataGridView z listą <> jako DataSource?

X ma 3 kolumny: a, b i c.

Teraz wiążę listy po DataGridView:

dataGrid.DataSource = list; 

Jak tylko pokazać kolumny i c w GridView, więc ukryć kolumnę b?

Nie będę edytować samej listy, jeśli to możliwe, i nie generuję nowej listy, jeśli to możliwe.

Jakieś rozwiązanie tutaj?

Odpowiedz

3

Trzeba będzie:

dataGrid.AutoGenerateColumns = false; 

Potem trzeba będzie dodać kolumnę dla każdego z członków klasy X i DataBind tych.

0

podstawowe smary trzeba to zrobić,

pierwszy zestaw właściwości AutoGenerateColumns do fałszywych

dataGrid.AutoGenerateColumns = false; 

Potem w RowDataBound Wydarzenie to zrobić jak ten

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

Ukrywanie kolumn będzie działa, ale może utrudniać pracę DataGridView. Myślę, że lepiej jest nie dodawać kolumn w ogóle. Aby to osiągnąć, lubię tworzyć interfejs dla mojego obiektu, który eksponuje tylko pola, które chcę widzieć w moim DataGridView, a następnie wiąże się z interfejsem zamiast z obiektem.

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

jestem zakładając swoją klasę jest tak:

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"); } 
    } 
} 

w powyższym kodzie GridView nazwy kolumn są tacy

  • kolumnowej name1: ("Foo/Bar")
  • kolumnowej NAME2: "Baz"
  • nazwa kolumny3: "CurrencyBaz"

jeśli nie chcesz, aby pokazać kolumnę można właśnie takie miejsce ... [Browsable (fałsz)]

w powyższym kodzie nazwę kolumny 2 nie jest wyświetlany ......

mam nadzieję, że to pomaga ...

+0

taaaak wielki, dzięki. nie wiedziałem o tym Atrybucie! –

0

lub ukryć kolumny wg nazwy

dgvEmployees.DataSource = data 
dgvEmployees.Columns("Id").Visible = False 
dgvEmployees.Columns("ElementEtat").Visible = False 
Powiązane problemy