2012-01-19 129 views
6

Tôi có một cơ sở dữ liệu có bảng Người dùng và tôi trình bày dữ liệu trong một DataGridView. Tôi muốn loại bỏ 4 cột, nhưng mã tôi có (tham chiếu từ MSDN) dường như gắn thêm các cột ở cuối. Làm thế nào tôi có thể loại bỏ hoàn toàn các cột?Xóa Cột khỏi DataGridView

Vì vậy, đây là cách DGV trông mà không có cột loại bỏ

Without Removal Code

Bộ luật tôi sử dụng để thử và loại bỏ các cột

RadarServerEntities rse = new RadarServerEntities(); 
gvUsers.DataSource = rse.Users; 

gvUsers.Columns.Remove("ID"); 
gvUsers.Columns.Remove("InsertDate"); 
gvUsers.Columns.Remove("Connections"); 
gvUsers.Columns.Remove("MachineID"); 

Kết quả

With Removal Code

Tôi muốn ld muốn thoát khỏi 4 cột cuối cùng, vậy tại sao mã của tôi không hoạt động?

Cảm ơn nhiều :)

+1

Có cố gắng của bạn che giấu chúng để thay thế:. 'GvUsers.Columns [ "ID"] Visible = false'? – ChrisWue

+0

Tôi thấy rằng 'gvUsers.Columns.Remove (" ID ");' works .. nếu tên cột (không phải là tiêu đề/văn bản), nhưng tên cột là ID. – barlop

Trả lời

12

tôi có xu hướng để chỉ ẩn các lĩnh vực để thay thế.

gvUsers.Columns["ID"].Visibility = false; 

Et cetera.

+5

Trên thực tế nó 'gvUsers.Columns [" ID "]. Hiển thị = false;' – bnu

+2

tại sao nó sẽ được rằng 'gvUsers.Columns [" ID "]. Visibility = false;' (có lẽ) làm việc cho anh ta nhưng 'gvUsers. Columns.Remove ("ID"); 'không hoạt động với anh ta? – barlop

2

nếu bạn không muốn tạo ra các cột tự động khi bạn kết DataSource của bạn, bạn cần phải thiết lập gvUsers.AutoGenerateColumns = false;

RadarServerEntities rse = new RadarServerEntities(); 
gvUsers.AutoGenerateColumns = false; 
gvUsers.DataSource = rse.Users; 
+1

Tôi muốn nó tự động tạo các cột, nhưng loại bỏ những cột mà tôi không cần. – craig1231

5

bạn cũng có thể sử dụng gvUsers.Columns.RemoveAt(IndexOfColumn);

+0

Điều này không cung cấp câu trả lời cho câu hỏi. Để phê bình hoặc yêu cầu làm rõ từ tác giả, để lại nhận xét bên dưới bài đăng của họ - bạn luôn có thể nhận xét về bài đăng của riêng bạn và sau khi bạn có đủ [danh tiếng] (http://stackoverflow.com/help/whats-reputation), bạn sẽ có thể [nhận xét về bài đăng bất kỳ] (http://stackoverflow.com/help/privileges/comment). – War10ck

+1

Đủ công bằng. Tôi nghĩ rằng tôi đã buồn ngủ và không đọc câu hỏi tốt, xin lỗi của tôi. –

+0

@ War10ck bạn có thể giải thích lý do tại sao nó không trả lời câu hỏi? có vẻ như với tôi hơn là người hỏi hỏi làm thế nào để loại bỏ các cột và người trả lời đã cho những gì trông giống như những gì sẽ loại bỏ cột .. trong trường hợp này trả lời nó nhiều hơn câu trả lời được chấp nhận mà chỉ nói về khả năng hiển thị. Vậy làm thế nào mà nó không trả lời được câu hỏi? – barlop

0
DataGridViewColumn DataGridViewColumnSelected; 
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
{ 
        if (e.ColumnIndex !=-1 && e.RowIndex == -1) 
        { 
         DataGridViewColumnSelected = dataGridView1.Columns[e.ColumnIndex] as DataGridViewColumn; 

        } 
} 

protected override bool ProcessCmdKey(ref Message msg, Keys keyData) 
     { 
      bool bHandled = false; 
      switch (keyData) 
      { 
       case Keys.Delete: 
        if (DataGridViewColumnSelected != null) 
        { 
         this.dataGridView1.Columns.RemoveAt(DataGridViewColumnSelected.Index); 
         //dataGridView1.Columns[DataGridViewColumnSelected.Name].Visible = false; // case of just hiding the column 
        } 
        break; 
      } 
      return bHandled; 
     }