DataGridView中音效模擬模式(Virtual Mode)用法

來源:互聯網
上載者:User
    DataGridView是.net 2.0新增的表格式資料編輯和顯示控制項,簡單的資料顯示和編輯,只需直接和資料來源綁定就可以了。
    對於 一些特殊情況,我們需要自己填充DataGridView,這時候只需要按照行列順序,首先獲得行,然後通過行的Cells屬性,得到儲存格,設定其 Value屬性即可。但這種模式有個問題,即對於幾十行或者幾百行的資料,顯示效率不是問題,當資料量逐漸增大時,效率就成了一個非常重要的問題。
    那麼,如何解決這樣的問題呢,寫過或者看過類似Grid控制項的朋友一定會想到,按需載入資料。也就是當我們在資料表格中移動時,顯示到螢幕上的資料只是實際 需要的資料的一部分,那麼,只載入這部分資料即可。而對於DataGridView,一切都準備好了,只要我們開啟VirtualMode,然後實現幾個 事件(用於載入儲存資料),其他的事情DataGridView會替我們做好。
    在WinForm表單中添加一個DataGridView控制項,設定VirtualMode屬性為True。

實現如下事件:
    第一個需要實現的事件是:CellValueNeeded,該事件在控制項重新整理,需要為儲存格填補值資料時發生,其參數e返回目前的儲存格的行和列,根據行和列,擷取需要的值,賦給e的Value屬性。
    如果只是顯示資料,該事件已足夠,從理論上,通過這樣的方法,DataGridView顯示的資料與資料量無關,即使資料量再大,也可以在常數時間內完成重新整理。

    第二個需要實現的事件是CellValuePushed,該事件在一個儲存格編輯完成後觸發,將資料寫回資料來源。其中事件的參數e會返回儲存格的行、列、值。
    如果要添加行和刪除行,則需要實現NewRowNeeded和UserDeletingRow事件。還有其他一些事件,來控制放棄儲存格、行的編輯等事件。具體可以參考說明文檔。
    總之,使用音效模擬模式,一方面可以很好的為DataGridView控制項載入資料,另一方面,也可以達到資料和顯示分離的目的。

 

    轉自:http://www.cnblogs.com/maweifeng/archive/2006/09/17/506574.html

 

 案例:

     綁定資料到DataGridView上。

    下邊代碼中的dgvWage為DataGridView。本例在載入時要顯示資料,所以在載入時取出資料,儲存到dtWork中,但不綁定到DataGridView上。只設定DataGridView的RowCount屬性。

        DataTable dtWork = null;
        private void FrmCountWage_Load(object sender, EventArgs e)
        {
            GetWorkDayByDate(DateTime.Now);
        }
        //得到資料,
        private void GetWorkDayByDate()
        {
            string sql = @"SELECT * from xx";
            sql = string.Format(sql, date.ToString("yyyy-MM-dd"));
            dtWork = dal.GetDatatableData(sql);
            //不使用綁定資料,綁定在 CellValueNeeded事件中處理
            //dgvWage.DataSource = dtWork;

            //設定DataGridView的行數
            dgvWage.RowCount = dtWork.Rows.Count;
        }

在CellValueNeeded事件是綁定資料。CellValueNeeded是一格一格將資料設定上去了,而且暫時不需要的資料不設定。下邊為綁定DataTable到DataGridView上。

        private void dgvWage_CellValueNeeded(object sender, DataGridViewCellValueEventArgs e)
        {
            if (e.RowIndex==dgvWage.RowCount)
            {
                return;
            }
            // 從屬記錄集中讀取資料   
            string colName = dgvWage.Columns[e.ColumnIndex].DataPropertyName;
            e.Value = dtWork.Rows[e.RowIndex][colName].ToString();
        }

 

 這樣Virtual Mode用法介紹完成。

 

 

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.