2009-07-09 105 views
2

我有一個WinForm DataGridView,當我使用數據填充它時,默認情況下選擇第一項。我不希望發生這種情況,因爲選擇某個項目時會觸發事件並執行一些代碼。我的解決方案是解除綁定 - 重新綁定事件或在新數據綁定後第一次觸發事件時更改標誌。但是我想知道是否有更優雅的東西。防止DataGridView選擇第一項

回答

2

我沒有打開測試的winforms應用程序,但我很好奇,如果你的數據和datagridview之間有一個介入的BindingSource?如果是這樣,如果你設置了

List<Data> data = GetMyData(); 
BindingSource myBindingSource = new BindingSource(); 
myBindingSource.DataSource = data; 
myBindingSource.position = -1; 
myGrid.DataSource = myBindingSource; 

我經常發現介入數據和UI之間的BindingSource對象是有幫助的。它似乎有助於解決很多隨機問題,儘管我更習慣於使用DataTable對象作爲數據而不是列表對象。

+0

我的綁定源是一個泛型列表<> – jwarzech 2009-07-09 15:58:26

0

使用類似下面的例子:

 dataGridView.Columns[0].Selected = false; 
     dataGridView.Rows[0].Selected = false; 
     dataGridView.Rows[0].Cells[0].Selected = false; 

當然,檢查是否有行,列,等等。這只是一個例子。

2

什麼(對不起,VB.NET,但我敢肯定,你可以轉換):

myGrid.ClearSelection() 
2

我有一個類似的問題(但我不使用SelectionChanged事件),而這個工程我:

在構造函數中,設置綁定後,添加處理程序到DataBindingComplete事件:

dgvCommandos.DataSource = systeemCommandos; // = my List<> of objects 
dgvCommandos.DataBindingComplete += new DataGridViewBindingCompleteEventHandler(dgvCommandos_DataBindingComplete); 

的處理程序:

void dgvCommandos_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) 
{ 
    dgvCommandos.ClearSelection(); 
} 

如果您打算選擇一行(例如,添加/插入新對象後),只需設置:

dgvCommandos.Rows[insertPos].Selected = true; 

以此爲基礎,我認爲可以處理其他事件以對用戶選擇做出反應。希望這可以幫助。

0

漂亮的晚,但只有我這樣,我得到它的工作對我來說(很多文本框,組合框等勢必通過的BindingSource我的DataGridView):

初始化數據綁定到我的控制和裝載數據後爲DataGridView的我不得不暫停結合

bindingSource.SuspendBinding(); 

在我檢查,如果被暫停結合我RowHeaderMouseClick事件。如果是這樣,只是恢復它:

if(bindingSource.IsBindingSuspended) 
    bindingSource.ResumeBinding(); 

這樣我就可以完成加載和數據的結合(在我的情況可排序的BindingList),數據顯示給用戶,但沒有選擇的記錄。

希望這可以幫助至少任何人!