使用 ASP+ DataGrid 控件来创建主视图/详细资料视图__教程 |
|
日期:2007-5-20 1:22:40 人气:159 [大 中 小] |
|
|
|
if (e.Item.ItemType == ListItemType.Footer) { int cellCount = e.Item.Cells.Count;
for (int i = 0; i < cellCount - 1; i++) { e.Item.Cells.RemoveAt(0); }
int itemCount = titlesGrid.Items.Count; string itemCountString; if (itemCount == 0) { itemCountString = "No Titles Found"; } else { itemCountString = Int32.ToString(itemCount) + " title(s)"; }
TableCell summaryCell = e.Item.Cells[0];
summaryCell.Text = itemCountString; summaryCell.ColumnSpan = cellCount; summaryCell.HorizontalAlign = HorizontalAlign.Right; } }
// 超控 OnLoad,以载入选定作者的详细资料 protected override void OnLoad(EventArgs e) { base.OnLoad(e);
string authorID = Request.QueryString["AuthorID"]; if (authorID != null) { SelectAuthor(authorID); detailsPanel.DataBind(); } }
// 根据给定作者 ID 来设置 CurrentAuthor 对象 private void SelectAuthor(string authorID) { DataSet ds = GetSessionData(); DataView dv = ds.Tables["Author"].DefaultView;
dv.RowFilter = "au_id = '" + authorID + "'"; currentAuthor = dv[0]; } } }
通过访问 Request.QueryString 集合,类就超越页面的 OnLoad 方法来检索作为 URL 请求中的参数传来的 Author ID。然后使用该 Author ID 来查询数据源和设置 CurrentAuthor 属性。最后,调用 DataBind,从而为所有的数据绑定的表达式求值。
另外,该页面为 DataGrid 控件的 ItemCreated 事件实施了一个事件处理器。 ItemCreated 事件是 DataGrid 为其高级用途提供的扩展机制之一。该事件允许从行的控件结构内部添加和删除控件,以及在特殊情况下将其添加到特定行。
DataGrid 每次创建一个项目(或行)时,就引发该事件。这具体有两种情况:
要对控件进行数据绑定,且项目需要从头创建,则在将项目进行数据绑定之前,引发该事件。
当要从往返过程中的保存状态创建项目时,则在将所保存的状态载入项目及其包含的控件之前引发该事件。 结果是,该事件提供一个挂钩,用于对项目的现有控件结构进行更改。
在本例中,处理器修改控件的标尾,以显示所列书名的的一个计数。标尾所包含的列的数目与其它行一样。摘要需要横跨整个 DataGrid。因此,处理器仅保留行中的一个单元格,将其余全部删除,并将仅剩的单元格的 ColumnSpan 重置,以使其横跨整个列集,设定其 HorizontalAlign 属性,以使文字右对齐,最后设定其 Text,指示计数。
处理该事件时,只有一条规则需要遵守:您必须进行同样的结构转换,无论调用该项目的上下文如何,无论是在数据绑定过程中,还是在往返过程中。
--------------------------------------------------------------------------------
第 3 步: 单页面中的主/详细资料视图
创建主/详细资料视图的另一备选且更常用的方法就是用单页面显示这些视图。
图 4. 完成第 3 步后的页面
Authors DataGrid 来自:
Step3.aspx:
<asp:DataGrid id="authorsGrid" runat="server" ... DataKeyField="au_id" OnSelectedIndexChanged="OnSelIndexChangedAuthorsGrid">
<property name="Columns"> <asp:ButtonColumn Text="Select" Command="Select"/> ... </property>
...
<property name="SelectedItemStyle"> <asp:TableItemStyle BackColor="PaleGoldenRod" Font-Bold="true"/> </property> </asp:DataGrid>
与前一步相比,该声明中有三处变化。
首先,在第 2 步中添加的 HyperLinkColumn 已被删除。这不再需要,因为整个视图是在单页面中实施的。
其次,向列集添加了一个新的列类型 ButtonColumn。该列在每行中生成 LinkButton,用于提交该页,而不是从该页进行浏览。列的 Command 属性设定为 Select,对相应的 LinkButton 属性进行设定。 DataGrid 将 Select 作为一个标准命令,将包含被单击按钮的列选定。
当选定内容发生变化时, DataGrid 就引发 SelectedIndexChanged 事件,该事件在代码中得到处理。 DataKeyField 属性页得到设定,从而导致 DataKeys 集合填置与数据源中的每个项目相对应的值。 |
|
出处:本站原创 作者:佚名 |
|
|