C#-[祈福]天佑中华 众志成城 抗震救灾 重建家园

你的苦难就是我们的苦难,你的希望就是我们的希望。当灾难来临时,我们与你在一起,一起为逝者默念安息、一起为伤者祈祷平安。而更多的关怀和力量,正悄悄在汇集:天佑中华,众志成城;抗震救灾、重建家园......
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

DataGrid动态添加模板列的一个例子

Posted on 2008-04-09 16:03  尹合磊  阅读(262)  评论(0编辑  收藏  举报
33.jpg
表dep:depid(标识主键),depname(学院名字)
表stu:stuid(标识主键),stuname(学生名字),studepid(学院id=表dep.depid)

前台:
 1 <%@ Page language="c#" Codebehind="WebForm30.aspx.cs" AutoEventWireup="false" Inherits="csdn.WebForm30" %> 
 2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > 
 3 <HTML> 
 4  <HEAD> 
 5   <title>WebForm30</title> 
 6   <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1"> 
 7   <meta name="CODE_LANGUAGE" Content="C#"> 
 8   <meta name="vs_defaultClientScript" content="JavaScript"> 
 9   <link href="css.css" rel="stylesheet" type="text/css"> 
10   <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5"> 
11  </HEAD> 
12  <body MS_POSITIONING="GridLayout"> 
13   <form id="Form1" method="post" runat="server"> 
14   </form> 
15  </body> 
16 </HTML> 

后台:
  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 csdn 
 14 
 15  /// <summary> 
 16  /// WebForm30 的摘要说明。 
 17  /// </summary> 
 18  public class WebForm30 : System.Web.UI.Page 
 19  { 
 20   DataGrid DataGrid1=new DataGrid(); 
 21   private void Page_Load(object sender, System.EventArgs e) 
 22   { 
 23    // 在此处放置用户代码以初始化页面 
 24    CreateDataGrid();  
 25   } 
 26    
 27   protected void CreateDataGrid() 
 28   { 
 29    DataGrid1.AutoGenerateColumns=false
 30    DataGrid1.CssClass="border"
 31    DataGrid1.BorderWidth=0
 32    DataGrid1.CellSpacing=1
 33    DataGrid1.CellPadding=5
 34    DataGrid1.ItemStyle.CssClass="item"
 35    DataGrid1.HeaderStyle.CssClass="header"
 36    DataGrid1.DataKeyField="stuid"
 37 //以上设定DataGrid的样式 
 38    TemplateColumn tm=new TemplateColumn(); 
 39    tm.ItemTemplate=new ColumnTemplate1(); 
 40    tm.HeaderText="姓名"
 41    DataGrid1.Columns.Add(tm); 
 42 //建立第一个模板列 
 43    TemplateColumn tm2=new TemplateColumn(); 
 44    tm2.ItemTemplate=new ColumnTemplate2(); 
 45    tm2.HeaderText="学院"
 46    DataGrid1.Columns.Add(tm2); 
 47 //建立第二个模板列 
 48    ButtonColumn bc=new ButtonColumn(); 
 49    bc.ButtonType=ButtonColumnType.PushButton; 
 50    bc.CommandName="del"
 51    bc.Text="删除"
 52    DataGrid1.Columns.Add(bc); 
 53 //建立删除按钮列 
 54    SetBind(); 
 55 //填充数据 
 56    Page.Controls[1].Controls.Add(DataGrid1); 
 57 //给页面的form加入这个DataGrid1 
 58   } 
 59 
 60   protected void SetBind() 
 61   { 
 62    SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["conn"]); 
 63    SqlDataAdapter da=new SqlDataAdapter("select * from stu,dep where stu.studepid=dep.depid",conn); 
 64    DataSet ds=new DataSet(); 
 65    da.Fill(ds,"table1"); 
 66    this.DataGrid1.DataSource=ds.Tables["table1"]; 
 67    this.DataGrid1.DataBind(); 
 68     
 69   } 
 70 
 71   private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e) 
 72   { 
 73 //和上面连接给出的例子中的代码一样,给下拉框绑定数据,并且选择默认的 
 74    SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["conn"]); 
 75    SqlDataAdapter da=new SqlDataAdapter("select * from dep",conn); 
 76    DataSet ds=new DataSet(); 
 77    da.Fill(ds,"table1"); 
 78    if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem) 
 79    { 
 80     DropDownList ddl=(DropDownList)e.Item.FindControl("dep"); 
 81     ddl.DataSource=ds.Tables["table1"]; 
 82     ddl.DataTextField="depname"
 83     ddl.DataValueField="depid"
 84     ddl.DataBind(); 
 85     ddl.Items.FindByValue(Convert.ToString(DataBinder.Eval(e.Item.DataItem,"depid"))).Selected=true
 86    } 
 87   } 
 88 
 89   private void DataGrid1_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) 
 90   { 
 91    if(e.CommandName=="del"
 92    { 
 93     SqlConnection conn=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["conn"]); 
 94     SqlCommand comm=new SqlCommand("delete from stu where stuid=@id",conn); 
 95     SqlParameter parm1=new SqlParameter("@id",SqlDbType.Int); 
 96     parm1.Value=this.DataGrid1.DataKeys[e.Item.ItemIndex]; 
 97     comm.Parameters.Add(parm1); 
 98     conn.Open(); 
 99     comm.ExecuteNonQuery(); 
100     conn.Close(); 
101     SetBind(); 
102    } 
103   } 
104 
105   #region Web 窗体设计器生成的代码 
106   override protected void OnInit(EventArgs e) 
107   { 
108    // 
109    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。 
110    // 
111    InitializeComponent(); 
112    base.OnInit(e); 
113   } 
114    
115   /// <summary> 
116   /// 设计器支持所需的方法 - 不要使用代码编辑器修改 
117   /// 此方法的内容。 
118   /// </summary> 
119   private void InitializeComponent() 
120   {    
121    this.Load += new System.EventHandler(this.Page_Load); 
122    this.DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound); 
123    this.DataGrid1.ItemCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.DataGrid1_ItemCommand);//这里的两个事件千万别忘记,因为DataGrid是后台创建的,这些事件需要自己来写上,vs.net也不会为你创建 
124   } 
125   #endregion 
126  } 
127 
128  public class ColumnTemplate1 : ITemplate 
129  { 
130 //第一个模板列 
131   public void InstantiateIn(Control container)       
132   { 
133    LiteralControl l = new LiteralControl(); 
134    l.DataBinding += new EventHandler(this.OnDataBinding); 
135 //数据绑定 
136    container.Controls.Add(l); 
137 //为模板列加入LiteralControl 
138   } 
139 
140   public void OnDataBinding(object sender, EventArgs e) 
141   { 
142    LiteralControl l = (LiteralControl) sender;//LiteralControl发送绑定请求 
143    DataGridItem container = (DataGridItem) l.NamingContainer; 
144    l.Text = ((DataRowView)container.DataItem)["stuname"].ToString();//绑定stuname字段 
145   } 
146  } 
147 
148  public class ColumnTemplate2 : ITemplate 
149  { 
150 //第二个模板列 
151   public void InstantiateIn(Control container)       
152   { 
153    DropDownList dpl = new DropDownList(); 
154    dpl.ID="dep"
155    container.Controls.Add(dpl); 
156 //加入一个id="dep"的下拉框,数据在DataGrid的ItemDataBound中绑定 
157   } 
158  }  
159