GridView嵌套GridView问题

浮尘1213 2011-04-06 04:56:39
我用GridView嵌套一个GridView,为什么第二个GridView没有那个闪电符号,也就说,他没办法加事件,那个大侠给支条明路啊。郁闷中
...全文
211 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
浮尘1213 2011-04-07
  • 打赏
  • 举报
回复
问题解决了,3Q各位了
ycproc 2011-04-06
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 tianxiezuo 的回复:]

手写的说是没有引入命名空间
[/Quote]

你让人无语

知道不?
笑道江湖情 2011-04-06
  • 打赏
  • 举报
回复
LZ还没弄好吗?


我写个吧。

<!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">
<div>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false"
onrowdatabound="GridView1_RowDataBound">
<Columns>
<asp:BoundField DataField="OrderID" HeaderText="OrderID" />
<asp:BoundField DataField="LinkMan" HeaderText="LinkMan" />
<asp:BoundField DataField="SubmitTime" HeaderText="SubmitTime" />
<asp:TemplateField HeaderText="Detail">
<ItemTemplate>
<asp:GridView ID="GridView2" runat="server" OnRowDataBound="GridView2_RowDataBound">
</asp:GridView>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
</form>
</body>
</html>



/// <summary>
/// 订单
/// </summary>
public class Order
{
public string OrderID { set; get; }
public string LinkMan { set; get; }
public DateTime SubmitTime { set; get; }
}

/// <summary>
/// 商品
/// </summary>
public class Goods
{
public string OrderID { set; get; }
public string GoodsID { set; get; }
public int Amount { set; get; }
}

protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
this.GridView1.DataSource = this.GetOrderData();
this.GridView1.DataBind();
}
}

/// <summary>
/// 获取订单信息
/// </summary>
/// <returns>订单列表</returns>
public List<Order> GetOrderData()
{
List<Order> orderList = new List<Order>()
{
new Order(){ OrderID="s001", LinkMan="张三", SubmitTime=DateTime.Now},
new Order(){ OrderID="s002", LinkMan="李四", SubmitTime=DateTime.Now.AddDays(-1)},
new Order(){ OrderID="s003", LinkMan="王五", SubmitTime=DateTime.Now.AddHours(-8)},
new Order(){ OrderID="s004", LinkMan="赵六", SubmitTime=DateTime.Now.AddHours(-6.5)},
new Order(){ OrderID="s005", LinkMan="小七", SubmitTime=DateTime.Now.AddDays(-2)}
};
return orderList;
}

/// <summary>
/// 根据订单号获取商品信息
/// </summary>
/// <param name="OrderID">订单编号</param>
/// <returns>商品信息列表</returns>
public List<Goods> GetGoodsData(string OrderID)
{
List<Goods> goodsList = new List<Goods>()
{
new Goods{ OrderID="s001", GoodsID="SC001", Amount=1},
new Goods{ OrderID="s001", GoodsID="SC002", Amount=1},
new Goods{ OrderID="s001", GoodsID="SC003", Amount=6},
new Goods{ OrderID="s002", GoodsID="SC001", Amount=1},
new Goods{ OrderID="s002", GoodsID="SC004", Amount=10},
new Goods{ OrderID="s002", GoodsID="SC005", Amount=1},
new Goods{ OrderID="s005", GoodsID="SC001", Amount=1},
new Goods{ OrderID="s005", GoodsID="SC005", Amount=1},
new Goods{ OrderID="s005", GoodsID="SC007", Amount=1},
new Goods{ OrderID="s005", GoodsID="SC008", Amount=2},
new Goods{ OrderID="s005", GoodsID="SC004", Amount=3},
new Goods{ OrderID="s005", GoodsID="SC009", Amount=1},
};
return goodsList.FindAll(delegate(Goods g) { return g.OrderID == OrderID; });
}

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (e.Row.RowState == DataControlRowState.Alternate || e.Row.RowState == DataControlRowState.Normal)
{
GridView GridView2 = (GridView)e.Row.FindControl("GridView2");
string OrderID = e.Row.Cells[0].Text;
List<Goods> goodsList = this.GetGoodsData(OrderID);
GridView2.DataSource = goodsList;
GridView2.DataBind();
}
}
}

//第二层GridView的RowDataBound事件
protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if (e.Row.RowState == DataControlRowState.Alternate || e.Row.RowState == DataControlRowState.Normal)
{
if (Convert.ToInt32(e.Row.Cells[2].Text)>=5)
{
//订单中商品数量不小于5的显示红色
e.Row.Cells[2].Attributes.Add("style","background:red;");
}
}
}
}
浮尘1213 2011-04-06
  • 打赏
  • 举报
回复
手写的说是没有引入命名空间
浮尘1213 2011-04-06
  • 打赏
  • 举报
回复
嵌套的GRIDVIEW中没有RowDataBound事件
浮尘1213 2011-04-06
  • 打赏
  • 举报
回复
我只想知道,为什么第二个GRIDVIEW中没有RowDataBound,仅此而已
骑猪看海 2011-04-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 tianxiezuo 的回复:]
这都哪跟哪啊,这是来糊弄分来了吗?像你这样的代码网上一大堆
[/Quote]
你看仔细点,可行
子夜__ 2011-04-06
  • 打赏
  • 举报
回复
简单的绑定

 protected void gvOrder_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{

GridView gvDetail = e.Row.FindControl("gvDetail") as GridView;
if (gvDetail != null)
{
gvDetail.DataSource = GetDetailsByOrderId(gvOrder.DataKeys[e.Row.RowIndex].Value.ToString());
gvDetail.DataBind();
}
}

浮尘1213 2011-04-06
  • 打赏
  • 举报
回复
你知道咯撒?[Quote=引用 8 楼 dongdgh 的回复:]
6楼的代码是可以实现的GridView 嵌套GridView第二个GridView 他是先绑定第一个GridView ,点击第一个GridView 一列得在事件里面找到这个已经嵌套的GridView 可以直接在事件里面绑定。支持6楼的!
[/Quote]
dongdgh 2011-04-06
  • 打赏
  • 举报
回复
6楼的代码是可以实现的GridView 嵌套GridView第二个GridView 他是先绑定第一个GridView ,点击第一个GridView 一列得在事件里面找到这个已经嵌套的GridView 可以直接在事件里面绑定。支持6楼的!
浮尘1213 2011-04-06
  • 打赏
  • 举报
回复
这都哪跟哪啊,这是来糊弄分来了吗?像你这样的代码网上一大堆
ycproc 2011-04-06
  • 打赏
  • 举报
回复
OnRowDataBound事件,与1.x中的ItemDataBound有一腿.


<!--第一层GridView开始-->
<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结束-->



using System;
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();

}
}
}
浮尘1213 2011-04-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zx75991 的回复:]
程序是不会直接认识内层gridview的,要遍历外层Gridview后,找到嵌套的gridview再进一步操作。
[/Quote]你说这个也不对
天下在我心 2011-04-06
  • 打赏
  • 举报
回复
程序是不会直接认识内层gridview的,要遍历外层Gridview后,找到嵌套的gridview再进一步操作。
  • 打赏
  • 举报
回复
自己写事件
浮尘1213 2011-04-06
  • 打赏
  • 举报
回复
那样写了,程序不认,老报错
笑道江湖情 2011-04-06
  • 打赏
  • 举报
回复
恩 自己在标签里面写了

62,072

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧