DataGrid嵌套DataGrid

1.html代码
< HTML >
    
< HEAD >
        
< title > DataGridNesting </ title >
        
< meta  content ="Microsoft Visual Studio .NET 7.1"  name ="GENERATOR" >
        
< meta  content ="C#"  name ="CODE_LANGUAGE" >
        
< meta  content ="JavaScript"  name ="vs_defaultClientScript" >
        
< meta  content ="http://schemas.microsoft.com/intellisense/ie5"  name ="vs_targetSchema" >         
    
</ HEAD >
    
< body  MS_POSITIONING ="GridLayout" >
        
< form  id ="Form1"  method ="post"  runat ="server" >
            
< asp:datagrid  id ="DataGrid1"  runat ="server"  DataKeyField ="ClassID"  OnEditCommand ="Edit_Grid1"
                OnCancelCommand
="Cancel_Grid1"  OnUpdateCommand ="Update_Grid1"  OnDeleteCommand ="Delete_Grid1"
                CellPadding
="4"  BackColor ="White"  BorderWidth ="1px"  BorderStyle ="None"  BorderColor ="#CC9966"
                Width
="660px"  AutoGenerateColumns ="False"  OnItemCommand ="Item_Command" >
                
< FooterStyle  ForeColor ="#330099"  BackColor ="#FFFFCC" ></ FooterStyle >
                
< SelectedItemStyle  Font-Bold ="True"  ForeColor ="#663399"  BackColor ="#FFCC66" ></ SelectedItemStyle >
                
< ItemStyle  ForeColor ="#330099"  BackColor ="White" ></ ItemStyle >
                
< HeaderStyle  Font-Bold ="True"  ForeColor ="#FFFFCC"  BackColor ="#990000" ></ HeaderStyle >
                
< Columns >
                    
< asp:TemplateColumn  HeaderText ="序号" >
                        
< HeaderStyle  Width ="10px" ></ HeaderStyle >
                        
< ItemTemplate >
                            
<% # Container.ItemIndex+1  %>
                        
</ ItemTemplate >
                    
</ asp:TemplateColumn >
                    
< asp:TemplateColumn  HeaderText ="序号" >
                        
< HeaderStyle  Width ="10px" ></ HeaderStyle >
                        
< ItemTemplate >
                            
< asp:ImageButton  id ="ImageButton1"  runat ="server"  ImageUrl ="add.gif" ></ asp:ImageButton >
                        
</ ItemTemplate >
                    
</ asp:TemplateColumn >
                    
< asp:BoundColumn  Visible ="False"  DataField ="ClassID"  HeaderText ="ClassID" >
                        
< HeaderStyle  Width ="0px" ></ HeaderStyle >
                    
</ asp:BoundColumn >
                    
< asp:TemplateColumn  HeaderText ="班级" >
                        
< HeaderStyle  Width ="300pt" ></ HeaderStyle >
                        
< ItemTemplate >
                            
<% # DataBinder.Eval(Container.DataItem,"ClassName" %>
                            
< asp:DataGrid  id ="DataGrid2"  runat ="server"  DataKeyField ="StudentID"  OnEditCommand ="grid2_EditCommand"
                                OnCancelCommand
="grid2_CancelCommand"  OnUpdateCommand ="grid2_UpdateCommand"  OnDeleteCommand ="grid2_DeleteCommand"
                                CellPadding
="4"  BackColor ="White"  BorderWidth ="1px"  BorderStyle ="None"  BorderColor ="#3366CC"
                                Width
="200px"  AutoGenerateColumns ="False" >
                                
< FooterStyle  ForeColor ="#003399"  BackColor ="#99CCCC" ></ FooterStyle >
                                
< SelectedItemStyle  Font-Bold ="True"  ForeColor ="#CCFF99"  BackColor ="#009999" ></ SelectedItemStyle >
                                
< ItemStyle  ForeColor ="#003399"  BackColor ="White" ></ ItemStyle >
                                
< HeaderStyle  Font-Bold ="True"  ForeColor ="#CCCCFF"  BackColor ="#003399" ></ HeaderStyle >
                                
< Columns >
                                    
< asp:TemplateColumn  HeaderText ="序号" >
                                        
< HeaderStyle  Width ="10px" ></ HeaderStyle >
                                        
< ItemTemplate >
                                            
<% # Container.ItemIndex+1  %>
                                        
</ ItemTemplate >
                                    
</ asp:TemplateColumn >
                                    
< asp:BoundColumn  Visible ="False"  DataField ="StudentID"  HeaderText ="StudentID" >
                                        
< HeaderStyle  Width ="0px" ></ HeaderStyle >
                                    
</ asp:BoundColumn >
                                    
< asp:TemplateColumn  HeaderText ="姓名" >
                                        
< HeaderStyle  Width ="30px" ></ HeaderStyle >
                                        
< ItemTemplate >
                                            
<% # DataBinder.Eval(Container.DataItem,"StudentName" %>
                                        
</ ItemTemplate >
                                        
< EditItemTemplate >
                                            
< asp:TextBox  id ="txtStudentName"  Runat ="server"  Text ='<%#  DataBinder.Eval(Container.DataItem,"StudentName") % > '>
                                            
</ asp:TextBox >
                                        
</ EditItemTemplate >
                                    
</ asp:TemplateColumn >
                                    
< asp:TemplateColumn  HeaderText ="年龄" >
                                        
< HeaderStyle  Width ="30px" ></ HeaderStyle >
                                        
< ItemTemplate >
                                            
<% # DataBinder.Eval(Container.DataItem,"Age" %>
                                        
</ ItemTemplate >
                                        
< EditItemTemplate >
                                            
< asp:TextBox  id ="txtAge"  Runat ="server"  Text ='<%#  DataBinder.Eval(Container.DataItem,"Age") % > '>
                                            
</ asp:TextBox >
                                        
</ EditItemTemplate >
                                    
</ asp:TemplateColumn >
                                    
< asp:TemplateColumn  HeaderText ="班级" >
                                        
< HeaderStyle  Width ="30px" ></ HeaderStyle >
                                        
< ItemTemplate >
                                            
<% # DataBinder.Eval(Container.DataItem,"ClassName" %>
                                        
</ ItemTemplate >
                                        
< EditItemTemplate >
                                            
< asp:DropDownList  id ="drpClass"  Runat ="server" >
                                                
< asp:ListItem  Value ="1" > 一班 </ asp:ListItem >
                                                
< asp:ListItem  Value ="2" > 二班 </ asp:ListItem >
                                                
< asp:ListItem  Value ="3" > 三班 </ asp:ListItem >
                                            
</ asp:DropDownList >
                                        
</ EditItemTemplate >
                                    
</ asp:TemplateColumn >
                                    
< asp:EditCommandColumn  ButtonType ="LinkButton"  UpdateText ="Update"  HeaderText ="Edit"  CancelText ="Cancel"
                                        EditText
="Edit" >
                                        
< HeaderStyle  Width ="20px" ></ HeaderStyle >
                                    
</ asp:EditCommandColumn >
                                    
< asp:ButtonColumn  Text ="Delete"  HeaderText ="Delete"  CommandName ="Delete" >
                                        
< HeaderStyle  Width ="20px" ></ HeaderStyle >
                                    
</ asp:ButtonColumn >
                                
</ Columns >
                                
< PagerStyle  HorizontalAlign ="Left"  ForeColor ="#003399"  BackColor ="#99CCCC"  Mode ="NumericPages" ></ PagerStyle >
                            
</ asp:DataGrid >
                        
</ ItemTemplate >
                        
< EditItemTemplate >
                            
< asp:TextBox  id =txtClassName  Runat ="server"  Text ='<%#  DataBinder.Eval(Container.DataItem,"ClassName") % > '>
                            
</ asp:TextBox >
                        
</ EditItemTemplate >
                    
</ asp:TemplateColumn >
                    
< asp:TemplateColumn  HeaderText ="备注" >
                        
< HeaderStyle  Width ="300px" ></ HeaderStyle >
                        
< ItemTemplate >
                            
<% # DataBinder.Eval(Container.DataItem,"Description" %>
                        
</ ItemTemplate >
                        
< EditItemTemplate >
                            
< asp:TextBox  id ="txtDescription"  Runat ="server"  Text ='<%#  DataBinder.Eval(Container.DataItem,"Description") % > '>
                            
</ asp:TextBox >
                        
</ EditItemTemplate >
                    
</ asp:TemplateColumn >
                    
< asp:EditCommandColumn  ButtonType ="LinkButton"  UpdateText ="Update"  HeaderText ="Edit"  CancelText ="Cancel"
                        EditText
="Edit" >
                        
< HeaderStyle  Width ="20px" ></ HeaderStyle >
                    
</ asp:EditCommandColumn >
                    
< asp:ButtonColumn  Text ="Delete"  HeaderText ="Delete"  CommandName ="Delete" >
                        
< HeaderStyle  Width ="20px" ></ HeaderStyle >
                    
</ asp:ButtonColumn >
                
</ Columns >
                
< PagerStyle  HorizontalAlign ="Center"  ForeColor ="#330099"  BackColor ="#FFFFCC" ></ PagerStyle >
            
</ asp:datagrid ></ form >
    
</ body >
</ HTML >

2.cs代码

public class DataGridNesting : System.Web.UI.Page
    
{
        
protected System.Web.UI.WebControls.DataGrid DataGrid1;
    
        
private void Page_Load(object sender, System.EventArgs e)
        
{
            
if(!Page.IsPostBack)
            
{
                BindDataGrid1();
            }

        }



        
#region Web Form Designer generated code
        
override protected void OnInit(EventArgs e)
        
{
            
//
            
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
            
//
            InitializeComponent();
            
base.OnInit(e);
            
this.DataGrid1.ItemCreated+=new DataGridItemEventHandler(DataGrid1_ItemCreated);
        }

        
        
/**//// <summary>
        
/// Required method for Designer support - do not modify
        
/// the contents of this method with the code editor.
        
/// </summary>

        private void InitializeComponent()
        
{    
            
this.DataGrid1.ItemDataBound += new System.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);
            
this.Load += new System.EventHandler(this.Page_Load);

        }

        
#endregion


        
#region GetDataSet
        
private DataSet GetDataSet(string sql)
        
{
            
string constring=System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
            SqlDataAdapter    sda 
=new SqlDataAdapter(sql,constring);
            DataSet ds
=new DataSet();
            sda.Fill(ds);
            
return ds;
        }

        
#endregion


        
#region BindDataGrid1
        
private void BindDataGrid1()
        
{
            
string sql="select * from Class";
            DataSet ds
=GetDataSet(sql);
            
this.DataGrid1.DataSource=ds;
            
this.DataGrid1.DataBind();
        }

        
#endregion


        
#region BindDataGrid2
        
private void BindDataGrid2(DataGrid grid2)
        
{
            
string sql="select s.ClassID,s.StudentID,s.StudentName,s.Age,c.ClassName from Student s left join Class c on s.ClassID=c.ClassID where s.ClassID='"+DataGrid1.DataKeys[Index].ToString()+"'";
            DataSet ds
=GetDataSet(sql);
            grid2.DataSource
=ds;
            grid2.DataBind();
        }

        
#endregion


        
#region DataGrid1_ItemDataBound
        
private void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)
        
{
            
if (e.Item.ItemType==ListItemType.Header)
             
{                
                e.Item.Cells[
0].ColumnSpan=2;//合并单元格
                e.Item.Cells[1].Visible=false;
             }

            
if (e.Item.ItemType==ListItemType.Item || e.Item.ItemType==ListItemType.AlternatingItem)
            
{                    
                System.Web.UI.WebControls.ImageButton image 
= (System.Web.UI.WebControls.ImageButton)e.Item.FindControl("ImageButton1");
                
string sql="select s.ClassID,s.StudentID,s.StudentName,s.Age,c.ClassName from Student s left join Class c on s.ClassID=c.ClassID where s.ClassID='"+this.DataGrid1.DataKeys[e.Item.ItemIndex].ToString()+"'";
                DataSet ds
=GetDataSet(sql);
                DataGrid grid
=(DataGrid)e.Item.FindControl("DataGrid2");
                grid.DataSource
=ds;
                grid.DataBind();
                grid.Style.Add(
"display","none");                
            }

        
        }

        
#endregion


        
#region Edit_Grid1
        
protected void Edit_Grid1(object sender,DataGridCommandEventArgs e)
        
{
            
this.DataGrid1.EditItemIndex=e.Item.ItemIndex;
            BindDataGrid1();
        }

        
#endregion


        
#region Cancel_Grid1
        
protected void Cancel_Grid1(object sender,DataGridCommandEventArgs e)
        
{
            
this.DataGrid1.EditItemIndex=-1;
            BindDataGrid1();
        }

        
#endregion


        
#region Update_Grid1
        
protected void Update_Grid1(object sender,DataGridCommandEventArgs e)
        
{
            
if(e.Item.ItemType==ListItemType.EditItem)
            
{
                SqlConnection conn
=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]);
                SqlCommand comm
=new SqlCommand("update Class set ClassName=@ClassName,Description=@Description where ClassID=@ClassID",conn);
                SqlParameter parm1
=new SqlParameter("@ClassName",SqlDbType.NVarChar,50);
                parm1.Value
=((TextBox)e.Item.FindControl("txtClassName")).Text;

                SqlParameter parm2
=new SqlParameter("@Description",SqlDbType.NVarChar,500);
                parm2.Value
=((TextBox)e.Item.FindControl("txtDescription")).Text;

                SqlParameter parm3
=new SqlParameter("@ClassID",SqlDbType.NVarChar,50);
                parm3.Value
=this.DataGrid1.DataKeys[e.Item.ItemIndex];

                comm.Parameters.Add(parm1);
                comm.Parameters.Add(parm2);
                comm.Parameters.Add(parm3);
            
                conn.Open();
                comm.ExecuteNonQuery();
                conn.Close();
                
this.DataGrid1.EditItemIndex=-1;
                BindDataGrid1();
            }

        }

        
#endregion


        
#region Delete_Grid1
        
protected void Delete_Grid1(object sender,DataGridCommandEventArgs e)
        
{
            deletegrid1(
this.DataGrid1.DataKeys[e.Item.ItemIndex].ToString());
        }

        
#endregion


        
#region deletegrid1
        
private void deletegrid1(string id)
        
{
            SqlConnection conn
=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]);
            SqlCommand comm
=new SqlCommand("delete from Class where ClassID=@ClassID",conn);
            SqlParameter parm1
=new SqlParameter("@ClassID",SqlDbType.NVarChar,50);
            parm1.Value
=id;
            comm.Parameters.Add(parm1);
            conn.Open();
            comm.ExecuteNonQuery();
            conn.Close();
            BindDataGrid1();
        }

        
#endregion


        
#region DataGrid1_ItemCreated
        
private void DataGrid1_ItemCreated(object sender, DataGridItemEventArgs e)
        
{
            
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem )
            
{
                DataGrid grid2 
= (DataGrid)e.Item.FindControl( "DataGrid2" );
                grid2.ItemDataBound 
+= new System.Web.UI.WebControls.DataGridItemEventHandler( this.grid2_ItemDataBound );
            }
            
        }

        
#endregion


        
#region grid2_ItemDataBound
        
protected void grid2_ItemDataBound(object sender, DataGridItemEventArgs e)
        
{
        }

        
#endregion


        
#region grid2_EditCommand
        
protected void grid2_EditCommand(object sender, DataGridCommandEventArgs e)
        
{
            DataGrid grid2 
= (DataGrid)sender;
            grid2.EditItemIndex 
= e.Item.ItemIndex;
            BindDataGrid2(grid2);
        }

        
#endregion


        
#region grid2_CancelCommand
        
protected void grid2_CancelCommand(object sender, DataGridCommandEventArgs e)
        
{
            DataGrid grid2 
= (DataGrid)sender;
            grid2.EditItemIndex 
=-1;
            BindDataGrid2(grid2);
        }

        
#endregion


        
#region grid2_UpdateCommand
        
protected void grid2_UpdateCommand(object sender, DataGridCommandEventArgs e)
        
{
            
if(e.Item.ItemType==ListItemType.EditItem)
            
{
                SqlConnection conn
=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]);
                SqlCommand comm
=new SqlCommand("update Student set StudentName=@StudentName,ClassID=@ClassID,Age=@Age where StudentID=@StudentID",conn);
                SqlParameter parm1
=new SqlParameter("@StudentName",SqlDbType.NVarChar,50);
                parm1.Value
=((TextBox)e.Item.FindControl("txtStudentName")).Text;

                SqlParameter parm2
=new SqlParameter("@ClassID",SqlDbType.NVarChar,500);
                parm2.Value
=((DropDownList)e.Item.FindControl("drpClass")).SelectedItem.Value;

                SqlParameter parm3
=new SqlParameter("@Age",SqlDbType.NVarChar,50);
                parm3.Value
=((TextBox)e.Item.FindControl("txtAge")).Text;

                SqlParameter parm4
=new SqlParameter("@StudentID",SqlDbType.NVarChar,50);
                parm4.Value
=this.DataGrid1.DataKeys[e.Item.ItemIndex];

                comm.Parameters.Add(parm1);
                comm.Parameters.Add(parm2);
                comm.Parameters.Add(parm3);
                comm.Parameters.Add(parm4);
            
                conn.Open();
                comm.ExecuteNonQuery();
                conn.Close();
                DataGrid grid2 
= (DataGrid)sender;
                grid2.EditItemIndex 
=-1;
                BindDataGrid2(grid2);
            }

        }

        
#endregion


        
#region grid2_DeleteCommand
        
protected void grid2_DeleteCommand(object sender, DataGridCommandEventArgs e)
        
{
            DataGrid grid2 
= (DataGrid)sender;
            DeleteGrid2(grid2.DataKeys[e.Item.ItemIndex].ToString());
            grid2.EditItemIndex 
=-1;
            BindDataGrid2(grid2);
        }


        
#endregion

        
        
#region DeleteGrid2
        
private void DeleteGrid2(string id)
        
{
            SqlConnection conn
=new SqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]);
            SqlCommand comm
=new SqlCommand("delete from Student where StudentID=@StudentID",conn);
            SqlParameter parm1
=new SqlParameter("@StudentID",SqlDbType.NVarChar,50);
            parm1.Value
=id;
            comm.Parameters.Add(parm1);
            conn.Open();
            comm.ExecuteNonQuery();
            conn.Close();
        }

        
#endregion


        
#region property
        
private int Index
        
{
            
get
            
{
                
if(ViewState["Index"]!=null && ViewState["Index"].ToString()!="")
                
{
                    
return Convert.ToInt32(ViewState["Index"]);
                }

                
else
                
{
                    
return -1;
                }

            }

            
set
            
{
                ViewState[
"Index"]=value;
            }

        }

        
#endregion


        
#region Item_Command
        
protected void Item_Command(object sender,DataGridCommandEventArgs e)
        
{
            Index
=e.Item.ItemIndex;
            System.Web.UI.WebControls.ImageButton image 
= (System.Web.UI.WebControls.ImageButton)e.Item.FindControl("ImageButton1");
            DataGrid grid
=(DataGrid)e.Item.FindControl("DataGrid2");
            
if(image.ImageUrl=="add.gif")
            
{
                image.ImageUrl
="sub.gif";
                grid.Style.Add(
"display","block");
            }

            
else
            
{
                image.ImageUrl
="add.gif";
                grid.Style.Add(
"display","none");
            }

        }

        
#endregion


    }

3.数据库脚本
if   exists  ( select   *   from  dbo.sysobjects  where  id  =   object_id (N ' [dbo].[Student] ' and   OBJECTPROPERTY (id, N ' IsUserTable ' =   1 )
drop   table   [ dbo ] . [ Student ]
GO

if   exists  ( select   *   from  dbo.sysobjects  where  id  =   object_id (N ' [dbo].[Class] ' and   OBJECTPROPERTY (id, N ' IsUserTable ' =   1 )
drop   table   [ dbo ] . [ Class ]
GO

CREATE   TABLE   [ dbo ] . [ Student ]  (
    
[ StudentID ]   [ varchar ]  ( 50 ) COLLATE Chinese_PRC_CI_AS  NOT   NULL  ,
    
[ StudentName ]   [ varchar ]  ( 50 ) COLLATE Chinese_PRC_CI_AS  NULL  ,
    
[ ClassID ]   [ varchar ]  ( 50 ) COLLATE Chinese_PRC_CI_AS  NULL  ,
    
[ Age ]   [ varchar ]  ( 50 ) COLLATE Chinese_PRC_CI_AS  NULL  
ON   [ PRIMARY ]
GO

CREATE   TABLE   [ dbo ] . [ Class ]  (
    
[ ClassID ]   [ varchar ]  ( 50 ) COLLATE Chinese_PRC_CI_AS  NOT   NULL  ,
    
[ ClassName ]   [ varchar ]  ( 50 ) COLLATE Chinese_PRC_CI_AS  NULL  ,
    
[ Description ]   [ varchar ]  ( 500 ) COLLATE Chinese_PRC_CI_AS  NULL  
ON   [ PRIMARY ]
GO
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值