ASP.NET GridView嵌套DataList实例

最近做一个项目,需要用到GridView嵌类DataList的方式来实现数据的展示.弄了半天总算弄出来了,但还是有一些问题寻求高手解决.

先看WebForm:
 1 <% @ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>
 2
 3 <! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >
 4
 5 < html  xmlns ="http://www.w3.org/1999/xhtml"   >
 6 < head  runat ="server" >
 7      < title > Example </ title >
 8 </ head >
 9 < body >
10      < form  id ="form1"  runat ="server" >
11      < div >
12          < asp:GridView  ID ="GridView1"  runat ="server"  AutoGenerateColumns ="false"  
13             onrowcreated ="GridView1_RowCreated"  onrowdatabound ="GridView1_RowDataBound"   
14              >
15              < Columns >
16                  < asp:BoundField  HeaderText ="ID"  DataField ="ID"   />
17                  <% -- 模板控件,内部放一个DataList -- %>
18                  < asp:TemplateField  HeaderText ="Items" >
19                      < ItemTemplate >
20                          < asp:DataList  ID ="DataList1"  runat ="server"  RepeatColumns ="5"  OnItemCommand ="DataList_ItemCommand"  OnItemCreated ="DataList_ItemCreated" >
21                              < ItemTemplate > &nbsp; < asp:LinkButton  ID ="LinkButton2"  CommandArgument ='<%#Eval("ID")  % > ' CommandName="EditNumber" runat="server">插 </ asp:LinkButton >
22                                 asdjfalskdfjasldf <% Eval("ID" %>  
23                                  < asp:LinkButton  ID ="LinkButton3"  CommandArgument ='<%#Eval("ID")  % > ' CommandName="EditNumber" runat="server">替 </ asp:LinkButton >
24                                  < asp:LinkButton  ID ="LinkButton1"  CommandArgument ='<%#Eval("ID")  % > ' CommandName="EditNumber" runat="server">删 </ asp:LinkButton > &nbsp;&nbsp;
25                              </ ItemTemplate >
26                          </ asp:DataList >
27                      </ ItemTemplate >
28                  </ asp:TemplateField >
29              </ Columns >
30          </ asp:GridView >
31      </ div >
32      </ form >
33 </ body >
34 </ html >
35

再看CodeBehind:
Default.aspx.cs
 1public partial class _Default : System.Web.UI.Page
 2    {
 3        protected void Page_Load(object sender, EventArgs e)
 4        {
 5            if (!IsPostBack)
 6            {
 7                IList<Group> groups = new List<Group>();
 8
 9                for (int i = 0; i < 10; i++)
10                {
11                    IList<Item> items = new List<Item>();
12                    for (int j = 0; j < 5; j++)
13                    {
14                        items.Add(new Item { ID = j });
15                    }

16
17                    groups.Add(new Group { ID = i});
18                }

19
20                this.GridView1.DataSource = groups;
21                this.GridView1.DataBind();
22            }

23        }

24
25        protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
26        {
27            
28        }

29
30        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
31        {
32            int id = 0;
33
34            if(e.Row.RowType == DataControlRowType.DataRow)
35            {
36                id = Convert.ToInt32(e.Row.Cells[0].Text);
37                DataList dl = (DataList)e.Row.Cells[1].FindControl("DataList1");
38
39                if (dl != null)
40                {
41                    dl.DataSource = Group.GetItems(id);
42                    dl.DataBind();
43                }

44            }

45        }

46
47        protected void DataList_ItemCommand(object sender, DataListCommandEventArgs e)
48        {
49            DataList dl = (DataList)sender;
50
51            Response.Write(e.CommandArgument.ToString());
52        }

53
54        protected void DataList_ItemCreated(object sender, DataListItemEventArgs e)
55        {
56            Item item = (Item)e.Item.DataItem;
57
58            DataList dl = (DataList)sender;
59
60            IList<Item> items = (IList<Item>)dl.DataSource;
61
62
63            if (item == items[items.Count - 1])
64            {
65                LinkButton lb = new LinkButton();
66                lb.ID = "AppendButton";
67                lb.Text = "";
68                lb.CommandName = "Append";
69                lb.CommandArgument = item.ID.ToString();
70                e.Item.Controls.Add(lb);
71            }

72        }

再看数据源类的构造:
Code
 1public class Item
 2{
 3   public int ID getset; }
 4}

 5
 6public class Group
 7{
 8    public int ID getset; }
 9
10    public static IList<Item> GetItems(int id)
11    {
12        int c = id + 2;
13
14        IList<Item> items = new List<Item>();
15
16        for (int i = id; i < c; i++)
17        {
18            items.Add(new Item { ID=i});
19        }

20
21        return items;
22    }

23}

最后的显示效果:

其中DataList控件可以像往常一样处理自己的事件.

最后只有两件事搞不清楚

一:如果把Group类改造成
1 public   class  Group
2 {
3    public int ID getset; }
4
5    public IList<Item> Items getset; }
6}

如何在RowDataBound事件中将那一行的Items直接与DataList进行绑定?

二、能否在DataList事件中获得与DataList同行的数据值如GridView中的Eval("ID")值?

还望有高手赐教,静候!

转载于:https://www.cnblogs.com/lvwuhuijun/archive/2008/06/22/1227791.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值