使用 ASP+ DataGrid 控件来创建主视图/详细资料视图__教程 |
|
日期:2007-5-20 1:22:40 人气:159 [大 中 小] |
|
|
|
<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 属性的值,而该属性与标题被单击的列相关联。您可以选择对该值进行任意处理,只要该处理在您的应用程序中合理。例如,该值可以包含单个字段的名称,例如本样例中的情形,也可以包含排序信息,从而允许进行多列排序。
|
|
出处:本站原创 作者:佚名 |
|
|