寂寞部屋
- 关注互联网,关注生活
关注互联网,关注生活
2019年五月
« 4月    
 12345
6789101112
13141516171819
20212223242526
2728293031  
  • 日志总数:553 篇
  • 浏览总量:2,433,012 次
  • 运行天数:612 天
  • 建站时间:2017-9-14
  • 最后更新:2019-4-2

嵌套的DataGrid如何为子DataGrid动态增加模板列

例子比较简单,直接贴代码了,例子达到以下功能:
(1)两个DataGrid嵌套
(2)外面一个DataGrid分页
(3)里面一个DataGrid动态增加模板列  

 

C#代码
  1. <%@ Page language="c#" Codebehind="WebForm45.aspx.cs" AutoEventWireup="false" Inherits="csdn2.WebForm45" %>    
  2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >    
  3. <HTML>    
  4.     <HEAD>    
  5.         <title>Test</title>    
  6.         <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">    
  7.         <meta content="C#" name="CODE_LANGUAGE">    
  8.         <meta content="JavaScript" name="vs_defaultClientScript">    
  9.         <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">    
  10.     </HEAD>    
  11.     <body>    
  12.         <form id="Form1" method="post" runat="server">    
  13.             <asp:datagrid id="DataGrid1" runat="server" AutoGenerateColumns="False" PageSize="2" AllowPaging="True">    
  14.                 <Columns>    
  15.                     <asp:TemplateColumn HeaderText="分类名">    
  16.                         <ItemTemplate>    
  17.                             <%# DataBinder.Eval(Container.DataItem, "classname") %>    
  18.                             <asp:DataGrid id="DataGrid2" runat="server" AutoGenerateColumns="false"></asp:DataGrid>    
  19.                         </ItemTemplate>    
  20.                     </asp:TemplateColumn>    
  21.                 </Columns>    
  22.             </asp:datagrid></form>    
  23.     </body>    
  24. </HTML>    

 

 

C#代码
  1. using System;    
  2. using System.Collections;    
  3. using System.ComponentModel;    
  4. using System.Data;    
  5. using System.Data.SqlClient;    
  6. using System.Drawing;    
  7. using System.Web;    
  8. using System.Web.SessionState;    
  9. using System.Web.UI;    
  10. using System.Web.UI.WebControls;    
  11. using System.Web.UI.HtmlControls;    
  12.     
  13. namespace csdn2    
  14. {    
  15.     /**//// <summary>    
  16.     /// WebForm45 的摘要说明。    
  17.     /// </summary>    
  18.     public class WebForm45 : System.Web.UI.Page    
  19.     {    
  20.         protected System.Web.UI.WebControls.DataGrid DataGrid1;    
  21.         
  22.         private void Page_Load(object sender, System.EventArgs e)    
  23.         {    
  24.             // 在此处放置用户代码以初始化页面    
  25.             if(!IsPostBack)    
  26.             {    
  27.                 SetBind();    
  28.             }    
  29.         }    
  30.     
  31.         private void SetBind()    
  32.         {    
  33.             SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["conn"]);    
  34.             SqlDataAdapter da=new SqlDataAdapter("select * from class;select * from topic",conn);    
  35.             DataSet ds=new DataSet();    
  36.             da.Fill(ds);    
  37.             ds.Relations.Add("class_topic",ds.Tables[0].Columns["classid"],ds.Tables[1].Columns["topicclassid"]);    
  38.             this.DataGrid1.DataSource=ds.Tables[0];    
  39.             this.DataGrid1.DataBind();    
  40.         }    
  41.     
  42.         Web 窗体设计器生成的代码#region Web 窗体设计器生成的代码    
  43.         override protected void OnInit(EventArgs e)    
  44.         {    
  45.             //    
  46.             // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。    
  47.             //    
  48.             InitializeComponent();    
  49.             base.OnInit(e);    
  50.         }    
  51.             
  52.         /**//// <summary>    
  53.         /// 设计器支持所需的方法 – 不要使用代码编辑器修改    
  54.         /// 此方法的内容。    
  55.         /// </summary>    
  56.         private void InitializeComponent()    
  57.         {        
  58.             this.DataGrid1.PageIndexChanged += new System.Web.UI.WebControls.DataGridPageChangedEventHandler(this.DataGrid1_PageIndexChanged);    
  59.             this.DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);    
  60.             this.Load += new System.EventHandler(this.Page_Load);    
  61.     
  62.         }   
  63.         #endregion    
  64.     
  65.         private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)    
  66.         {    
  67.             if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)    
  68.             {    
  69.                 DataGrid dgrd=(DataGrid)e.Item.FindControl("DataGrid2");    
  70.                 dgrd.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid2_ItemDataBound);    
  71.                 TemplateColumn tm=new TemplateColumn();     
  72.                 tm.ItemTemplate=new ColumnTemplate();     
  73.                 tm.HeaderText="主题名";     
  74.                 dgrd.Columns.Add(tm);     
  75.                 dgrd.DataSource=((DataRowView)e.Item.DataItem).Row.GetChildRows("class_topic");    
  76.                 dgrd.DataBind();    
  77.             }    
  78.         }    
  79.     
  80.         private void DataGrid1_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e)    
  81.         {    
  82.             this.DataGrid1.CurrentPageIndex=e.NewPageIndex;    
  83.             SetBind();    
  84.             
  85.         }    
  86.     
  87.         private void DataGrid2_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)    
  88.         {    
  89.             if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)    
  90.             {    
  91.                 ((Label)e.Item.FindControl("topicname")).Text=Convert.ToString(DataBinder.Eval(e.Item.DataItem,"["topicname"]"));    
  92.             }    
  93.         }    
  94.     }    
  95.     
  96.     public class ColumnTemplate : ITemplate     
  97.     {     
  98.         public void InstantiateIn(Control container)           
  99.         {     
  100.             Label l=new Label();     
  101.             l.ID="topicname";    
  102.             container.Controls.Add(l);     
  103.         }     
  104.     }     
  105. }    

 

来源:http://www.cnblogs.com/lovecherry/archive/2005/04/26/145633.html

本站原创文章,请勿复制转载
版权声明:除特别注明外,本站所有文章均为原创,未经许可请勿复制、转载
2007-11-10
2,913 views
标签: , ,
暂无评论

发表评论

注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。