none
關於 Datagridview 的 scrollbar RRS feed

  • 問題

  • 我有一支程式  會一直去更新 Datagridview 中的資料 但我是針對 其 datasource 更新
    此時  使用者會反應  在拖拉scrollbar 時 會 頓頓的 

    有什麼方法可以解決呢???
    2009年12月7日 上午 05:50

解答

所有回覆

  • hi
    使用multiple thread
    參考執行緒教學課程
    http://msdn.microsoft.com/zh-tw/library/aa288472(VS.71).aspx
    http://www.dotblogs.com.tw/ricochen/Default.aspx
    2009年12月7日 上午 07:58
  • hi
    使用multiple thread
    參考執行緒教學課程
    http://msdn.microsoft.com/zh-tw/library/aa288472(VS.71).aspx
    http://www.dotblogs.com.tw/ricochen/Default.aspx

    我的程式中 都有進行  Lock 的動作  還是會這樣耶~~~
    2009年12月7日 上午 08:15

  • 請你參考範例 3:使用執行緒集區 很清楚
    (重點是在ThreadPool而不是lock)

    2.0後也可以使用BackgroundWorker 類別(很方便)也可解決你的問題
    http://msdn.microsoft.com/zh-tw/library/system.componentmodel.backgroundworker.aspx


    http://www.dotblogs.com.tw/ricochen/Default.aspx
    2009年12月7日 上午 11:41
  • 布利:
       你更新資料該不會是一次全部讀取吧 ? 通常這種即時更新 (而且不會有Delete/Update狀況時) 比較好的方式是只要讀取新進來的資料附加在原本的DataTable類別上.

    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    2009年12月8日 上午 02:29
    版主
  • 布利:
       你更新資料該不會是一次全部讀取吧 ? 通常這種即時更新 (而且不會有Delete/Update狀況時) 比較好的方式是只要讀取新進來的資料附加在原本的DataTable類別上.

    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?

    謝謝大家的回應
    我也是用datatable去進行更改  但  資料越更新 
    scroll bar 就越來越"頓" 

    我有去看  Ricosme  的文章  我還是不太懂要如何去修改
    請大家再幫幫忙  謝謝
    2009年12月8日 上午 06:09
  • 要不要分享一下重點的程式碼, 也許這樣我們會比較容易幫你找問題


    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?
    2009年12月8日 下午 03:11
    版主
  • 要不要分享一下重點的程式碼, 也許這樣我們會比較容易幫你找問題


    學而不思則罔, 思而不學則殆.
    如果你一直都看不懂、不想學習看懂、抗拒看懂MSDN Library的話,那你最好放棄想要寫好程式這件事
    如果你自私地不肯回饋與分享,那別人為何要花時間回答你的問題?

    不好意思  我也不知怎麼去貼重點碼給您
    我大概說一下 程式的運作方式 就是 當有 資料更新時 會push 進程式中
    當程式的 method 接到 push 的資料會更新
    首先是Lock datatable
    然後 在將相關的datarow 進行更新

    請幫幫忙囉
    2009年12月9日 上午 03:54
  • Hi,

    如果您還是看不懂多執行緒的用法
    可考慮用替代性方案
    在更新資料時加呼叫Application.DoEvent
    這樣可以釋放資源讓系統能處理你介面上的動作
    或是在拉動捲軸時,讓程式暫時不更新

    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2009年12月9日 上午 04:36
  • Hi,

    如果您還是看不懂多執行緒的用法
    可考慮用替代性方案
    在更新資料時加呼叫Application.DoEvent
    這樣可以釋放資源讓系統能處理你介面上的動作
    或是在拉動捲軸時,讓程式暫時不更新

    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/

    感覺  有解了  但  我都是有資料進來時更新
    我要把 Application.DoEvent  擺在哪呢~~
    2009年12月9日 上午 06:59
  • Application.DoEvents 方法

    Thread.Sleep 方法 (Int32)

    放在您更新DataRow的迴圈裡吧,後面跟著Sleep(1),參考以上試試...

    2009年12月9日 上午 07:20
  • Application.DoEvents 方法

    Thread.Sleep 方法 (Int32)

    放在您更新DataRow的迴圈裡吧,後面跟著Sleep(1),參考以上試試...

    我進行 datarow 更新 並沒有跑迴圈
    只是因為資料push 更新很快 所以 會讓scrollbar 頓頓的
    請大家再幫幫忙  謝謝
    2009年12月9日 上午 08:03
  • Hi,

    就是放在資料進來的那段後面~
    可是最好還是把多執行緒搞懂會比較好
    因為這樣的作法更新速度應該會整個被拖下來

    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/
    2009年12月9日 上午 10:04
  • Hi,

    就是放在資料進來的那段後面~
    可是最好還是把多執行緒搞懂會比較好
    因為這樣的作法更新速度應該會整個被拖下來

    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/

    殘念 
    因為  我的資料是收 event 進來 然後 更新 相關datarow
    所以 我把  Application.Doevent  擺在下面會錯誤
    qtPush_DataReceived這個method 是去訂閱server後 會收server主動push 資料的event
    我也有改成加 Thread.Sleep(1)
    在拖拉 Datagridview 時還是 會頓頓的  

    還有解嘛  幫忙一下囉~~

     private void qtPush_DataReceived(string[] TagValue)
            {
                //Application.DoEvents();
               
                DataReceivedProc(TagValue);
                GetCHashBSTrade(TagValue[90].ToString());
               
            }
    2009年12月10日 上午 01:24
  • Hi,

    就是放在資料進來的那段後面~
    可是最好還是把多執行緒搞懂會比較好
    因為這樣的作法更新速度應該會整個被拖下來

    謙卑學習,持之以恆,才能不斷的Level Up http://www.dotblogs.com.tw/larrynung/

    殘念 
    因為  我的資料是收 event 進來 然後 更新 相關datarow
    所以 我把  Application.Doevent  擺在下面會錯誤
    qtPush_DataReceived這個method 是去訂閱server後 會收server主動push 資料的event
    我也有改成加 Thread.Sleep(1)
    在拖拉 Datagridview 時還是 會頓頓的  

    還有解嘛  幫忙一下囉~~

     private void qtPush_DataReceived(string[] TagValue)
            {
                //Application.DoEvents();
               
                DataReceivedProc(TagValue);
                GetCHashBSTrade(TagValue[90].ToString());
               
            }

    我想請問一下 我的系統就是
    會去 訂閱 server 的資料
    當有新資料進來時 會push 給我

    因為 資料 會更新的滿快的 如上面的 qtPush_DataReceived 這個 delegate event  會一直被呼叫
    然後  裡面會去 更新  對應的 datarow

    在這裡 我可以用什麼方式 例如 thread 的技術去讓  Datagridview不會頓頓的
    2009年12月11日 上午 09:09
  • 參考小弟這篇在依你需求自行修改
    http://www.dotblogs.com.tw/ricochen/archive/2009/12/12/12392.aspx
    http://www.dotblogs.com.tw/ricochen/Default.aspx
    2009年12月11日 下午 05:52