簡體   English   中英

綁定到的數據庫更新時,datagridview是否可以自動更新?

[英]is it possible to have a datagridview automatically update when the database it is bound to gets updated?

我有一個C#winforms應用程序,該應用程序具有一個datagridview來顯示mySQL數據庫中表的內容。 是否有可能使datagridview實時反映對數據庫的更改? 即當我直接對表進行更改時,它將在datagridview中顯示該更改

最簡潔的答案是不。 您將必須實現某種輪詢機制。

如果此功能對您的應用程序非常重要,則SQL Server 2008 R2擁有一項稱為StreamInsight的技術,該技術可讓您在數據庫級別監視數據流(甚至在它到達磁盤之前)並觸發事件,並且從理論上講可能可以使用一種機制來觸發應用程序中的更新。 我相當確定MySQL並不包含可比的技術。

這些也只是“近實時”。 我猜您的意思是您希望只要有新數據(不是實時的)就更新datagrid。

從理論上講,這是可能的,但是非常尷尬,並且對使用數據庫不是很自然。 一般來說,數據庫是實時數據的重要來源。 如果您需要實時數據,則應使用實時推送數據源(其中有很多,主要用於財務數據)。

我已經使用更新觸發器和本機存儲過程實現了一個系統(在SQL Server中,而不是MySQL,但您也可以這樣做)。 本機存儲過程只是實現了特定接口和可以從SQL觸發器調用的一個非托管代碼DLL。

事件的順序大致如下:

  1. 托管代碼使用FileSystemWatcher在文件系統上打開一個約定的文件(稱為“監視”文件),並在文件更改時設置回調。
  2. 更新觸發器觸發並調用本機存儲過程。
  3. 本機存儲過程“接觸”監視文件,更新其數據修改字段。
  4. FileSystemWatcher觸發一個回調,此后我們知道數據已更改,因此我們從數據庫中重新加載了數據。

您不能以簡單的方式做到這一點。 但是,您可以使用SqlDependency類(鏈接) ,但不能與mySQL一起使用。 如果有興趣的人, (這里)是指向SQL Server文檔的另一個鏈接。

無論如何,由於對數據庫效率和網絡流量的巨大影響,您應該真正考慮是否需要此功能。

看一下BindingSource和INotifyPropertyChanged(針對您的對象)。

MSDN:如何:使用BindingSource和INotifyPropertyChanged接口引發更改通知

是可能的,是當前建議的,也許不是。 您正在尋找的技術稱為“ 彗星 ”,是一種服務器推動型架構。 在網絡應用程序中,這與當前受支持,可靠且易於維護的功能背道而馳。 選項包括從瀏覽器運行Web服務器,進行回調和持續的xmpp對話,但是除非您現在絕對需要此行為,否則沒有什么是真正有吸引力的。

HTML 5附帶了Web套接字 ,應該可以使這種期望的行為更易於訪問,但是可能需要幾年的時間才能獲得廣泛的支持。

考慮使用ajax輪詢Web服務並進行選擇性的部分頁面刷新,而不是實現真正的http push體系結構。

暫無
暫無

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

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