2013-05-07 123 views
0

在我的一個C#Winform中,我有一個DataGridView,當用戶按下刷新按鈕時我會更新。更新後設置DataGridView SelectedRows

問題是所選行在過程中丟失。

我想能夠做到以下幾點:

private void function Refresh() 
{ 
UpdateBegin(); // Keep the selected row in memory 
Update(); 
UpdateEnd(); // Apply the selected row to the DataGridView 
} 

這裏是更新的功能。它更新數據源,清除所有列,並帶回那些需要用正確的標題文字:

private void Update() 
{ 
    allItem = DataRepository.LotProvider.GetByIdProduit(detail.IdProduit) 
dataGridView1.DataSource = allItem; 
dataGridView1.Columns.Clear(); 
// Get a dictionary of the required column ID/shown text 
Dictionary<string, string> dictionary = InitDisplayedFields();   
foreach (KeyValuePair<string, string> column in dictionary) 
    // If the grid does not contain the key 
    if (!dataGridView1.Columns.Contains(column.Key)) 
    { 
     // Add the column (key-value) 
     int id = dataGridView1.Columns.Add(column.Key, column.Value); 
     // Bind the property 
     dataGridView1.Columns[id].DataPropertyName = column.Key; 
    } 

} 

然而,我的DataGridView的選擇的行屬性只讀。

有沒有解決這個問題的方法?

+0

你能告訴我們更多關於你的更新嗎?它是否清除所有行,然後從某個數據庫中取出最新的數據?我問的原因是,除非刪除部分選擇內容,否則應該可以在不更改選擇的情況下添加和刪除行。在這種情況下,我相信這個選擇只會被你刪除的內容所改變。 – 2013-05-07 18:40:33

+0

Update函數獲取並更新數據源,清除dataGrid並返回所需的列。 – 2013-05-07 18:48:06

回答

0

你嘗試在這個題目有點像從MSDN(link)以下摘錄:

void dataGridView1_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e) 
{ 
    this.dataGridView1.SelectionMode = DataGridViewSelectionMode.RowHeaderSelect; 
    this.dataGridView1.Rows[e.RowIndex].Selected = true; 
} 
此代碼段中

第二行顯示如何通過編程選擇該行,只要你保持跟蹤選定的RowIndex(因爲它可能在您的UpdateBegin()函數調用中完成)。

希望這可以幫助。

+0

'this.dataGridView1.Rows [e.RowIndex] .Selected = true'似乎是要走的路。 – 2013-05-07 19:27:37

+0

是的,它應該工作。還有一種使用GridView.DataKeys的選項,但是這個可能就足夠了。 – 2013-05-07 21:12:24