当前位置:首页 > 网络编程 > WEB编程 > ASP.net >  使用 ASP+ DataGrid 控件来创建主视图/详细资料视图5

 使用 ASP+ DataGrid 控件来创建主视图/详细资料视图5

点击次数:17 次 发布日期:2008-11-26 11:12:29 作者:源代码网
源代码网推荐      每次加载 Authors DataGrid 时,就初始化其 SelectedIndex 属性。一旦得到绑定,即其 DataKeys 集合填置完毕,就通过调用 UpdateDetails,更新详细资料节。
源代码网推荐  
源代码网推荐  针对 SelectedIndexChanged 事件的处理器中的详细资料节也得到更新。注意,此时已借助 DataBind 未被调用以来的保存状态将 DataKeys 集合填置完毕。
源代码网推荐  
源代码网推荐  UpdateDetails 方法首先调用 UpdateSelection。 UpdateSelection 使用 Authors DataGrid 的 SelectedIndex 和 DataKeys 属性来确定选定作者的 ID 和初始化 CurrentAuthor 属性。然后, UpdateDetails 调用 detailsPanel 控件上的 DataBind,对访问 CurrentAuthor 的数据绑定表达式进行求值。
源代码网推荐  
源代码网推荐  除了借助 SelectedIndexChanged 事件进行选择跟踪,还可以从本样例实现另一关键概念。注意,改变选择内容并不需要已将 Authors DataGrid 进行过数据绑定。因此,从不需要重新加载 Authors 列表,从而极大地减少了对 Authors 表的访问。这是 ASP+ 中所实施的显式数据绑定模型的一个关键益处。
源代码网推荐  
源代码网推荐  
源代码网推荐  第 4 步: 排序
源代码网推荐  
源代码网推荐  DataGrid 支持生成可点击标头的功能,此类标头可以用于让最终用户对控件中所展示的数据进行排序。这一步添加了对 Authors 列表进行排序的功能。
源代码网推荐  
源代码网推荐  图 5. 完成第 4 步后页面的屏幕快照
源代码网推荐  
源代码网推荐  Authors DataGrid 来自:
源代码网推荐  
源代码网推荐  Step4.aspx
源代码网推荐  
源代码网推荐  <asp:DataGrid id="authorsGrid" runat="server"
源代码网推荐   ...
源代码网推荐   AllowSorting="true"
源代码网推荐   OnSortCommand="OnSortCommandAuthorsGrid"
源代码网推荐   OnItemCreated="OnItemCreatedAuthorsGrid">
源代码网推荐  
源代码网推荐   <property name="Columns">
源代码网推荐   <asp:ButtonColumn Text="Select" Command="Select"/>
源代码网推荐   <asp:BoundColumn HeaderText="ID" DataField="au_id">
源代码网推荐   <property name="HeaderStyle">
源代码网推荐   <asp:TableItemStyle Width="100px"/>
源代码网推荐   </property>
源代码网推荐   </asp:BoundColumn>
源代码网推荐   <asp:BoundColumn HeaderText="Name" DataField="au_name"
源代码网推荐   SortField="au_name">
源代码网推荐   <property name="HeaderStyle">
源代码网推荐   <asp:TableItemStyle Width="150px"/>
源代码网推荐   </property>
源代码网推荐   </asp:BoundColumn>
源代码网推荐   <asp:BoundColumn HeaderText="State" DataField="state"
源代码网推荐   SortField="state">
源代码网推荐   <property name="HeaderStyle">
源代码网推荐   <asp:TableItemStyle Width="75px"/>
源代码网推荐   </property>
源代码网推荐   </asp:BoundColumn>
源代码网推荐   </property>
源代码网推荐  
源代码网推荐   ...
源代码网推荐  </asp:DataGrid>
源代码网推荐  
源代码网推荐  通过将 AllowSorting 设定为 true,启用排序。然后,对不支持排序的每列的 SortField 属性进行设定。没有设定该属性的列不会生成可点击标头。最后,处理 SortCommand 事件,这会在有代码支持的文件的上下文中加以论述。样例还为 ItemCreated 事件添加了一个事件处理器,以在视觉上显示列标头中的当前排序设置。下面的代码展示为向 Authors 列表添加排序功能而在有代码支持的类中进行更改和补充。
源代码网推荐  
源代码网推荐  Step4Page.cs:
源代码网推荐  
源代码网推荐  namespace Samples {
源代码网推荐   ...
源代码网推荐  
源代码网推荐   public class Step4Page : Page {
源代码网推荐  
源代码网推荐   // 返回当前的排序方向,该信息是在
源代码网推荐   // Page 状态中维持的
源代码网推荐   protected bool SortAscending {
源代码网推荐   get {
源代码网推荐   object o = State["SortAscending"];
源代码网推荐   if (o != null)
源代码网推荐   return (bool)o;
源代码网推荐   return true;
源代码网推荐   }
源代码网推荐   set {
源代码网推荐   State["SortAscending"] = value;
源代码网推荐   }
源代码网推荐   }
源代码网推荐  
源代码网推荐   // 返回当前的排序字段,该信息是在
源代码网推荐   // Page 状态中维持的
源代码网推荐   protected string SortField {
源代码网推荐   get {
源代码网推荐   object o = State["SortField"];
源代码网推荐   if (o != null)
源代码网推荐   return (string)o;
源代码网推荐   return "au_name";
源代码网推荐   }
源代码网推荐   set {
源代码网推荐   State["SortField"] = value;
源代码网推荐   }
源代码网推荐   }
源代码网推荐  
源代码网推荐   // 检索 Authors 表
源代码网推荐   private ICollection GetAuthors() {
源代码网推荐   DataSet ds = GetSessionData();
源代码网推荐   DataView dv = ds.Tables["Author"].DefaultView;
源代码网推荐  
源代码网推荐   dv.RowFilter = String.Empty;
源代码网推荐  
源代码网推荐   string sort = SortField;
源代码网推荐   if (SortAscending == false) {
源代码网推荐   sort += " desc";
源代码网推荐   }
源代码网推荐   dv.Sort = sort;
源代码网推荐  
源代码网推荐   return dv;
源代码网推荐   }
源代码网推荐  
源代码网推荐   // 处理 ItemCreated 事件,以用排序图符对标头
源代码网推荐   // 进行定制
源代码网推荐   protected void OnItemCreatedAuthorsGrid(object sender,
源代码网推荐   DataGridItemCreatedEventArgs e) {
源代码网推荐   if (e.Item.ItemType == ListItemType.Header) {
源代码网推荐   string sortField = SortField;
源代码网推荐   bool ascending = SortAscending;
源代码网推荐  
源代码网推荐   Label sortGlyph = new Label();
源代码网推荐   sortGlyph.Text = ascending ? " 5" : " 6";
源代码网推荐   sortGlyph.Font.Name = "Webdings";
源代码网推荐  
源代码网推荐   TableCell cell = null;
源代码网推荐   if (sortField.Equals("au_name")) {
源代码网推荐   cell = e.Item.Cells[2];
源代码网推荐   }
源代码网推荐   else if (sortField.Equals("state")) {
源代码网推荐   cell = e.Item.Cells[3];
源代码网推荐   }
源代码网推荐  
源代码网推荐   if (cell != null) {
源代码网推荐   cell.Controls.Add(sortGlyph);
源代码网推荐   }
源代码网推荐   }
源代码网推荐   }
源代码网推荐  
源代码网推荐   // 处理作者网格中的 SortCommand 事件,以更新
源代码网推荐   // 排序参数和重新加载新排序的数据
源代码网推荐   protected void OnSortCommandAuthorsGrid(object sender,
源代码网推荐   DataGridSortCommandEventArgs e) {
源代码网推荐   string currentSortField = SortField;
源代码网推荐  
源代码网推荐   SortField = e.SortField;
源代码网推荐   if (currentSortField.Equals(e.SortField)) {
源代码网推荐   SortAscending = !SortAscending;
源代码网推荐   }
源代码网推荐   else {
源代码网推荐   SortAscending = true;
源代码网推荐   }
源代码网推荐  
源代码网推荐   LoadAuthorsGrid();
源代码网推荐   }
源代码网推荐   }
源代码网推荐  }
源代码网推荐  
源代码网推荐  页面将当前字段和排序方向作为名值对,保留在页面的 State 属性中,并将其作为 SortField 和 SortAscending 属性提供出来,此时,页面负责在往返过程之间维持这些属性的值。
源代码网推荐  
源代码网推荐  这些属性用于 GetAuthors 函数,这里,在返回 Author 列表 之前,会根据属性的当前值对其进行排序。
源代码网推荐  
源代码网推荐  用于 SortCommand 事件的事件处理器在 DataGridSortCommandEventArgs 的一个实例中得到传递。该对象包含 SortField 属性的值,而该属性与标题被单击的列相关联。您可以选择对该值进行任意处理,只要该处理在您的应用程序中合理。例如,该值可以包含单个字段的名称,例如本样例中的情形,也可以包含排序信息,从而允许进行多列排序。
源代码网推荐  
源代码网推荐  实施该方法,对 SortField 和 SortAscending 属性的值进行更新。最后,该方法调用 LoadAuthorsGrid,对 Authors DataGrid 进行数据绑定。此时情况是, DataGrid 的列需要重新生成,要求您设定数据源和调用 DataBind。
源代码网推荐  
源代码网推荐  ItemCreated 的事件处理器类似于第 2 步中用于 Titles DataGrid 的事件处理器。此时,处理器修改标头行的控件结构,具体方法是添加表示上升和下降的图符,指示当前已排序的列和当前的排序方向。
源代码网推荐  
源代码网推荐  这里有一个问题需要回答,DataGrid 为何不对其数据进行实际的排序。这主要有两个原因。首先, ASP+ 的数据源是一般的 ICollection,以便您在选择数据源时拥有最大的灵活性。数据源并不包含内置的排序语义。其次,也是更重要的一点, 在每次请求过程中,自动排序均会需要数据源的一个活动的实例。这不太适合用于显式数据绑定结构中,因为这需要您在页面的往返过程中访问和加载数据。  做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。
源代码网推荐


源代码网供稿.
网友评论 (0)
会员中心
网络编程
本站推荐
网络编程之精华