先看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 > < 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 >
25 </ ItemTemplate >
26 </ asp:DataList >
27 </ ItemTemplate >
28 </ asp:TemplateField >
29 </ Columns >
30 </ asp:GridView >
31 </ div >
32 </ form >
33 </ body >
34 </ html >
35
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 > < 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 >
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 }
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 { get; set; }
4}
5
6public class Group
7{
8 public int ID { get; set; }
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}
1public class Item
2{
3 public int ID { get; set; }
4}
5
6public class Group
7{
8 public int ID { get; set; }
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 { get; set; }
4
5 public IList<Item> Items { get; set; }
6}
2 {
3 public int ID { get; set; }
4
5 public IList<Item> Items { get; set; }
6}
如何在RowDataBound事件中将那一行的Items直接与DataList进行绑定?
二、能否在DataList事件中获得与DataList同行的数据值如GridView中的Eval("ID")值?
还望有高手赐教,静候!