南柯一梦

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

ReorderList是一个全功能的数据绑定控件。若是其绑定的数据中有一个类似Order之类的表示排序信息整数类型字段,那么即可将该字段设置为ReorderList的排序字段。这样,当拖动某一列数据改变其在列表中的位置之后,ReorderList将根据当前的条目次序自动请求服务器,并修改需要更新的条目的排序字段。我们需要做的只是提供数据源的更新方法以及列表条目的排序字段而已,至于如何增加、减少并且协调列表中各个条目中排序字段的值,都将由ReorderList自动代为处理,但是当我们仅仅需要它在页面的表现形式时,难道仅仅是虚写一个Update的方法吗??也就是是说ReorderList该控件在数据绑定时一定要为它指定好相应的Update方法,否则当你在页面拖拽数据条是就会出现如下的错误提示

虽然错误提示你没有指定好数据集的排列字段,可是即使你照办了,还是Reorder failed.........,真有点莫名其妙???

而不会提示你指定好ReorderList的相应的update方法。

总之,ReorderList的使用是一个数据双向绑定的过程

对于用户对列表条目进行的排序操作,ReorderList既可以通过整页的回送,也可以通过Ajax方式的异步回送来通知服务器。而若是需要对某个列表条目进行编辑或删除,则必须使用传统的整页回送模型。

以下为引用资料:

声明ReorderList扩展器控件的语法将类似如下所示:

<ajaxToolkit:ReorderList
  ID="myReorderList" 
  runat="server" 
  DataSourceID="myObjectDataSource"
  DataKeyField="ItemId" 
  AllowReorder="true"
  SortOrderField="Order" 
  DragHandleAlignment="Left" 
  PostBackOnReorder="false"
  EditItemIndex="3"
  ItemInsertLocation="Beginning" 
  ShowInsertItem="true">
    <ItemTemplate>...</ItemTemplate>
    <ReorderTemplate>...</ReorderTemplate>
    <DragHandleTemplate>...</DragHandleTemplate>
    <InsertItemTemplate>...</InsertItemTemplate>
    <EditItemTemplate>...</EditItemTemplate>
    <EmptyListTemplate>...</EmptyListTemplate>
</ajaxToolkit:ReorderList>

ReorderList控件继承于System.Web.UI.WebControls.CompositeDataBoundControl,也就自然拥有了CompositeDataBoundControl数据绑定控件的所有属性/方法/事件,声明ReorderList控件时所常用的属性标签如表10-5所示。

10-5 声明ReorderList控件时的常用属性标签

  1. DataSourceID:页面中某个DataSource控件的ID,用于通过数据绑定自动生成列表项目。
  2. DataKeyField:数据源中键字段的名称,该字段中的值应该在所右记录中是唯一且不变的,ReorderList将用条目中该字段的值作为记录的标志,将在更新/删除中使用。
  3. AllowReorder:是否允许用户对列表中的项目进行重新排序,若指定了<ReorderTemplate>,则该属性将自动被设置为true。
  4. SortOrderField:数据源中作为排序字段的名称。在用户进行重新排序之后,ReorderList将自动修改需要更新的条目的该字段
  5. DragHandleAlignment:条目的可拖动区域与条目之间的相对位置关系。可选Top(上部)、Bottom(下部)、Left(左边)和Right(右边)。
  6. PostBackOnReorder:若设置该属性值为true,则当用户对列表中的项目进行重新排序之后,将自动引发一次整页的回送。否则将以异步回调的方式向服务器端发送请求。
  7. EditItemIndex:列表中当前处于编辑模式下的项目的索引值。
  8. ShowInsertItem:若该属性值为true,则列表中将显示出一个用来添加新条目的特殊行,即<InsertItemTemplate>模版中定义的内容。
  9. ItemInsertLocation:插入的新行在整个列表中的位置。可选Beginning(第一项)或End(最后一项)。
  10. <ItemTemplate>:该标签内将定义列表中普通条目的模版。
  11. <DragHandleTemplate>:该标签内将定义列表条目中可拖放区域的模版。用户只有在该区域中拖拽才能够对该条目进行重排序。
  12. <ReorderTemplate>:该标签内将定义拖动列表条目时列表中可投放区域的模版。
  13. <InsertItemTemplate>:该标签内将定义用来添加新条目的特殊行的模版。
  14. <EditItemTemplate>:该标签内将定义处于编辑状态中的列表条目的模版。
  15. <EmptyListTemplate>:该标签内将定义空列表的模版。若列表中没有任何条目,则将显示出该模版中定义的内容。

需要特别注意的是,ReorderList控件并不会在客户端自动根据SortOrderField对条目进行排序,因此我们在进行数据绑定的时候,要保证条目已经按照SortOrderField进行了排序。事实上,SortOrderField属性也仅仅在更新排序信息时使用。换句话说,ReorderList将只负责更新条目的SortOrderField属性,而并不负责根据该属性对项目排序。

对于PostBackOnReorder属性,若该ReorderList控件将只提供对项目重新排序的功能,则应该将其设置为false,这样可以充分利用ReorderList自带的异步回调功能。而若是该ReorderList控件同样支持对条目的添加、删除、编辑等复杂功能,则应该将PostBackOnReorder属性设置为true,并用UpdatePanel包围该ReorderList,以期得到Ajax的异步回送功能。

posted on 2009-01-17 14:35  NanCo  阅读(530)  评论(0)    收藏  举报