2012-06-22 50 views
0

你能幫助這樣的問題: 我有兩種形式,datagridview和SQL數據庫。 我的第一個表單的加載事件我使用存儲過程(選擇查詢)從我的SQL數據庫中選擇一些數據。單個datagridview行更新

SqlConnection con = new SqlConnection(constr); 
SqlCommand cmd = new SqlCommand("PROC001", con); 
cmd.CommandType = CommandType.StoredProcedure; 
SqlDataAdapter da = new SqlDataAdapter(cmd); 
DataTable dt = new DataTable(); 
da.Fill(dt); 
datagridview.DataSource = dt; 

之後,我可以過濾或通過使用dt.DefaultView.Filter = ....和顯示在我的網格僅過濾行進行排序我的datagridview。 在我的第二個Form2出現的CellMouseDoubleClick事件上。在這種形式下,我通過點擊Button1更新數據庫中的某些值,之後我想更新我選擇的datagridview行。我的隊列是:

1)如何更新datagridview中的所選行,並且不要執行所有datagridview再次填充的存儲過程。

2)我的datagridview已經過濾,所以如果我再次執行過程,我的過濾器已被消除。我該如何避免這種情況?

3)在Form2上,我正在更新一些數據庫值,這不包括在我的「選擇查詢」中作爲選定字段,但是此值在此查詢中受到影響。例如:

SELECT Name, SecondName FROM tUsers 
    WHERE id = (SELECT DISTINCT id FROM tProcedures WHERE Code = 'First') 

在我的DataGridView我可以看到姓名和SecondName,但在窗體2我在tProcedures更新數據庫表中的代碼。所以更新後,我想在datagridview中看到我的新數據,只在選定的行和當前的過濾器中。我不想再次將所有數據選擇到datagridview並打破了我的過濾器。

是否可以更新單行?你能提供一些例子嗎?

回答

0

因爲DataGridView使用的是DataBinding,所以你必須更新底層的數據源,在這個例子中是DataTable。請參閱How to: Edit Rows in a DataTable瞭解如何操作。

對於過濾器的問題,你想保存和恢復過濾器:

var filter = dt.DefaultView.RowFilter; 
UpdateData(); 
dt.DefaultView.RowFilter = filter;