星期二, 9月 21, 2010

ScrollBar在 DataGridView能顯現

程式好弱.......一堆東西看完書還是不懂的運用!!
廢話不多說.....我只會抱怨@@

最近在做datatable裡的資料binding到datagridview上,
由於資料會更新, 所以必須隨時Update到datagridview上,
但是又不想UI Thread卡死,
所以用新Thread去跑data,要更新時再去Invoke,讓主執行緒能更新畫面

 //對控制項更新狀態
        delegate void UpdateGridViewlHandle();
        delegate void UpdateLabellHandle(int over,int count);
        private void UpdateGridView()
        {
            customDataGridView1.Refresh();
        }
        private void UpdateLabel(int over,int count)
        {
            stateLabel.Text = "處理中…,失敗 "+getFailed+" 筆…";
        } 




            DataRow dr = viewTable.NewRow();
            for (int i = 0; i < tablelist.Count; i++)
            {
                dr[i] = tablelist[i];
            }
            viewTable.Rows.Add(dr);
            //refresh datagridview
            this.Invoke(new UpdateGridViewlHandle(UpdateGridView));
            //refresh label
            this.Invoke(new UpdateLabellHandle(UpdateLabel), counter++, ipArray.Count()); 

一開始並沒有將資料塞到Scrollbar會跑出來,以為這樣的程式碼是OK
結果資料量一大,Scrollbar要顯示出來的時候,有時候會整個卡死,有時候卻不會
一開始覺得可能是datagridview有問題,後來才發現可能Thread的關係,
當Thread invoke時,剛好Scrollbar也要顯示,結果就程式就當了

後來就開始找看能不能讓Scrollbar能一直顯示,而不是該顯示再顯示。
一開始以為datagridview會有Scrollbar直接顯示的屬性,但是卻用不出來
於是只好再網路上尋找解法 

Always display Vertical ScrollBar in DataGridView  

利用繼承的方法,將datagridview的 protected VerticalScrollBar設為True
再一開始就將ScrollBar設為可見,讓兩個thread不會卡死
VerticalScrollBar.Visible = true;

沒有留言: