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

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

点击次数:13 次 发布日期:2008-11-26 11:13:59 作者:源代码网
源代码网推荐      Step7Page.cs:
源代码网推荐  
源代码网推荐  namespace Samples {
源代码网推荐   ...
源代码网推荐  
源代码网推荐   public class Step7Page : Page {
源代码网推荐  
源代码网推荐   // 处理书名网格中的 UpdateCommand 事件,以施用
源代码网推荐   // 所作的更改并结束编辑 (当页面处于有效状态时)
源代码网推荐   protected void OnUpdateCommandTitlesGrid(object sender,
源代码网推荐   DataGridCommandEventArgs e) {
源代码网推荐   if (IsValid) {
源代码网推荐   TextBox priceText =
源代码网推荐   (TextBox)e.Item.FindControl("priceText");
源代码网推荐   string newPrice = priceText.Text.Substring(1);
源代码网推荐  
源代码网推荐   DataSet ds = GetSessionData();
源代码网推荐   DataTable titlesTable = ds.Tables["Title"];
源代码网推荐  
源代码网推荐   string titleID =
源代码网推荐   (string)titlesGrid.DataKeys[e.Item.ItemIndex];
源代码网推荐   DataRow[] rows = titlesTable.Select("title_id = "" +
源代码网推荐   titleID + """);
源代码网推荐   DataRow editRow = rows[0];
源代码网推荐  
源代码网推荐   editRow.BeginEdit();
源代码网推荐   editRow["price"] = newPrice;
源代码网推荐   editRow.EndEdit();
源代码网推荐   editRow.AcceptChanges();
源代码网推荐   titlesGrid.EditItemIndex = -1;
源代码网推荐   LoadTitlesGrid();
源代码网推荐   }
源代码网推荐   }
源代码网推荐   }
源代码网推荐  }
源代码网推荐  
源代码网推荐  对支持代码的唯一变更与继续对数据源进行更新之前检查页面的有效性有关。验证控件会自动更新页面的 IsValid 属性。
源代码网推荐  
源代码网推荐  检查有效性是在 UpdateCommand 事件处理器中完成的。如第 6 步中所述,不采取任何动作就从事件处理器返回,会保持行的编辑模式。因此,当,且仅当页面处于有效状态时,才会执行所有的更新逻辑。
源代码网推荐  
源代码网推荐  证实控件还会在无效时自动显示其错误消息,且无需编写任何补充代码。
源代码网推荐  
源代码网推荐  
源代码网推荐  第 8 步: 定制列
源代码网推荐  
源代码网推荐  正如到目前您所看到的, DataGrid 控件支持标准的列集,诸如 BoundColumn、 ButtonColumn 和 TemplateColumn。该控件还允许您用自己的列类型对控件进行扩展。这些新的列提供了高度的灵活性。这一步实施一个名为 ImageColumn 的定制列,该列用于在单元格中,为带有图象 URL 数据绑定的每行显示一个图象。
源代码网推荐  
源代码网推荐  图 9. 完成第 8 步后的页面
源代码网推荐  
源代码网推荐  Titles DataGrid 以及 ImageColumn 的声明来自:
源代码网推荐  
源代码网推荐  Step8.aspx:Step8.aspx:
源代码网推荐  
源代码网推荐  <%@ Register TagPrefix="s" Namespace="Samples"%>
源代码网推荐  ...
源代码网推荐  <asp:DataGrid id="titlesGrid" runat="server"
源代码网推荐   ...>
源代码网推荐  
源代码网推荐   <property name="Columns">
源代码网推荐   <s:ImageColumn ImageField="title_id"
源代码网推荐   ImageFormatString="images/Title-{0}.gif"/>
源代码网推荐   </property>
源代码网推荐   ...
源代码网推荐  </asp:DataGrid>
源代码网推荐  
源代码网推荐  本页面包含一个寄存器指令,用于映射 <s:ImageColumn> 标记,以表示 Samples.ImageColumn 类。
源代码网推荐  
源代码网推荐  DataGrid 的声明展示添加到 DataGrid 的 Columns 集合的 ImageColumn。 还展示 ImageField 和 ImageFormatString 集,因而图象是以包含与特定行相关联的标题 ID 的 URL 为依据的。其工作原理与第 2 步中所使用的 HyperLinkColumn 十分类似。
源代码网推荐  
源代码网推荐  ImageColumn.cs:
源代码网推荐  
源代码网推荐  namespace Samples {
源代码网推荐   ...
源代码网推荐  
源代码网推荐   public class ImageColumn : Column {
源代码网推荐  
源代码网推荐   private PropertyDescriptor imageFieldDesc;
源代码网推荐  
源代码网推荐   public ImageColumn() {
源代码网推荐   }
源代码网推荐  
源代码网推荐   public string ImageField {
源代码网推荐   get {
源代码网推荐   object o = State["ImageField"];
源代码网推荐   return (o != null) ? (string)o : String.Empty;
源代码网推荐   }
源代码网推荐   set {
源代码网推荐   State["ImageField"] = value;
源代码网推荐   }
源代码网推荐   }
源代码网推荐  
源代码网推荐   public string ImageFormatString {
源代码网推荐   get {
源代码网推荐   object o = State["ImageFormatString"];
源代码网推荐   return (o != null) ? (string)o : String.Empty;
源代码网推荐   }
源代码网推荐   set {
源代码网推荐   State["ImageFormatString"] = value;
源代码网推荐   }
源代码网推荐   }
源代码网推荐  
源代码网推荐   // 在与该列相关联的单元格中创建
源代码网推荐   // 控件
源代码网推荐   public override void InitializeCell(TableCell cell,
源代码网推荐   int columnIndex,
源代码网推荐   ListItemType itemType) {
源代码网推荐   base.InitializeCell(cell, columnIndex, itemType);
源代码网推荐  
源代码网推荐   if ((itemType == ListItemType.Item) ||
源代码网推荐   (itemType == ListItemType.AlternatingItem) ||
源代码网推荐   (itemType == ListItemType.SelectedItem) ||
源代码网推荐   (itemType == ListItemType.EditItem)) {
源代码网推荐   Image image = new Image();
源代码网推荐   image.ID = Column.GetColumnControlID(columnIndex, -1);
源代码网推荐   cell.Controls.Add(image);
源代码网推荐  
源代码网推荐   if (ImageField.Length != 0) {
源代码网推荐   image.AddOnDataBind(new
源代码网推荐   EventHandler(this.OnDataBindColumn));
源代码网推荐   }
源代码网推荐   }
源代码网推荐   }
源代码网推荐  
源代码网推荐   // 将数据载入在 InitializeCell 中创建的控件
源代码网推荐   private void OnDataBindColumn(object sender, EventArgs e) {
源代码网推荐   Image boundImage = (Image)sender;
源代码网推荐   DataGridItem item = (DataGridItem)boundImage.NamingContainer;
源代码网推荐   object dataItem = item.DataItem;
源代码网推荐  
源代码网推荐   if (IsFirstDataBind()) {
源代码网推荐   string imageField = ImageField;
源代码网推荐   imageFieldDesc =
源代码网推荐   TypeDescriptor.GetProperties(dataItem)[imageField];
源代码网推荐  
源代码网推荐   if (imageFieldDesc == null) {
源代码网推荐   throw new Exception("Invalid property: "" +
源代码网推荐   imageField + """);
源代码网推荐   }
源代码网推荐   OnFirstDataBindHandled();
源代码网推荐   }
源代码网推荐  
源代码网推荐   object data = imageFieldDesc.GetValue(dataItem);
源代码网推荐  
源代码网推荐   if (data != null) {
源代码网推荐   string format = ImageFormatString;
源代码网推荐  
源代码网推荐   if (format.Length != 0) {
源代码网推荐   boundImage.ImageUrl = String.Format(format, data);
源代码网推荐   }
源代码网推荐   else {
源代码网推荐   boundImage.ImageUrl = data.ToString();
源代码网推荐   }
源代码网推荐   }
源代码网推荐   }
源代码网推荐   }
源代码网推荐  }
源代码网推荐  
源代码网推荐  DataGrid 控件所使用的每一列均由抽象的 Column 类派生而来。 列类型实施各种各样的属性 (诸如 HeaderText) 以及所有列类型所公用的样式。
源代码网推荐  
源代码网推荐  ImageColumn 类用于添加针对其具体功能的属性,诸如 ImageField 和 ImageFormatString 属性。实施这些属性,是通过将各值存入列的 State 中实现的。列的状态,在 DataGrid 控件的往返过程中自动得到保持。
源代码网推荐  
源代码网推荐  每列所超控的最为重要的虚拟方法就是 InitializeCell 方法。 DataGrid 促使每列初始化与该列相关联的单元格。实施本方法时,列创建其所需要的控件,并将它们添加为单元格的子单元格。所创建的控件可能会随 itemType 参数的不同而不同,该参数指示包含单元格的列的 ItemType 属性。 Column 类自身包含用于产生标头和标尾的逻辑。 ImageColumn 在进行自我实施时,只是创建一个 Image 控件。它还向 Image 的 DataBind 属性添加一个事件处理器。
源代码网推荐  
源代码网推荐  一旦将列创建完毕, DataGrid 就对其进行数据绑定。在该进程中,允许列借助与列相关联的数据对其在 InitializeCell 中创建的控件进行定制。 ImageColumn 检索其所绑定的字段的值,使用用户所指定的格式生成一个 URL,然后使用结果字符串来设定图象的 ImageUrl 属性。
源代码网推荐  
源代码网推荐  
源代码网推荐  结论
源代码网推荐  
源代码网推荐  DataGrid 控件简化了多个常见 Web 应用情形,其中包括只读报表到交互式应用程序 UI。该控件优于传统的 ASP 编程。它将转换对象模型操作和数据绑定所需的逻辑封装进与浏览器无关的 HTML 表现功能。还将处理回传数据以及转换客户机事件的详细资料封状进服务器事件。
源代码网推荐  
源代码网推荐  该控件设计用于无须作出太多开发努力就可以表现您的数据。随着应用要求的改变,以及您开始使用 DataGrid 的各种功能,您可以逐步添加其它功能。
源代码网推荐  
源代码网推荐  现在 Microsoft® .NET SDK 和 Framework 中就已提供该控件。 SDK 还包含补充文档和多个样例,可用于快速启动;两者均实施本文中所提供的材料。  做人要厚道,请注明转自酷网动力(www.ASPCOOL.COM)。
源代码网推荐


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