ASP.NET GridView嵌套DataList实例
生活随笔
收集整理的這篇文章主要介紹了
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> <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????????}
再看數據源類的構造:
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}
最后的顯示效果:
其中DataList控件可以像往常一樣處理自己的事件.
最后只有兩件事搞不清楚
一:如果把Group類改造成
1public?class?Group
2{
3????public?int?ID?{?get;?set;?}
4
5????public?IList<Item>?Items?{?get;?set;?}
6}
如何在RowDataBound事件中將那一行的Items直接與DataList進行綁定?
二、能否在DataList事件中獲得與DataList同行的數據值如GridView中的Eval("ID")值?
還望有高手賜教,靜候!
先看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
再看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?{?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類改造成
1public?class?Group
2{
3????public?int?ID?{?get;?set;?}
4
5????public?IList<Item>?Items?{?get;?set;?}
6}
如何在RowDataBound事件中將那一行的Items直接與DataList進行綁定?
二、能否在DataList事件中獲得與DataList同行的數據值如GridView中的Eval("ID")值?
還望有高手賜教,靜候!
轉載于:https://www.cnblogs.com/lvwuhuijun/archive/2008/06/22/1227791.html
總結
以上是生活随笔為你收集整理的ASP.NET GridView嵌套DataList实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快速撑握C#知识点之变量,类型及类型转换
- 下一篇: 微服务架构案例(06):通过业务、应用、