您的位置:首页 > 编程语言

GridView嵌套GridView 级联删除(1.纯代码删除版本)

2007-05-31 21:23 281 查看
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>

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();
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐