2011-09-22 19 views
2
int i = dataGridView1.CurrentRow.Index; 
dataGridView1.Rows.RemoveAt(i); 

用於刪除當前選擇的行上面的代碼(僅允許選擇1行),但我仍然可以看到行保持在datagridview的。我錯過了更新還是無效?DataGridView.Rows.RemoveAt(int index)不會刪除Windows窗體中的行嗎?

PS:dataGridView1是數據綁定。

PS2:我使用LINQ查詢綁定的數據,我不想再爲只顯示一行被刪除查詢,我認爲這會降低性能。

+0

謝謝,但那個鏈接並沒有解決我的問題。 – JatSing

+0

我解決它從閱讀此:http://stackoverflow.com/questions/207901/datagridview-question 感謝您的所有建議。 – JatSing

回答

2

我認爲解決的辦法取決於你如何綁定數據。如果綁定BindingList,則RemoveAt()方法將刪除處理所有內容,並且不必刷新DataGridView。

下面試試,看看...

dataGridView1.Refresh(); 

或重新綁定數據,看看..

dataGridView1.DataSource = myDataSource; 
dataGridView1.Refresh(); 
+0

我試過dgv.Refresh();和 dgv.Parent.Refresh();但它沒有幫助 – JatSing

+0

@孫:你可以展示你如何綁定數據? – CharithJ

+0

dataGridView1.DataSource = myDataSource;並看到... – CharithJ

2

從數據源中刪除的項目,然後再次綁定。

由於數據來自LINQ,結合之前,你可以這樣做:

var result = fooLinq.ToList(); 
dataGridView1.DataSource = result; 


//to remove and bind again 
var result = dataGridView1.DataSource as List<FooType>; 
result.RemoveAt(fooIndex); 
dataGridView1.DataSource = result; 
+0

我使用linq查詢來綁定數據,我不想再次查詢只顯示行被刪除,我認爲它會減慢性能。 – JatSing

+0

你不需要再次查詢,我做了更多詳細信息 – unruledboy

+0

什麼類型是FooType? – JatSing

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刪除的項目後,提交更改。

+0

是的,我知道該項目不會從數據庫中刪除,當我使用這種方法 – JatSing

相關問題