GridView嵌套GridView,对子GridView及父GridView级联删除的问题
本例未考虑异常处理,提示信息及事务处理,有兴趣的朋友可自己添加修改
aspx
- <%@ Page Language="C#" AutoEventWireup="true" CodeFile="GridViewNesting.aspx.cs" Inherits="GridViewNesting" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" >
- <head runat="server">
- <title>GridViewNesting</title>
- </head>
- <body>
- <form id="form1" runat="server">
- <div>
- <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="au_id" OnRowDeleting="GridView1_RowDeleting" >
- <Columns>
- <asp:CommandField ShowEditButton="True" />
- <asp:CommandField ShowDeleteButton="True" />
- <asp:TemplateField HeaderText="au_id" >
- <ItemTemplate>
- <asp:Label id="Label1" runat="server" Text='<%# Eval("au_id")%>'></asp:Label>
- </ItemTemplate>
- </asp:TemplateField>
- <asp:TemplateField HeaderText="au_lname">
- <ItemTemplate>
- <asp:Label id="Label2" runat="server" Text='<%# Eval("au_lname")%>'></asp:Label>
- </ItemTemplate>
- </asp:TemplateField>
- <asp:TemplateField HeaderText="titleDetail">
- <ItemTemplate>
- <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" DataKeyNames="au_id,title_id" DataSource='<%# GetTitleID(Eval("au_id").ToString()) %>' OnRowDeleting="GridView2_OnRowDeleting">
- <Columns>
- <asp:CommandField ShowEditButton="True" />
- <asp:CommandField ShowDeleteButton="True" />
- <asp:TemplateField HeaderText="title_id" >
- <ItemTemplate>
- <asp:Label id="Label1" runat="server" Text='<%# Eval("title_id")%>'></asp:Label>
- </ItemTemplate>
- </asp:TemplateField>
- <asp:TemplateField HeaderText="au_ord">
- <ItemTemplate>
- <asp:Label id="Label2" runat="server" Text='<%# Eval("au_ord")%>'></asp:Label>
- </ItemTemplate>
- </asp:TemplateField>
- </Columns>
- </asp:GridView>
- </ItemTemplate>
- </asp:TemplateField>
- </Columns>
- </asp:GridView>
- </div>
- </form>
- </body>
- </html>
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="GridViewNesting.aspx.cs" Inherits="GridViewNesting" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>GridViewNesting</title> </head> <body> <form id="form1" runat="server"> <div> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="au_id" OnRowDeleting="GridView1_RowDeleting" > <Columns> <asp:CommandField ShowEditButton="True" /> <asp:CommandField ShowDeleteButton="True" /> <asp:TemplateField HeaderText="au_id" > <ItemTemplate> <asp:Label id="Label1" runat="server" Text='<%# Eval("au_id")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="au_lname"> <ItemTemplate> <asp:Label id="Label2" runat="server" Text='<%# Eval("au_lname")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="titleDetail"> <ItemTemplate> <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" DataKeyNames="au_id,title_id" DataSource='<%# GetTitleID(Eval("au_id").ToString()) %>' OnRowDeleting="GridView2_OnRowDeleting"> <Columns> <asp:CommandField ShowEditButton="True" /> <asp:CommandField ShowDeleteButton="True" /> <asp:TemplateField HeaderText="title_id" > <ItemTemplate> <asp:Label id="Label1" runat="server" Text='<%# Eval("title_id")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText="au_ord"> <ItemTemplate> <asp:Label id="Label2" runat="server" Text='<%# Eval("au_ord")%>'></asp:Label> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </div> </form> </body> </html>
aspx.cs
- using System;
- using System.Data;
- using System.Configuration;
- using System.Collections;
- using System.Web;
- using System.Web.Security;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.Web.UI.WebControls.WebParts;
- using System.Web.UI.HtmlControls;
- using System.Data.SqlClient;
- public partial class GridViewNesting : System.Web.UI.Page
- {
- private void BindGrid()
- {
- SqlConnection cn = new SqlConnection(@"server=./SQLExpress;uid=sa;pwd=;database=pubs");
- SqlDataAdapter da = new SqlDataAdapter("select au_id, au_lname from authors", cn);
- DataSet ds = new DataSet();
- cn.Open();
- da.Fill(ds);
- cn.Close();
- GridView1.DataSource = ds;
- GridView1.DataBind();
- }
- public DataView GetTitleID(string au_id)
- {
- SqlConnection cn = new SqlConnection(@"server=./SQLExpress;uid=sa;pwd=;database=pubs");
- SqlDataAdapter da = new SqlDataAdapter("select au_id, title_id, au_ord from titleauthor where au_id = @au_id", cn);
- da.SelectCommand.Parameters.AddWithValue("@au_id", au_id);
- DataSet ds = new DataSet();
- cn.Open();
- da.Fill(ds);
- cn.Close();
- return ds.Tables[0].DefaultView;
- }
- private void Page_Load(object sender, System.EventArgs e)
- {
- if (!IsPostBack)
- {
- BindGrid();
- }
- }
- protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
- {
- //此段实际应用应考虑事务处理
- SqlConnection cn = new SqlConnection(@"server=./SQLExpress;uid=sa;pwd=;database=pubs");
- SqlCommand cmd = new SqlCommand();
- cmd.CommandText = "delete from titleauthor where au_id = @au_id";
- cmd.Connection = cn;
- cmd.Parameters.AddWithValue("@au_id", GridView1.DataKeys[e.RowIndex].Value);
- cn.Open();
- cmd.ExecuteNonQuery();
- cmd.CommandText = "delete from authors where au_id = @au_id";
- cmd.ExecuteNonQuery();
- cn.Close();
- BindGrid();
- }
- protected void GridView2_OnRowDeleting(object sender, GridViewDeleteEventArgs e)
- {
- GridView GridView2 = sender as GridView;
- SqlConnection cn = new SqlConnection(@"server=./SQLExpress;uid=sa;pwd=;database=pubs");
- SqlCommand cmd = new SqlCommand("delete from titleauthor where au_id = @au_id and title_id = @title_id", cn);
- cmd.Parameters.AddWithValue("@au_id", GridView2.DataKeys[e.RowIndex].Values[0]);
- cmd.Parameters.AddWithValue("@title_id", GridView2.DataKeys[e.RowIndex].Values[1]);
- cn.Open();
- cmd.ExecuteNonQuery();
- cn.Close();
- BindGrid();
- }
- }