DataGrid嵌套DataGrid

本文详细介绍了如何在ASP.NET中实现数据网格的嵌套,并提供了代码示例及数据库交互逻辑,包括数据绑定、编辑、更新和删除操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.html代码
<HTML>
<HEAD>
<title>DataGridNesting</title>
<metacontent="MicrosoftVisualStudio.NET7.1"name="GENERATOR">
<metacontent="C#"name="CODE_LANGUAGE">
<metacontent="JavaScript"name="vs_defaultClientScript">
<metacontent="http://schemas.microsoft.com/intellisense/ie5"name="vs_targetSchema">
</HEAD>
<bodyMS_POSITIONING="GridLayout">
<formid="Form1"method="post"runat="server">
<asp:datagridid="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">
<FooterStyleForeColor="#330099"BackColor="#FFFFCC"></FooterStyle>
<SelectedItemStyleFont-Bold="True"ForeColor="#663399"BackColor="#FFCC66"></SelectedItemStyle>
<ItemStyleForeColor="#330099"BackColor="White"></ItemStyle>
<HeaderStyleFont-Bold="True"ForeColor="#FFFFCC"BackColor="#990000"></HeaderStyle>
<Columns>
<asp:TemplateColumnHeaderText="序号">
<HeaderStyleWidth="10px"></HeaderStyle>
<ItemTemplate>
<%#Container.ItemIndex+1%>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumnHeaderText="序号">
<HeaderStyleWidth="10px"></HeaderStyle>
<ItemTemplate>
<asp:ImageButtonid="ImageButton1"runat="server"ImageUrl="add.gif"></asp:ImageButton>
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumnVisible="False"DataField="ClassID"HeaderText="ClassID">
<HeaderStyleWidth="0px"></HeaderStyle>
</asp:BoundColumn>
<asp:TemplateColumnHeaderText="班级">
<HeaderStyleWidth="300pt"></HeaderStyle>
<ItemTemplate>
<%#DataBinder.Eval(Container.DataItem,"ClassName")%>
<asp:DataGridid="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">
<FooterStyleForeColor="#003399"BackColor="#99CCCC"></FooterStyle>
<SelectedItemStyleFont-Bold="True"ForeColor="#CCFF99"BackColor="#009999"></SelectedItemStyle>
<ItemStyleForeColor="#003399"BackColor="White"></ItemStyle>
<HeaderStyleFont-Bold="True"ForeColor="#CCCCFF"BackColor="#003399"></HeaderStyle>
<Columns>
<asp:TemplateColumnHeaderText="序号">
<HeaderStyleWidth="10px"></HeaderStyle>
<ItemTemplate>
<%#Container.ItemIndex+1%>
</ItemTemplate>
</asp:TemplateColumn>
<asp:BoundColumnVisible="False"DataField="StudentID"HeaderText="StudentID">
<HeaderStyleWidth="0px"></HeaderStyle>
</asp:BoundColumn>
<asp:TemplateColumnHeaderText="姓名">
<HeaderStyleWidth="30px"></HeaderStyle>
<ItemTemplate>
<%#DataBinder.Eval(Container.DataItem,"StudentName")%>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBoxid="txtStudentName"Runat="server"Text='<%#DataBinder.Eval(Container.DataItem,"StudentName")%>'>
</asp:TextBox>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumnHeaderText="年龄">
<HeaderStyleWidth="30px"></HeaderStyle>
<ItemTemplate>
<%#DataBinder.Eval(Container.DataItem,"Age")%>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBoxid="txtAge"Runat="server"Text='<%#DataBinder.Eval(Container.DataItem,"Age")%>'>
</asp:TextBox>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumnHeaderText="班级">
<HeaderStyleWidth="30px"></HeaderStyle>
<ItemTemplate>
<%#DataBinder.Eval(Container.DataItem,"ClassName")%>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownListid="drpClass"Runat="server">
<asp:ListItemValue="1">一班</asp:ListItem>
<asp:ListItemValue="2">二班</asp:ListItem>
<asp:ListItemValue="3">三班</asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:EditCommandColumnButtonType="LinkButton"UpdateText="Update"HeaderText="Edit"CancelText="Cancel"
EditText
="Edit">
<HeaderStyleWidth="20px"></HeaderStyle>
</asp:EditCommandColumn>
<asp:ButtonColumnText="Delete"HeaderText="Delete"CommandName="Delete">
<HeaderStyleWidth="20px"></HeaderStyle>
</asp:ButtonColumn>
</Columns>
<PagerStyleHorizontalAlign="Left"ForeColor="#003399"BackColor="#99CCCC"Mode="NumericPages"></PagerStyle>
</asp:DataGrid>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBoxid=txtClassNameRunat="server"Text='<%#DataBinder.Eval(Container.DataItem,"ClassName")%>'>
</asp:TextBox>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumnHeaderText="备注">
<HeaderStyleWidth="300px"></HeaderStyle>
<ItemTemplate>
<%#DataBinder.Eval(Container.DataItem,"Description")%>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBoxid="txtDescription"Runat="server"Text='<%#DataBinder.Eval(Container.DataItem,"Description")%>'>
</asp:TextBox>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:EditCommandColumnButtonType="LinkButton"UpdateText="Update"HeaderText="Edit"CancelText="Cancel"
EditText
="Edit">
<HeaderStyleWidth="20px"></HeaderStyle>
</asp:EditCommandColumn>
<asp:ButtonColumnText="Delete"HeaderText="Delete"CommandName="Delete">
<HeaderStyleWidth="20px"></HeaderStyle>
</asp:ButtonColumn>
</Columns>
<PagerStyleHorizontalAlign="Center"ForeColor="#330099"BackColor="#FFFFCC"></PagerStyle>
</asp:datagrid></form>
</body>
</HTML>

2.cs代码

publicclassDataGridNesting:System.Web.UI.Page
{
protectedSystem.Web.UI.WebControls.DataGridDataGrid1;

privatevoidPage_Load(objectsender,System.EventArgse)
{
if(!Page.IsPostBack)
{
BindDataGrid1();
}

}



#regionWebFormDesignergeneratedcode
overrideprotectedvoidOnInit(EventArgse)
{
//
//CODEGEN:ThiscallisrequiredbytheASP.NETWebFormDesigner.
//
InitializeComponent();
base.OnInit(e);
this.DataGrid1.ItemCreated+=newDataGridItemEventHandler(DataGrid1_ItemCreated);
}


/**////<summary>
///RequiredmethodforDesignersupport-donotmodify
///thecontentsofthismethodwiththecodeeditor.
///</summary>

privatevoidInitializeComponent()
{
this.DataGrid1.ItemDataBound+=newSystem.Web.UI.WebControls.DataGridItemEventHandler(this.DataGrid1_ItemDataBound);
this.Load+=newSystem.EventHandler(this.Page_Load);

}

#endregion


#regionGetDataSet
privateDataSetGetDataSet(stringsql)
{
stringconstring=System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"];
SqlDataAdaptersda
=newSqlDataAdapter(sql,constring);
DataSetds
=newDataSet();
sda.Fill(ds);
returnds;
}

#endregion


#regionBindDataGrid1
privatevoidBindDataGrid1()
{
stringsql="select*fromClass";
DataSetds
=GetDataSet(sql);
this.DataGrid1.DataSource=ds;
this.DataGrid1.DataBind();
}

#endregion


#regionBindDataGrid2
privatevoidBindDataGrid2(DataGridgrid2)
{
stringsql="selects.ClassID,s.StudentID,s.StudentName,s.Age,c.ClassNamefromStudentsleftjoinClasscons.ClassID=c.ClassIDwheres.ClassID='"+DataGrid1.DataKeys[Index].ToString()+"'";
DataSetds
=GetDataSet(sql);
grid2.DataSource
=ds;
grid2.DataBind();
}

#endregion


#regionDataGrid1_ItemDataBound
privatevoidDataGrid1_ItemDataBound(objectsender,DataGridItemEventArgse)
{
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.ImageButtonimage
=(System.Web.UI.WebControls.ImageButton)e.Item.FindControl("ImageButton1");
stringsql="selects.ClassID,s.StudentID,s.StudentName,s.Age,c.ClassNamefromStudentsleftjoinClasscons.ClassID=c.ClassIDwheres.ClassID='"+this.DataGrid1.DataKeys[e.Item.ItemIndex].ToString()+"'";
DataSetds
=GetDataSet(sql);
DataGridgrid
=(DataGrid)e.Item.FindControl("DataGrid2");
grid.DataSource
=ds;
grid.DataBind();
grid.Style.Add(
"display","none");
}


}

#endregion


#regionEdit_Grid1
protectedvoidEdit_Grid1(objectsender,DataGridCommandEventArgse)
{
this.DataGrid1.EditItemIndex=e.Item.ItemIndex;
BindDataGrid1();
}

#endregion


#regionCancel_Grid1
protectedvoidCancel_Grid1(objectsender,DataGridCommandEventArgse)
{
this.DataGrid1.EditItemIndex=-1;
BindDataGrid1();
}

#endregion


#regionUpdate_Grid1
protectedvoidUpdate_Grid1(objectsender,DataGridCommandEventArgse)
{
if(e.Item.ItemType==ListItemType.EditItem)
{
SqlConnectionconn
=newSqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]);
SqlCommandcomm
=newSqlCommand("updateClasssetClassName=@ClassName,Description=@DescriptionwhereClassID=@ClassID",conn);
SqlParameterparm1
=newSqlParameter("@ClassName",SqlDbType.NVarChar,50);
parm1.Value
=((TextBox)e.Item.FindControl("txtClassName")).Text;

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

SqlParameterparm3
=newSqlParameter("@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


#regionDelete_Grid1
protectedvoidDelete_Grid1(objectsender,DataGridCommandEventArgse)
{
deletegrid1(
this.DataGrid1.DataKeys[e.Item.ItemIndex].ToString());
}

#endregion


#regiondeletegrid1
privatevoiddeletegrid1(stringid)
{
SqlConnectionconn
=newSqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]);
SqlCommandcomm
=newSqlCommand("deletefromClasswhereClassID=@ClassID",conn);
SqlParameterparm1
=newSqlParameter("@ClassID",SqlDbType.NVarChar,50);
parm1.Value
=id;
comm.Parameters.Add(parm1);
conn.Open();
comm.ExecuteNonQuery();
conn.Close();
BindDataGrid1();
}

#endregion


#regionDataGrid1_ItemCreated
privatevoidDataGrid1_ItemCreated(objectsender,DataGridItemEventArgse)
{
if(e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem)
{
DataGridgrid2
=(DataGrid)e.Item.FindControl("DataGrid2");
grid2.ItemDataBound
+=newSystem.Web.UI.WebControls.DataGridItemEventHandler(this.grid2_ItemDataBound);
}

}

#endregion


#regiongrid2_ItemDataBound
protectedvoidgrid2_ItemDataBound(objectsender,DataGridItemEventArgse)
{
}

#endregion


#regiongrid2_EditCommand
protectedvoidgrid2_EditCommand(objectsender,DataGridCommandEventArgse)
{
DataGridgrid2
=(DataGrid)sender;
grid2.EditItemIndex
=e.Item.ItemIndex;
BindDataGrid2(grid2);
}

#endregion


#regiongrid2_CancelCommand
protectedvoidgrid2_CancelCommand(objectsender,DataGridCommandEventArgse)
{
DataGridgrid2
=(DataGrid)sender;
grid2.EditItemIndex
=-1;
BindDataGrid2(grid2);
}

#endregion


#regiongrid2_UpdateCommand
protectedvoidgrid2_UpdateCommand(objectsender,DataGridCommandEventArgse)
{
if(e.Item.ItemType==ListItemType.EditItem)
{
SqlConnectionconn
=newSqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]);
SqlCommandcomm
=newSqlCommand("updateStudentsetStudentName=@StudentName,ClassID=@ClassID,Age=@AgewhereStudentID=@StudentID",conn);
SqlParameterparm1
=newSqlParameter("@StudentName",SqlDbType.NVarChar,50);
parm1.Value
=((TextBox)e.Item.FindControl("txtStudentName")).Text;

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

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

SqlParameterparm4
=newSqlParameter("@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();
DataGridgrid2
=(DataGrid)sender;
grid2.EditItemIndex
=-1;
BindDataGrid2(grid2);
}

}

#endregion


#regiongrid2_DeleteCommand
protectedvoidgrid2_DeleteCommand(objectsender,DataGridCommandEventArgse)
{
DataGridgrid2
=(DataGrid)sender;
DeleteGrid2(grid2.DataKeys[e.Item.ItemIndex].ToString());
grid2.EditItemIndex
=-1;
BindDataGrid2(grid2);
}


#endregion


#regionDeleteGrid2
privatevoidDeleteGrid2(stringid)
{
SqlConnectionconn
=newSqlConnection(System.Configuration.ConfigurationSettings.AppSettings["ConnectionString"]);
SqlCommandcomm
=newSqlCommand("deletefromStudentwhereStudentID=@StudentID",conn);
SqlParameterparm1
=newSqlParameter("@StudentID",SqlDbType.NVarChar,50);
parm1.Value
=id;
comm.Parameters.Add(parm1);
conn.Open();
comm.ExecuteNonQuery();
conn.Close();
}

#endregion


#regionproperty
privateintIndex
{
get
{
if(ViewState["Index"]!=null&&ViewState["Index"].ToString()!="")
{
returnConvert.ToInt32(ViewState["Index"]);
}

else
{
return-1;
}

}

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

}

#endregion


#regionItem_Command
protectedvoidItem_Command(objectsender,DataGridCommandEventArgse)
{
Index
=e.Item.ItemIndex;
System.Web.UI.WebControls.ImageButtonimage
=(System.Web.UI.WebControls.ImageButton)e.Item.FindControl("ImageButton1");
DataGridgrid
=(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.数据库脚本
ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[Student]')andOBJECTPROPERTY(id,N'IsUserTable')=1)
droptable[dbo].[Student]
GO

ifexists(select*fromdbo.sysobjectswhereid=object_id(N'[dbo].[Class]')andOBJECTPROPERTY(id,N'IsUserTable')=1)
droptable[dbo].[Class]
GO

CREATETABLE[dbo].[Student](
[StudentID][varchar](50)COLLATEChinese_PRC_CI_ASNOTNULL,
[StudentName][varchar](50)COLLATEChinese_PRC_CI_ASNULL,
[ClassID][varchar](50)COLLATEChinese_PRC_CI_ASNULL,
[Age][varchar](50)COLLATEChinese_PRC_CI_ASNULL
)
ON[PRIMARY]
GO

CREATETABLE[dbo].[Class](
[ClassID][varchar](50)COLLATEChinese_PRC_CI_ASNOTNULL,
[ClassName][varchar](50)COLLATEChinese_PRC_CI_ASNULL,
[Description][varchar](500)COLLATEChinese_PRC_CI_ASNULL
)
ON[PRIMARY]
GO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值