GridView嵌套GridView,对子GridView及父GridView级联删除的问题
http://blog.youkuaiyun.com/amandag/archive/2007/05/31/1633395.aspx
利用GridView显示主细表并添加删除、打开、关闭功能(续)
http://dotnet.aspx.cc/article/f73eeaa9-2bdc-47fd-afd2-59f2fa4897f5/read.aspx
GridView的主从多级嵌套
http://hi.baidu.com/freezesoul/blog/item/4678e6dd90a0c6eb77c63867.html
< asp:GridView ID = " GridView1 " OnRowDataBound = " GridView1_RowDataBound " AutoGenerateColumns = false runat = " server " >
< Columns >
< asp:TemplateField >
< ItemTemplate >
<% #Container.DataItem.ToString() %>
<!-- 第二层GridView开始 -->
< asp:GridView ID = " GridView2 " OnRowDataBound = " GridView2_RowDataBound " AutoGenerateColumns = false runat = " server " >
< Columns >
< asp:TemplateField >
< ItemTemplate >
<% #Container.DataItem.ToString() %>
<!-- 第三层GridView开始 -->
< asp:GridView ID = " GridView3 " AutoGenerateColumns = false runat = server >
< Columns >
< asp:TemplateField >
< ItemTemplate >
<% #Container.DataItem.ToString() %>
</ ItemTemplate >
</ asp:TemplateField >
</ Columns >
</ asp:GridView >
<!-- 第三层GridView 结束 -->
</ ItemTemplate >
</ asp:TemplateField >
</ Columns >
</ asp:GridView >
<!-- 第二层GridView结束 -->
</ ItemTemplate >
</ asp:TemplateField >
</ Columns >
</ asp:GridView >
<!-- 第一层GridView结束 -->
++++++++++.cs代码++++++++++++++++
RowDataBound与1.x中的ItemDataBound也有一腿!
using System.Data;
using System.Configuration;
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.Collections;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load( object sender, EventArgs e)
{
this .GridView1.DataSource = Al( " GridView1Item: " );
this .GridView1.DataBind();
}
// DataSource
protected ArrayList Al( string GetStr)
{
ArrayList al = new ArrayList();
for ( int i = 0 ;i < 2 ;i ++ )
{
al.Add(GetStr + i.ToString());
}
return al;
}
// GridView1_RowDataBound
protected void GridView1_RowDataBound( object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
GridView gv = (GridView)e.Row.FindControl( " GridView2 " );
gv.DataSource = Al( " GridView2Item: " );
gv.DataBind();
}
}
// GridView2_RowDataBound
protected void GridView2_RowDataBound( object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
GridView gv = (GridView)e.Row.FindControl( " GridView3 " );
gv.DataSource = Al( " GridView3Item: " );
gv.DataBind();
}
}
}
// 绑定
public void bind()
{
string sqlstr = " select * from 表 " ;
sqlcon = new SqlConnection(strCon);
SqlDataAdapter myda = new SqlDataAdapter(sqlstr, sqlcon);
DataSet myds = new DataSet();
sqlcon.Open();
myda.Fill(myds, " 表 " );
GridView1.DataSource = myds;
GridView1.DataKeyNames = new string [] { " id " }; // 主键
GridView1.DataBind();
sqlcon.Close();
}
=========================================
我已经通过FindControl找到这个gridview,可是现在的问题是我要给这个gridview里帮定的数据源是个新的,和外面的gridview数据源不是同一个!下面是我的部分代码:
< asp:GridView ID = " GridView1 " runat = " server " AutoGenerateColumns = " False " OnRowDataBound = " GridView1_RowDataBound " >
< Columns >
< asp:BoundField DataField = " type " HeaderText = " type " />
< asp:TemplateField >
< ItemTemplate >
< asp:GridView ID = " GridView2 " runat = " server " AutoGenerateColumns = " False " EnableViewState = " False " >
< Columns >
< asp:BoundField DataField = " pub_id " HeaderText = " pub_id " />
</ Columns >
</ asp:GridView >
</ ItemTemplate >
</ asp:TemplateField >
</ Columns >
</ asp:GridView >
protected void GridView1_RowDataBound( object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Cells[ 1 ].FindControl( " GridView2 " );
}
}
可是在FindControl("GridView2")后只有一个DataBind()方法,并没有DataSource这个属性,要怎样才能给里面的那个GridView2指定一个新的数据源呢?
--------------------------------------------------------
GridView GRTemp=(GridView)e.Row.Cells[1].FindControl("GridView2");
GRTemp.DataSource=你的source;
GRTemp.DataBind();
========================================================================================
Repeater嵌套:
=======================================================================================
private void rptCategories_ItemDataBound( object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
BLL.Products products = new BLL.Products();
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Repeater rptProduct = (Repeater) e.Item.FindControl( " rptProduct " );
// 找到分类Repeater关联的数据项
DataRowView rowv = (DataRowView)e.Item.DataItem;
// 提取分类ID
int CategorieId = Convert.ToInt32(rowv[ " ID " ]);
// 根据分类ID查询该分类下的产品,并绑定产品Repeater
rptProduct.DataSource = products.GetProductsByCategorieId(CategorieId);
rptProduct.DataBind();
}
}
=========================================================================================
gridView嵌套:
========================================================================================
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DataRowView rowv = (DataRowView)e.Row.DataItem;
Label lblCareer = (Label)e.Row.FindControl( " lblCareer " );
string tmp_myCareer = rowv[ " mycareer " ].ToString().Trim();
}
}