2009-10-13 26 views
5

在我的代碼,我需要一個反覆出現的時間間隔後,除去從DataGridView的行後,等我調用下面的函數,當計時器到期:C# - 我怎麼刷新DataGridView中刪除行

private void removeRows(DataGridView dgv) { 

    foreach (DataGridViewRow row in dgv.Rows) 
    { 
     // if some condition holds 
     dgv.Remove(row);     
    } 
    dgv.Refresh(); 

} 

我知道行成功從DataGridView中刪除,儘管它們仍然保留在顯示中,無論出於何種原因。有關我可能做錯什麼的提示?

回答

2

如果您已將數據網格綁定到Observable集合(如果沒有,那麼您應該),那麼您將需要實現INotifyCollectionChanged接口,以便通知監聽器動態更改,例如何時添加和刪除項目或整個列表刷新。

HTH

+0

對不起,不熟悉(c#newbie)。你能擴展一下嗎?謝謝。 – sa125 2009-10-13 14:48:09

+0

嗨,如果你編輯你的文章並添加一些關於你如何填充你的數據源的信息,那麼可能是我可以幫你一些指針。乾杯。 – 2009-10-14 05:05:48

3

您是否需要重新綁定數據網格?

dgrv.Datasource = [whatever data source]; 
dgrv.DataBind(); 

+1

DataGridView是一個winforms控件,因此不需要數據綁定。如果是ASP .NET,則在他的示例中,刪除行不會影響數據源。因此,這樣做會使gridview在刪除它們之前顯示相同的數據。 – 2009-10-13 14:32:00

1

如果它是一個數據綁定的網格,您應該使用綁定源本身而不是網格。

1

有時刷新數據的GridView是不夠的,它包含的母公司也應該被刷新。

試試這個:

dgv.Refresh(); // Make sure this comes first 
dgv.Parent.Refresh(); // Make sure this comes second 

你也可以編輯您的源和附加新的數據源控件。

0

嘗試從您的綁定源中刪除實際項目。

2

如果我理解正確,您想刪除用戶從DGV中選擇的行。

  1. 使用DGV的DataGridViewRowCollection而不是DataTable的DataRowCollection。 DataGridViewRow具有Selected屬性,用於指示是否選擇了一行或以其他方式。

  2. 確定要刪除一行後,可以使用DataGridViewRowCollection的Remove方法從網格中刪除該項目,例如, YerDataGridView.Rows.Remove(row)

  3. 請注意,此時雖然該項目已從DGV中刪除,但仍未從Access數據庫中刪除。您需要調用DataSet/DataTable上的TableAdapter Update方法來提交對數據庫的刪除操作,例如, YerTableAdapter.Update(YerDataSet)

我通常會叫更新一次只在除去所有從DGV刪除的項目後,提交更改。

1
 dataGridView.DataSource = null; 
     dataGridView.Update(); 
     dataGridView.Refresh(); 
     dataGridView.DataSource = SomeDataSource; 

希望能得到這些結果。