2011-11-08 35 views
5

Tôi có một số List<> của số class X.Ẩn các Cột trong một DataGridView với một Danh sách <> làm DataSource?

X có 3 Cột: a, bc.

Bây giờ tôi ràng buộc Danh sách trên DataGridView:

dataGrid.DataSource = list; 

Làm thế nào để chỉ hiển thị cột a và c trong GridView, vì vậy ẩn Cột b?

Tôi sẽ không tự sửa danh sách, nếu có thể và không tạo danh sách mới, nếu có thể.

Bất kỳ giải pháp nào ở đây?

Trả lời

3

Bạn sẽ cần phải:

dataGrid.AutoGenerateColumns = false; 

Sau đó, bạn sẽ cần phải thêm một cột cho mỗi thành viên trong lớp X và DataBind những.

0

các chất liệu cơ bản mà bạn cần phải làm điều này,

tập đầu tiên sở hữu AutoGenerateColumns False

dataGrid.AutoGenerateColumns = false; 

Sau đó trong RowDataBound sự kiện bạn làm như thế này

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

Ẩn các cột sẽ nhưng có thể làm cho DataGridView trở nên khó khăn hơn để làm việc. Tôi nghĩ bạn tốt hơn là không nên thêm các cột. Để thực hiện điều này, tôi muốn tạo một giao diện cho đối tượng của mình chỉ hiển thị các trường mà tôi muốn hiển thị trong DataGridView của mình sau đó liên kết với giao diện thay vì đối tượng.

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

Tôi giả định lớp học của bạn là như thế này:

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

Trong đoạn mã trên các tên cột GridView giống như

  • cột name1 này: ("Foo/Bar")
  • cột name2: "Baz"
  • tên cột3: "CurrencyBaz"

nếu bạn không muốn hiển thị cột bạn chỉ có thể đặt như thế này ... [Có thể xem (False)]

Trong cột tên mã trên 2 không được hiển thị ......

tôi hy vọng nó sẽ giúp bạn ...

+0

soooo lớn, cảm ơn. không biết về Thuộc tính này! –

0

Hoặc ẩn cột theo tên

dgvEmployees.DataSource = data 
dgvEmployees.Columns("Id").Visible = False 
dgvEmployees.Columns("ElementEtat").Visible = False 
Các vấn đề liên quan