1.实时查询、分页、以及后端排序的完整例子;
2.这是单个Treelist组件,同时开启了topBar和bottomBar,其中树列表的XML、查询条件 和 分页器的freeform XML直接采用了以前的例子;

        3.分页器另一种外观样式: , 点击该按钮后,请查看分页器的模样;

        4.前后页切换淡入淡出方式:无     交替渐变     快速点亮



1.XML描述文件、数据库都采用了前面的例子,这是全部的资源:
Treelist的XML描述文件topBar的XML描述文件freeform分页器的XML描述文件后端的access数据库文件(access.mdb)后端的C#源码.

2.在OnReady( )中开启了tBar和bBar:
function OnReady(id)
{
 AF.func("Build", "treelist/t1.xml");
 AF.func("OpenFreeformBar","treelist/query2.xml \r\n tBar");  //打开topBar
 AF.func("OpenFreeformBar","treelist/pager2.xml \r\n bBar");   //打开bottomBar
 AF.func("SetProp", "IsRemoteSort \r\n true"); 	//指定服务器端排序

 //绑定分页器=======
 //取得Treelist句柄
 var h = AF.func("GetHandle", "");
 //调用bottomBar的freeform的扩展函数:绑定Treelist
 AF.func("bBar.BindPager", h + "\r\n ID0");
 //设置分页器的dataURL (将自动加载Treelist数据)
 AF.func("bBar.SetObjectProp", "ID0\r\n dataURL  \r\n" + genUrl() + "\r\n mode=asynch");	//让Treelist异步加载数据
}

3.在OnEvent( )事件的源码:
function OnEvent(id, Event, p1, p2, p3, p4)
{
 //按钮事件============
 if(Event=="ButtonClicked") {
  //bottomBar中左侧的按钮事件
  if(p1=="IDRefresh") {
   AF.func("refresh", "");
   return;
  }
  if(p1=="IDPrint") {
   AF.func("printPreview", "");
   return;
  }
  
  //工具条功能
  if(p1 == "close1" || p1=="close2")		//关闭查询
   AF.func("TBar.SetObjectProp", "layout1,layout2,mirror \r\n visible \r\n 0");
  else if(p1 == "btn1") {		//开启查询条件1
   AF.func("TBar.SetObjectProp", "layout2 \r\n visible \r\n 0");
   AF.func("TBar.SetObjectProp", "mirror, layout1 \r\n visible \r\n 1");
  }
  else if(p1 == "btn2") {		//开启查询条件2
   AF.func("TBar.SetObjectProp", "layout1 \r\n visible \r\n 0");
   AF.func("TBar.SetObjectProp", "mirror, layout2 \r\n visible \r\n 1");
  }
  else if(p1=="ok1" || p1=="ok2") {	//查询动作
   if(p1=="ok1") { //取得日期条件
    od1 = AF.func("TBar.GetValue", "orderDate1");
    od2 = AF.func("TBar.GetValue", "orderDate2");
    rd1 = AF.func("TBar.GetValue", "requireDate1");
    rd2 = AF.func("TBar.GetValue", "requireDate2");
    f1 = f2 = "";
   }
   else { //取得货重条件
    f1 = AF.func("TBar.GetValue", "freight1");
    f2 = AF.func("TBar.GetValue", "freight2");
    od1 = od2 = rd1 = rd2 = "";
   }
   AF.func("BBar.SetObjectProp", "ID0\r\ndataURL\r\n" + genUrl() + "\r\n mode=Asynch; isResetPage=true");
  }
  else if(p1 == "btn3")		//打印预览
   AF.func("PrintPreview", "");
 }
 //排序事件: 交由服务器排序
 else if(Event == "Sort") {
  AF.func("bBar.SetObjectProp", "ID0\r\ndataURL\r\n" + genUrl() + "\r\n mode=Asynch; isResetPage=true");
 }
}

4.关于事件部分,对Treelist而言,topBar、bottomBar并无区别,只要保证二者内部的输入对象id不重复就行,请自行参考页面的js源码.