2012-01-08 78 views
6

Làm cách nào tôi có thể xóa tất cả các hàng datagridview ngoại trừ các tiêu đề cột?Làm cách nào để xóa tất cả các hàng DataGridView khi tải biểu mẫu?

tôi đã cố gắng:

dataGridView1.Rows.clear(); 

nhưng nó không hoạt động.

tôi đã cố gắng để lặp qua các hàng và sử dụng phương pháp RemoveAt, nhưng nó không loại bỏ tất cả các hàng:

private void Form5_Load(object sender, EventArgs e) 
{  
    dataGridView1.AutoGenerateColumns = true; 
    SqlConnection con = new SqlConnection(@"Data Source=.\myserver;Initial Catalog=test;Integrated Security=True"); 
    adapter = new SqlDataAdapter("SELECT id as [#], description as [Description], unit as [Unit], amount as [Amount], unitPrice as [Unit Price], total as [Total] FROM tbl_poMaterials", con); 
    adapter.SelectCommand.CommandType = CommandType.Text; 
    DataTable tb = new DataTable(); 
    adapter.Fill(tb); 
    SqlCommandBuilder builder = new SqlCommandBuilder(adapter); 
    dataGridView1.DataSource = tb; 

    dataGridView1.Columns[0].Width = 30; 
    dataGridView1.Columns[0].ReadOnly = true; 
    dataGridView1.Columns[1].Width = 660; 

    for (int i = 0; i < tb.Rows.Count; i++) 
    { 
     tb.Rows.RemoveAt(i); 
    } 
} 
+0

Xác định "nhưng nó không hoạt động", điều gì sẽ xảy ra? –

+0

Có thể trùng lặp của [DataGridView.Clear()] (http://stackoverflow.com/questions/3744882/datagridview-clear) –

Trả lời

3

Nếu lưới của bạn được ràng buộc với một DataTable hoặc một số DataSource khác thì bạn cần phải xóa nó , không phải là lưới, nếu không phương thức Rows.clear() là cách tốt nhất và tốt nhất để thực hiện nó.

+0

cho (int i = 0; i user891757

+0

Bạn có datagridview của bạn ràng buộc với một datatable, vì vậy rõ ràng các datatable: tb.clear() – aleroot

7

Bạn cần xóa DataSource hoặc DataTable chứ không phải chế độ xem dữ liệu.

dataGridView.DataSource = null; 
dataGridView.Refresh(); 

hoặc

dataTable.Clear(); 
dataGridView.Refresh(); 
+0

giải pháp thứ hai là làm việc cho tôi, nhờ dude .. :-) – Praditha

13

này đã làm việc cho tôi:

do 
{ 
    foreach (DataGridViewRow row in dataGridViewError.Rows) 
    { 
     try 
     { 
     dataGridViewError.Rows.Remove(row); 
     } 
     catch (Exception) { } 
    } 
} while (dataGridViewError.Rows.Count > 1); 
+0

Lạ, tại sao cho và cho mỗi vòng không làm việc và cái này hoạt động? Nhưng điều tốt là nó hoạt động! –

+0

Cảm ơn bạn sau một năm và vài tháng sau đó.Tôi đã thử sử dụng một 'foreach' trên bộ sưu tập hàng trên DGV của tôi nhưng tôi đã nhận được một ngoại lệ khi nó muốn cố gắng xóa một hàng" trống ". Nếu tôi thêm một kiểm tra cho null, nó chỉ xóa tất cả các hàng khác? Điều này làm việc, mặc dù. – sab669

3

Đối với cùng một vấn đề tôi đã cố gắng nhiều cách nhưng không thể thành công. Như đã nói trong một trong các câu trả lời:

for(int i = 0; i < myDataGridView.Rows.Count; i++) 
{ 
    myDataGridView.Rows.RemoveAt(i) 
} 

thực sự sẽ xóa hàng nhưng hàng tiếp theo được chuyển sang hàng trước! Vì vậy, cách tiếp cận trên xóa một nửa số hàng! Do đó, bạn cần phải lặp lại hành động cho đến khi nó trở thành số không!

Cách khác, đã thử xóa từ hàng cuối cùng đến hàng đầu tiên. Nó hoạt động!

for(int i = myDataGridView.Rows.Count - 1; i >= 0; i--) 
{ 
    myDataGridView.Rows.RemoveAt(i); 
} 
4

tôi sử dụng

dataGridViewResult.Rows.Clear(); 

để xóa tất cả các hàng không có cột xóa.

0
int rowCount = dtg.Rows.Count; 
     for (int i = rowCount - 1; i >= 0; i--) 
     { 
      DataGridViewRow dr = dtg.Rows[i]; 
      dtg.Rows.Remove(dr); 
     } 
+0

Vui lòng chỉnh sửa câu trả lời của bạn và giải thích cách giải quyết vấn đề này. – Ben

1

// này nên làm việc

int rowCount = dataGridView1.Rows.Count; 

for (int i = 0; i < rowCount; i++) 
{ 
    dataGridView1.Rows.RemoveAt(0); 
} 

giải pháp của bạn didnt làm việc bởi vì, mọi khi để kiểm tra vòng lặp cho tình trạng i < rowCount, các rowCount sẽ đã giảm một là kết quả của dataGridView1.Rows.RemoveAt(i). Vì vậy, chỉ một nửa số hàng sẽ bị xóa.

+0

Vui lòng sử dụng 4 dấu cách phía trước mỗi dòng mã để lấy khối mã. "Giải pháp của bạn" cũng không rõ ràng. –

1

while(dataGridView1.Rows.Count >1) { dataGridView1.Rows.RemoveAt(0); }

+0

Phải trong khi (dataGridView1.Rows.Count> 0) – Missy

Các vấn đề liên quan