2009-12-14 50 views
1

這裏非常奇怪的情況:我使用L2S來填充DataGridView。
代碼如下:無法將DataGridView刷新到Linq to SQL(WinForm)

private void RefreshUserGrid() 
    { 
    var UserQuery = from userRecord in this.DataContext.tblUsers 
        orderby userRecord.DisplayName 
        select userRecord; 

    UsersGridView.DataSource = UserQuery; 

//I have also tried 
//this.UserBindingSource.DataSource = UserQuery; 
//UsersGridView.Datasource = UserBindingSource; 

    UsersGridView.Columns[0].Visible = false; 
    } 

每當我使用L2S從數據庫中添加/刪除記錄時,GridView刷新得很好。
但是,如果有人正在編輯網格並犯了一個錯誤,我希望他們能夠點擊刷新按鈕並通過從數據源重新加載來擦除錯誤。
對於我的生活,我無法得到它的工作。

我目前使用我的刷新按鈕的代碼是這樣的:

private void button1_Click(object sender, EventArgs e) 
{ 
    this.DataContext.Refresh(RefreshMode.OverwriteCurrentValues); 
    RefreshUserGrid(); 
} 

但該死的GridView不受影響。發生的一切就是選定的行變爲未選中狀態。

我試過.Refresh().Invalidate(),我試着將數據源更改爲NULL,然後再次返回(所有來自類似帖子的建議)......沒有任何作用。網格刷新的唯一時間是如果我重新啓動應用程序。

我一定錯過了一些基本的東西,但我完全被難住了,我的同事也是如此。
任何想法?

謝謝!

回答

1

最簡單的就是使用BindingSource。創建一個BindingSource類的實例,將其初始化爲數據查詢,然後將BindingSource分配給UsersGridView。

BindingSource將處理更新等。有幾個事件可以被自定義管理捕獲。

This link gives an example of using a BindingSource

編輯:我的第一篇假定Web表單代替的WinForms。

+0

嗯,我也已經嘗試此(在上面的代碼註釋掉),但我可能沒有這樣做的正確方法。我會再給它繼續這個教程,謝謝! – GringoFrenzy 2009-12-15 10:01:57

1

看來這是LINQ to SQL中的一個錯誤。我從Janus GridEx的人那裏瞭解到,問題的原因在於,LINQ向DataContext上的Refresh後未刷新的網格顯示一個靜態列表。

解決方案是簡單地重新實例化DataContext。

1

你可以刷新表格通過剛剛初始化DataContext對象。這將重新設置當前需要更新的對象DataContext對象。但新的實例將自動具有更新的值。

0

以前的評論是真實的。重新實例化DataContext解決問題

Dim db As New dbDatosDataContext() 
DataGridView1.DataSource = From l In db.Bultos Select l