有網友在論壇上詢問:如何在使用GridView顯示主細表時添加刪除功能?其實,如果單個GridView能夠實現刪除對話,N個GridView嵌套也沒有任何問題。下面就將例子粘貼如下,望各位需要的朋友仔細揣摩一下,道理很簡單的:)

查看例子

aspx?:

<% @?Page?Language = " C# " ?AutoEventWireup = " true " ?CodeFile = " Default2.aspx.cs " ?Inherits = " Default2 " ? %>

<! 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? id ="Head1" ?runat ="server" >
??
< title > 利用GridView顯示主細表并添加打開、關閉功能 </ title >
??
< style? type ="text/css" >
??td,div,a?
{ font-size : 12px }
??
</ style >

??
< script? type ="text/javascript" >
??
// <![CDATA[
?? function ?ShowHidden(sid,ev)
??{
????ev?
= ?ev? || ?window.event;
????
var ?target? = ?ev.target? || ?ev.srcElement;
????
var ?oDiv? = ?document.getElementById( " div " ? + ?sid);
????oDiv.style.display?
= ?oDiv.style.display? == ? " none " ? " block " : " none " ;
????target.innerHTML?
= ?oDiv.style.display? == ? " none " ? " 顯示 " : " 隱藏 " ;
??}
??
// ]]>
?? </ script >

</ head >
< body >
??
< form? id ="form1" ?runat ="server" >
????
< asp:GridView? ID ="MasterGridView" ?runat ="server" ?AutoGenerateColumns ="false" ?Width ="780px"
??????BorderWidth
="1" ?OnRowDataBound ="MasterGridView_RowDataBound" ?DataKeyNames ="id"
??????ShowHeader
="false" >
??????
< Columns >
????????
< asp:TemplateField >
??????????
< ItemTemplate >
????????????
< div? style ="width:?100%;?padding:?2px;?font-weight:?bold;?background-color:?#DEDEDE;
??????????????float:?left"
>
??????????????
< span? style ="float:?left" > 欄目名稱: <% # Eval ( " Title " )? %> </ span >< span? style ="float:?right;
????????????????color:?Red;?cursor:?pointer"
?onclick ="ShowHidden('<%#Eval(" id")?% > ',event)">隱藏 </ span ></ div >
????????????
< div? style ="background-color:?#FFF;?padding-left:?60px;?clear:?both" ?id ="div<%#Eval(" id")?% > ">
??????????????
< asp:GridView? ID ="DetailGridView" ?runat ="server" ?AutoGenerateColumns ="false" ?ShowHeader ="true"
????????????????HorizontalAlign
="left" ?DataKeyNames ="id" ?AutoGenerateDeleteButton ="true" ?OnRowCommand ="DetailGridView_RowCommand"
????????????????OnRowDeleting
="DetailGridView_RowDeleting" ?Width ="720px" >
????????????????
< HeaderStyle? BackColor ="#9999FF" ? />
????????????????
< Columns >
??????????????????
< asp:TemplateField? HeaderText ="文章名稱" ?HeaderStyle-Width ="540px" >
????????????????????
< ItemTemplate >
??????????????????????
< a? href ="/article/<%#Eval(" objectGuid")?% > /read.aspx">
????????????????????????
<% # Eval ( " Title " )? %>
??????????????????????
</ a > [ <% #? Eval ( " HitCount " )? %> ]
????????????????????
</ ItemTemplate >
??????????????????
</ asp:TemplateField >
??????????????????
< asp:BoundField? HeaderText ="發布日期" ?DataField ="CreateDate" ?HtmlEncode ="false" ?DataFormatString ="{0:yyyy年MM月dd日}"
????????????????????HeaderStyle-Width
="100px" ?ItemStyle-HorizontalAlign ="Center" ? />
??????????????????
< asp:CommandField? DeleteText ="刪除" ?ShowDeleteButton ="true" ?ButtonType ="Button" ?HeaderStyle-Width ="40px" ? />
????????????????
</ Columns >
??????????????
</ asp:GridView >
????????????
</ div >
??????????
</ ItemTemplate >
????????
</ asp:TemplateField >
??????
</ Columns >
????
</ asp:GridView >
??
</ form >
</ body >
</ html >

?

C#:

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.Data.OleDb;
using ?System.Web.UI.HtmlControls;

public ? partial ? class ?Default2?:?System.Web.UI.Page
{
??
string ?ConnectionString? = ? @" Provider=Microsoft.Jet.OLEDB.4.0;Data?Source=|DataDirectory|aspxWeb.mdb;Persist?Security?Info=True " ;
??OleDbConnection?cn1;


??
protected ? void ?Page_Load(? object ?sender,?EventArgs?e?)
??{
????
if ?( ! Page.IsPostBack)
????{
??????OleDbConnection?cn?
= ? new ?OleDbConnection(ConnectionString);
??????cn.Open();
??????cn1?
= ? new ?OleDbConnection(ConnectionString);
??????cn1.Open();
??????OleDbCommand?cmd?
= ? new ?OleDbCommand( " select?*?from?[Subject] " ,?cn);
??????OleDbDataReader?dr?
= ?cmd.ExecuteReader(CommandBehavior.CloseConnection);
??????MasterGridView.DataSource?
= ?dr;
??????MasterGridView.DataBind();
??????dr.Close();
??????cmd.Dispose();
??????cn.Dispose();
??????cn1.Dispose();
??????cn?
= ?cn1? = ? null ;
????}
??}
??
protected ? void ?MasterGridView_RowDataBound(? object ?sender,?GridViewRowEventArgs?e?)
??{
????
if ?(e.Row.RowType? == ?DataControlRowType.DataRow)
????{

??????GridView?oGridView?
= ?(GridView)e.Row.FindControl( " DetailGridView " );
??????
if ?(oGridView? != ? null )
??????{
????????OleDbCommand?cmd?
= ? new ?OleDbCommand( " select?top?10?*?from?Document?Where?pid?=? " ? + ?MasterGridView.DataKeys[e.Row.RowIndex].Value,?cn1);
????????OleDbDataReader?dr1?
= ?cmd.ExecuteReader();
????????oGridView.DataSource?
= ?dr1;
????????oGridView.DataBind();
????????dr1.Close();
????????cmd.Dispose();
??????}
????}
??}

??
protected ? void ?DetailGridView_RowDeleting(? object ?sender,?GridViewDeleteEventArgs?e?)
??{
????GridView?a?
= ?(GridView)sender;
????Response.Write(
" 您要刪除的記錄是:<font?color='red'> " ? + ?a.DataKeys[e.RowIndex].Value.ToString()? + ? " </font>&nbsp;&nbsp;&nbsp;&nbsp;TODO:執行刪除動作 " );
????
// ?TODO:執行刪除動作
??}
??
protected ? void ?DetailGridView_RowCommand(? object ?sender,?GridViewCommandEventArgs?e?)
??{

??}
}

注意:EnableViewState="true" 是必須的。