熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

PageNavigator控件實現客戶端分頁

2013-11-13 09:59:33  來源: .NET編程 

  在這個系列中我將介紹一些Atlas SysUIData中較高級的控件包括
  
  SysUIDataListView使用ASPNET Atlas ListView控件顯示列表數據
  SysUIDataItemView使用ASPNET Atlas ItemView控件顯示集合中的單個數據
  SysUIDataDataNavigator使用 ASPNET Atlas PageNavigator控件實現客戶端分頁導航
  SysUIDataSortBehavior待續
  
  SysUIDataXSLTView待續
  這篇是其中的第三篇使用 ASPNET Atlas PageNavigator控件實現客戶端分頁導航
  把所有的記錄統統放在一個頁面上絕對不是一個好主意特別是當您有成百上千條記錄時您的用戶需要不停的拖動滾動條甚至使用Control+F來找到所期待的內容這將帶來相當差的用戶體驗這時將數據以分頁的方式顯示給用戶將友好的多一些ASPNET服務器端控件擁有內建的分頁及頁面導航功能例如DataGrid和GridView同樣的Atlas客戶端控件SysUIDataDataNavigator也提供了類似的功能這將大大提高我們的開發效率
  
  DataNavigator控件將與DataView(請參考Atlas命名空間SysData下控件介紹——DataView和DataFilter )控件一起工作我們知道DataView控件沒有提供頁面導航相關方法所以我們只能直接設置它的pageIndex屬性來實現導航雖然沒有什麼難度但很多情況下這並不是一個好辦法因為像我這樣好多粗心的開發者往往會忘記檢查pageIndex的邊界值造成不必要的麻煩這也是Atlas要提供DataNavigator控件的原因之一DataNavigator控件將作為一個DataView控件的代理(proxy)提供易用的頁面導航接口
  
  DataNavigator對象只有一個屬性
  
  dataView對某個DataView對象的引用這個DataNavigator將把頁面導航的操作應用到其上您應該總是指定這個屬性
  另外要使用DataNavigator控件您還需要提供一些擁有一些指定commandName屬性的Atlas Button以觸發相應的頁面導航操作這些Button的parent屬性應該設定為此DataNavigator控件以保證DataNavigator能夠捕獲到這些Button發出的命令
  
  您可以指定您的Button的commandName屬性為如下五個string每個都有不同的含義
  
  page將當前頁面索引轉為命令參數(command argument)中指定的值通過這個命令我們可以快速的改變頁面的索引
  nextpage切換到下一頁(如果存在下一頁)
  previouspage切換到上一頁(如果存在上一頁)
  firstpage切換到第一頁
  lastpage切換到最後一頁
  OKMSDN般枯燥的介紹到此為止吧讓我們通過一個實例來熟悉DataNavigator的使用方法
  
  首先我們需要暴露一個Web Service以便Atlas頁面使用該Web Service將返回條記錄下面就是這個Web Service的代碼非常易於理解這裡不贅
  
  Web Service
  using System;
  using SystemCollections;
  using SystemCollectionsGeneric;
  using SystemComponentModel;
  using SystemIO;
  using SystemWeb;
  using SystemWebCaching;
  using SystemWebServices;
  using SystemWebServicesProtocols;
  using MicrosoftWebServices;
  
  //
  // For simplicity this example demonstraes storing and manipulating
  // the data objects in memory A database can also be used
  //
  
  [WebService(Namespace = )]
  [WebServiceBinding(ConformsTo = WsiProfilesBasicProfile_)]
  public class MyDataService : DataService
  {
   static List _data;
   static object _dataLock = new object();
  
   private static List Data
   {
   get
   {
   if (_data == null)
   {
   lock (_dataLock)
   {
   if (_data == null)
   {
   _data = new List();
   for (int i = ; i < ; i++)
   {
   _dataAdd(new Entry(i Dflying + iToString() stringFormat(Dflying{} iToString())));
   }
   }
   }
   }
   return _data;
   }
   }
  
   [DataObjectMethod(DataObjectMethodTypeSelect)]
   public Entry[] SelectRows()
   {
   return MyDataServiceDataToArray();
   }
  }

   public class Entry
  {
   private string _name;
   private string _email;
   private int _id;
  
   [DataObjectField(true true)]
   public int Id
   {
   get { return _id; }
   set { _id = value; }
   }
  
   [DataObjectField(false)]
   [DefaultValue(New row)]
   public string Name
   {
   get { return _name; }
   set { _name = value; }
   }
  
   [DataObjectField(false)]
   [DefaultValue()]
   public string Email
   {
   get { return _email; }
   set { _email = value; }
   }
  
   public Entry()
   {
   _id = ;
   }
  
   public Entry(int id string name string description)
   {
   _id = id;
   _name = name;
   _email = description;
   }
  }
  然後在ASPX頁面中我們需要考慮並定義如下四部分的內容
  
  一個ScriptManager控件用來包含頁面必須的Atlas Framework相關腳本文件通常情況下這也是每個Atlas頁面必須包含的
  一個占位(place holder)的div(id為dataContents見代碼)Atlas將會把渲染後的分頁的ListView放置於此
  一個作為容器的div(DataNavigator控件)以及其中包含的一組按鈕(命令按鈕)用來實現頁面導航功能
  一個隱藏的div用來放置ListView的模版
  下面是以上四部分內容的代碼關於ListView控件的模版請參考我的這篇文章使用ASPNET Atlas ListView控件顯示列表數據
  
  
  
  
  
  
  

  
  
  
  

  
  
   /
  
  
  
  
  
  

  
  
  
   No
   Name
   Email
  
  
  
  
  
  
  
  
  
  
  
  
  
  

   No Data
  
  
  最後該書寫Atlas的XML腳本定義了有如下五個部分
第一部分Atlas客戶端控件DataSource用來從我們上面定義的Web Service中取得數據
  
  
  第二部分一個DataView控件(請參考Atlas命名空間SysData下控件介紹——DataView和DataFilter )用來將第一部分中取得的那條數據分頁
  
  
  
  
  

  

  第三部分一個ListView控件(請參考 使用ASPNET Atlas ListView控件顯示列表數據 )用於顯示分頁好的數據