小弟最近在做GridView嵌套,当执行到嵌套的GridView的时候老是报错 “GridView”并不包含“DataSource”的定义
以下是我的代码,请高手指教一下GridView.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="GridView.aspx.cs" Inherits="GridView" %><!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>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowDataBound="GridView1_RowDataBound">
<FooterStyle BackColor="#FFFFCC" ForeColor="#330099" />
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:GridView ID="GridView2" runat="server"></asp:GridView>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</form>
</body>
</html>GridView.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.OleDb;public partial class GridView : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataBindToGridView();
}
}
//显示数据
private void DataBindToGridView()
{
OleDbConnection con = DB.createConnection();
OleDbDataAdapter da = new OleDbDataAdapter("select * from person order by pid", con);
DataSet ds = new DataSet();
da.Fill(ds, "person");
this.GridView1.DataSource = ds.Tables[0].DefaultView;
this.GridView1.DataBind();
con.Close();
}
//执行数据绑定
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
GridView gv=(GridView)(e.Row.FindControl("GridView2"));
OleDbConnection con = DB.createConnection();
OleDbDataAdapter da = new OleDbDataAdapter("select * from person'", con);
DataSet ds = new DataSet();
da.Fill(ds, "person");
gv.DataSource = ds.Tables[0].DefaultView;
gv.DataBind();
con.Close();
}
}
}
以下是我的代码,请高手指教一下GridView.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="GridView.aspx.cs" Inherits="GridView" %><!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>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowDataBound="GridView1_RowDataBound">
<FooterStyle BackColor="#FFFFCC" ForeColor="#330099" />
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:GridView ID="GridView2" runat="server"></asp:GridView>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</form>
</body>
</html>GridView.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.OleDb;public partial class GridView : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataBindToGridView();
}
}
//显示数据
private void DataBindToGridView()
{
OleDbConnection con = DB.createConnection();
OleDbDataAdapter da = new OleDbDataAdapter("select * from person order by pid", con);
DataSet ds = new DataSet();
da.Fill(ds, "person");
this.GridView1.DataSource = ds.Tables[0].DefaultView;
this.GridView1.DataBind();
con.Close();
}
//执行数据绑定
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
GridView gv=(GridView)(e.Row.FindControl("GridView2"));
OleDbConnection con = DB.createConnection();
OleDbDataAdapter da = new OleDbDataAdapter("select * from person'", con);
DataSet ds = new DataSet();
da.Fill(ds, "person");
gv.DataSource = ds.Tables[0].DefaultView;
gv.DataBind();
con.Close();
}
}
}
protected void GridView2_DataBound(object sender, EventArgs e)
{
foreach (GridViewRow gv in HappyGridView2.Rows)
{
GridView dataList = (GridView)gv.FindControl("GridView2");
OleDbConnection con = DB.createConnection();
OleDbDataAdapter da = new OleDbDataAdapter( "select * from person ' ", con);
DataSet ds = new DataSet();
da.Fill(ds,"person");
gv.DataSource = ds.Tables["person"].DefaultView;
gv.DataBind();
con.Close();
} }
<asp:DataList id="DataListOne" runat="server" RepeatColumns="2" class="tblsort">
<ItemTemplate>
<TABLE>
<TR>
<TD class="H"><A href="#"><%#DataBinder.Eval(Container.DataItem,"name")%></A></TD>
</TR>
</TABLE>
<asp:DataList id="DataListTwo" runat="server" RepeatColumns="5">
<ItemTemplate>
<A href="#"><%# DataBinder.Eval(Container.DataItem,"name") %></A>
</ItemTemplate>
</asp:DataList>
</ItemTemplate>
</asp:DataList>private void DataListOne_ItemDataBound(object sender, System.Web.UI.WebControls.DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
DataList DataListTwo = (DataList)e.Item.FindControl("DataListTwo");
DataRowView rowv = (DataRowView)e.Item.DataItem;
string name =rowv["name"].ToString();
DataSet ds = dAOWeb_Subject.GetSubjectByName(name);
if(ds.Tables[0].Rows.Count>0)
{
DataListTwo.DataSource=ds;
DataListTwo.DataBind();
}
}
}
且事件要写在rowdatabound里面
if(e.Row.RowType=DataControlRowType.DataRow&&e.Row.RowState!=DataControlRowState.Edit)
{
GridView g=e.Row.FindControl("GridViewID") as GridView;
if(g!=null)
{
//doing something....
}
}
且事件要写在rowdatabound里面
if(e.Row.RowType=DataControlRowType.DataRow&&e.Row.RowState!=DataControlRowState.Edit)
{
GridView g=e.Row.FindControl( "GridViewID ") as GridView;
if(g!=null)
{
//doing something....
}
}
GridView”并不包含“DataSource”的定义
你的前台代码里,没看到你对GRIDVIEW1,和GRIDVIEW2指定DATANAMES,先加上,然后再试试,应该没有别的什么错了
GridView.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="GridView.aspx.cs" Inherits="GridView" %><!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>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" ShowHeader="False" BackColor="Black" CellPadding="1" CellSpacing="5" GridLines="None">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:GridView ID="GridView2" runat="server" ShowHeader="False" DataSource='<%#BindGridView2(Eval("pid").ToString())%>'>
</asp:GridView>
</ItemTemplate>
<ItemStyle BackColor="White" />
</asp:TemplateField>
</Columns>
</asp:GridView>
</form>
</body>
</html>GridView.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.OleDb;public partial class GridView : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataBindToGridView();
}
}
//显示数据
private void DataBindToGridView()
{
OleDbConnection con = DB.createConnection();
OleDbDataAdapter da = new OleDbDataAdapter("select * from person order by pid", con);
DataSet ds = new DataSet();
da.Fill(ds, "person");
this.GridView1.DataSource = ds.Tables[0].DefaultView;
this.GridView1.DataBind();
con.Close();
}
//执行数据绑定
protected DataView BindGridView2(string pid)
{
OleDbConnection con = DB.createConnection();
OleDbDataAdapter da = new OleDbDataAdapter("select * from person where pid='"+pid+"'", con);
DataSet ds = new DataSet();
da.Fill(ds, "person");
return ds.Tables[0].DefaultView;
}
}