ListView大資料顯示翻頁處理方法

來源:互聯網
上載者:User
顯示資料,一般有兩種選擇:ListView和DataGrid,對於後者,其翻頁功能比較容易實現,那麼對於ListView的翻頁呢,似乎不太好實現。痛點主要在於ListView沒有提供翻頁的功能,另外具體的ListView中一頁可以顯示多少資料不好計算,因為一個ListView,如果你顯示的資料不能填充整個ListView,那麼看起來不是很美觀。今天圍繞這兩個問題,我來給出我的做法。
1.計算ListView顯示的最大記錄條數(一頁,無捲軸,對於橫向捲軸未計算在內)
/// <summary>
  /// 擷取ListView所能顯示的最大記錄數(無捲軸)
  /// </summary>
  /// <param name="lv"></param>
  /// <returns></returns>
  public int GetListViewPageRecordNum(ref ListView lv)
  {
   int _itemHeight = 0;
   if(lv.Items.Count > 0)
    _itemHeight = RectangleToClient(lv.Items[0].Bounds).Height;
   else
   {
    lv.Items.Add(new ListViewItem(new string[]{"0","0"}))  ;
    _itemHeight = RectangleToClient(lv.Items[0].Bounds).Height;
    lv.Items.Clear() ;
   }
//   RECT itemRect = new RECT();
//   SendMessage(lv.Handle, (int)HeaderControlMessages.HDM_GETITEMRECT, 0, ref itemRect);
   int columnHeaderHeight = 0;//itemRect.bottom - itemRect.top;
//   if(columnHeaderHeight == 0)
   columnHeaderHeight = _itemHeight*2;//用兩倍資料行的高度作為列名高度
   //計算listview最多能夠容納的記錄條數(不顯示捲軸的情況下)
   int rnum = (lv.RectangleToClient(new Rectangle(lv.Location.X, lv.Location.Y, lv.Width, lv.Height)).Height - columnHeaderHeight) / _itemHeight ;
   return rnum;
  }
註:由於ListView的列名(ColumnHeader)部分的高度,我沒有取到,所以用兩倍的Item高度來代替該高度。

2.取到了ListView每一頁顯示的最大記錄數,也就保證了ListView可以“飽滿”的顯示資料,那麼下面做一個ListView的翻頁使用者控制項:ListViewPager。
ListViewPager的屬性:
CurrentPageNum--當前顯示的頁數
MaxPageNum--最大頁數
GoPageNum--當前準備跳轉的頁數
...
ListViewPager的事件:
/// <summary>
  /// 上一頁按鈕事件
  /// </summary>
  [Category("Pager"),Description("上一頁按鈕事件")]
  public event PreClickHandle PreButton_Click ;
  /// <summary>
  /// 第一頁按鈕事件
  /// </summary>
  [Category("Pager"),Description("第一頁按鈕事件")]
  public event FirstClickHandle FirstButton_Click ;
  /// <summary>
  /// 下一頁按鈕事件
  /// </summary>
  [Category("Pager"),Description("下一頁按鈕事件")]
  public event NextClickHandle NextButton_Click ;
  /// <summary>
  /// 最後一頁按鈕事件
  /// </summary>
  [Category("Pager"),Description("最後一頁按鈕事件")]
  public event LastClickHandle LastButton_Click ;
  /// <summary>
  /// 跳到指定頁按鈕事件
  /// </summary>
  [Category("Pager"),Description("跳到指定頁按鈕事件")]
  public event GoToHandle GoButton_Click ;
ListViewPager提供的公用方法:
public void RollBackPage()
public void SetCurrentPage(int page)
public void PerformClickFirstButton()
以上這些是ListViewPager的主要資訊,其實現翻頁主要是在狀態上實現,具體的ListView翻頁資料繫結要由使用者在用戶端實現,具體實現的方法調用,直接放在提供的5個翻頁事件中。在每次綁定資料時,要根據ListViewPager的指定的頁去綁定對應頁的資料,同時,由於每頁記錄數的變化或記錄總數的變化,可能導致總頁數發生變化,那麼在綁定的時候也要指定總頁數,如果一致,則無須指定。

下面是控制項原始碼的下載,沒有提供demo,主要是想給大家提供一個思路,使用也比較簡單,demo過後提供。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.