我有一個WinForm DataGridView,當我使用數據填充它時,默認情況下選擇第一項。我不希望發生這種情況,因爲選擇某個項目時會觸發事件並執行一些代碼。我的解決方案是解除綁定 - 重新綁定事件或在新數據綁定後第一次觸發事件時更改標誌。但是我想知道是否有更優雅的東西。防止DataGridView選擇第一項
2
A
回答
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
使用類似下面的例子:
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),數據顯示給用戶,但沒有選擇的記錄。
希望這可以幫助至少任何人!
我的綁定源是一個泛型列表<> – jwarzech 2009-07-09 15:58:26