有網友在論壇上詢問:如何在使用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 >
<! 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> TODO:執行刪除動作 " );
???? // ?TODO:執行刪除動作
??}
?? protected ? void ?DetailGridView_RowCommand(? object ?sender,?GridViewCommandEventArgs?e?)
??{
??}
}
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> TODO:執行刪除動作 " );
???? // ?TODO:執行刪除動作
??}
?? protected ? void ?DetailGridView_RowCommand(? object ?sender,?GridViewCommandEventArgs?e?)
??{
??}
}
注意:EnableViewState="true" 是必須的。