使用 ASP+ DataGrid 控件来创建主视图/详细资料视图5
点击次数:17 次 发布日期:2008-11-26 11:12:29 作者:源代码网
|
源代码网推荐 源代码网推荐 针对 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)。 源代码网推荐 源代码网供稿. |
