none
如何讓datagridview只更新最新的資料? RRS feed

  • 問題

  • 我現在更新datagridview都是利用下利方式來更新,因為資料庫會一直持續新增資料
    每次更新都會重新撈全部的資料

        while(true)
      {
     sSql=string.format("select * form Alarm_Table");
         SqlDataReader reader = CDBManager.Singleton.GetRead(sSql, "");
         DataTable dt = new DataTable();
         dt.Load(reader, LoadOption.OverwriteChanges);
         reader.Close();
         dgAlarm.DataSource = dt;
     
        Thread.Sleep(5000);  
      }
    但這樣做的方式效率不是很好,而且datagridview的畫面會一直閃爍
    不知有沒有什麼方式,可以只抓到Sql 後來新增的資料。謝謝。

    2010年3月22日 上午 08:31

所有回覆

  • 你可以先用 SQL 指令篩出最新的資料,然後用 DataTable.Merge() 把新資料的 DataTable 和原資料的 DataTable 合併。
    以下為簽名檔,請勿對話入座:
    初學不是問題,但用不正確的態度來問問題,那就是很大的問題。
    請不要藉新手之名行小白之實,否則只會讓更多無辜的新手得不到幫助而已。
    如果不知道什麼是小白,請參閱:何謂小白
    2010年3月22日 上午 09:20
    版主
  • 感謝小朱大人的回答,可是我另有些疑問
    因為我的sql table如下
    eq    error_ level   error_code
    1A0   1                  2001  <-----第一筆
    1B0   2                  3001  <-----第二筆
    1B0   3                  3002  <-----第三筆
    … …  …

    因為table裡並沒有訂義時間的欄位,所以我並不清楚上一次是撈到第幾筆
    而且,我這個 table裡的資料一段時間後,假設第二筆alarm reset後就會被刪掉
    如此似乎不能使用Datatable.merage()的用法,謝謝

    2010年3月22日 上午 10:29
  • 你可以在資料表中加一個 "自動編號" 欄位, 用這個來判斷目前已顯示到哪一筆.
    MSDN 文件庫很重要
    問題本身越具體, 越容易得到大家的回應
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    2010年3月22日 上午 10:33
    版主
  • 因為資料表我不能動,所以無法使用自動編號來判斷
    不知是否還有其它的想法,謝謝。
    2010年3月23日 上午 02:30
  • 資料表不能動, 可以寫Trigger嗎 ? 不然就是用Insert Trigger 去做通知與傳送.

    MSDN 文件庫很重要
    問題本身越具體, 越容易得到大家的回應
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    2010年3月23日 上午 03:04
    版主
  • Hi 你的問題解決了嗎 ?

     


    MSDN 文件庫很重要
    回應幫助你的人是一種禮貌, 良好的禮貌有助於激發大家對你問題回應的熱情
    進步的人會找尋自己程式中的缺點,半桶水則把自己程式的錯誤推到不相干事物的身上
    2010年4月1日 上午 10:32
    版主