簡體   English   中英

刷新DataGridView.DataSource的更好方法

[英]Better way of refreshing DataGridView.DataSource

目前我在我的應用程序中有一個DataGridView ,我從我的Linq-to-SQL類填充,如此...

    /// <summary>
    /// Delegate to update datagrid, fixes threading issue
    /// </summary>
    private void updateInfo()
    {
        // Linq to datagridview; display all
        var query = from n in dbh.Items select n;
        itemDataGridView.DataSource = query.ToList();
    }

所以這個問題是每次我添加新信息並運行此刷新時,表的焦點都會發生變化,這意味着如果我在一行上它會將我切換到另一行。 並且有一個事件與行的更改相關聯,因此這會導致此事件在列表保持刷新時運行。

我沒有,但我記得在切換到Linq-to-SQL有界DataGridView有一個TableAdapter形成,而不是改變DB中的數據,你只需使用這個TableAdapter插入,這將自動刷新DataGridView以正確的方式。

所以我想知道是否還有其他一些方法我應該對每個順利刷新做這個?

這對我來說聽起來不像是一個L2S問題。 對於您使用的任何網格,這聽起來更像是一個問題。 所有L2S都是為您的網格提供數據。 對我來說,刷新后網格的當前行會發生變化。 是否可以禁用網格,將當前行設置為您想要的,然后啟用網格? 我過去做過這個。

蘭迪

您似乎正在嘗試修改應用程序外部的數據,然后讓DataGridView顯示這些更改。

我不知道一種自動輪詢數據庫的方法,然后讓DataGridView只更新該行以顯示更平滑的刷新。 為了刷新,我總是將DataGridView重新綁定到包含TableAdapter Select,Update和DeleteCommand(SQL但類似)的DataSource。 我不認為這是一個LINQ問題。

無論您如何更新基礎表,除非您只編輯一個字段然后稍后發布更新,否則將進行某種刷新。

我假設您正在使用WinForms,然后沒有其他選擇。 如果您正在使用WPF,則可以使用WPF中存在的綁定技術。 但我不知道細節。

正如其他人已經指出的那樣,你的問題與Linq2Sql本身無關,它與DataGridView處理對象數據源的方式有關。

解決丟失的選定行的一種方法是對要綁定的集合進行排序,並在刷新后以編程方式選擇先前選定的行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM