论文部分内容阅读
摘要:ASP.NTE 2.0提供了三个功能强大的模板控件:Repeater控件、Datalist控件、Gridview控件,它们使得在Web应用程序中操作数据变得非常容易。该文结合几个例子对这几个控件的应用、功能及区别、联系进行了详细论述。
关键词:ASP.NET; repeater; datalist; gridview
中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)27-2078-03
Study and Analysis of Template Controls on ASP.NTE 2.0 Platform
DI Fang-ling, LIU Tian-shi
(School of Computer Science of Xi’an Shiyou University, Xi’an 710065, China)
Abstract: ASP.NET 2.0 provides three very useful data web Template Controls-Gridview, DataList and Repeater, which make the data work easier in the web applications. In accordance with using them in practical program,This thesis points out the all-around comparison and realition between them ,it also describes application, function and performance of these three web controls in details.
Key words: ASP.NET; repeater; datalist; gridview
1 ASP.NET 2.0的模板控件
ASP.NET提供了目前最先进的Web开发平台,它采用了微软最新的DOT NET框架,是DOT NET框架的核心元素。ASP.NET是一项基于服务器的强大技术。它在数据处理方面引入了许多新技术,具有很好的可扩展性和可定制性。ASP.NET有三种模板控件:Repeater控件、Datalist控件、Gridview控件,这些控件的通用特征是支持模板。模板可以影响控件所包含的元素的外观和行为,以及控件的页眉和页脚等。这些控件另一个特征是可以通过数据绑定来填充各自的内容。
基本数据绑定为:<%# DataBinder.Eval(Container.DataItem,"dataitem","{0}") %>
2 Repeater控件
2.1 介绍
Repeater控件是Web服务器控件的一个容器控件,它使您可以从页的任何可用数据中创建出自定义列表。Repeater控件不具备内置的呈现功能,这表示用户必须通过创建模板为Repeater控件提供布局。当该页运行时,Repeater控件依次通过数据源中的记录为每一个记录呈现一个项。该控件不支持选择或者编辑其中的元素,也不具备内置分页功能,当然可用通过手写代码实现这些功能,但是比较繁琐,对于这些任务不如使用作用更强大的Datalist和Gridview控件,后面将会介绍这些控件。但如果仅仅实现显示数据的功能,Repeater效率会更高。
2.2 举例
下面这个例子利用Repeater控件结合SqlDataSource数据源,实现了SqlServer2000 Pubs数据库中authors表中若干个字段的显示功能。
<form id="form1" runat="server">
<div>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:pubsConnectionString3 %>"
SelectCommand="SELECT [au_id], [city] FROM [authors]"></asp:SqlDataSource>
<br />
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1" OnItemCommand="Repeater1_ItemCommand">
<HeaderTemplate>
<table width ="600">
<tr>
<td>
这是头模板
</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<%# Eval("au_id") %>
//该语句等同于基本数据绑定:
<%# DataBinder.Eval(Container.DataItem,"au_id","{0}") %>)
</td>
</tr>
</ItemTemplate>
<AlternatingItemTemplate>
<tr>
<td>
<font color="red"> <%# Eval("au_id") %></font>
</td>
</tr>
</AlternatingItemTemplate>
<SeparatorTemplate>
<tr><td ><hr size="2pt" /></td></tr>
</SeparatorTemplate>
<FooterTemplate>
<tr>
<td>
//这是脚模板
</td>
</tr>
</table>
</FooterTemplate>
</asp:Repeater>
</div>
</form>
3 DataList控件
3.1 介绍
DataList控件它像Repeater控件一样可以以重复清单的方式显示数据项目,并且其内容和风格也要通过模板来实现,但这两个控件的差别还是很大的。Repeater控件要自由一些,但要花费更多的精力去设计它。DataList作为一个数据绑定控件,提供了大量新特性,其中大部分是关于图形布局的,这些都是Repeater控件所不具备的。可以通过属性生成器和样式来定义。例如,它支持方向性呈现,根据指定的列数可以水平或垂直排放项。DataList提供了可以检索与数据源当前行相关联值的工具,并具有对选择和编辑的内置支持,还支持更多的模板,并且可以触发比Repeater更多的事件。除了和Repeater类似的基本数据绑定外,DataSource属性用来将控件绑定到数据,DataBind方法用来刷新用户界面。
DataList1.DataSource =ds.Tables[“authors”];
DataList1.DataBind();
3.1.1 DataList专用模板
DataList除了上述五种模版外,还有两个模版:SelectedItemTemplate和EditItemTemplate。SelectedItemTemplate控制如何显示选定项,只在需要显示其它控件或者采用特定的逻辑时才使用它。EditItemTemplate通常和ItemTemplate一起使用,它是当项处于编辑模式时的布局,此模版通常包含编辑控件,如
TextBox等。数据绑定可以手写(如Repeater),也可在项模版指定的控件(通常是标签)上绑定。
3.2 举例
下面的例子用自制数据源来实现DataList的编辑和删除功能。在项模版里有Label1到Label3,分别绑定au_id,au_fname,city,还有两个LinkButton1和LinkButton2,Text属性分别设置为:编辑和删除。编辑项模版里设置:Label4,TextBox1,TextBox2;LinkButton3,LinkButton4,它们的Text 属性设为更新和取消。上述四个LinkButton按钮,它们的CommandName 属性分别设为:edit,delete,update和cancel(这是系统默认的)。
protectedvoidPage_Load(objectsender,EventArgse)
{if(!IsPostBack)
{bind();}}
publicintexecuteSql(stringquery)
{SqlConnectioncon=newSqlConnection("server=.;database=pubs;uid=sa;pwd=");
con.Open();
SqlCommandcmd=newSqlCommand(query,con);
return(cmd.ExecuteNonQuery());}
publicvoidbind()
{SqlConnectioncon=newSqlConnection("server=.;database=pubs;uid=sa;pwd=");
SqlDataAdaptersda=newSqlDataAdapter();
sda.SelectCommand=newSqlCommand("select*fromauthors",con);
DataSetds=newDataSet();
sda.Fill(ds,"authors");
DataList2.DataSource=ds.Tables[0];
DataList2.DataKeyField="au_id";
DataList2.DataBind();}
protectedvoidDataList2_EditCommand(objectsource,DataListCommandEventArgse)
{DataList2.EditItemIndex=e.Item.ItemIndex;
bind();}
protectedvoidDataList2_CancelCommand(objectsource,DataListCommandEventArgse)
{DataList2.EditItemIndex=-1;
bind();}
protectedvoidDataList2_DeleteCommand(objectsource,DataListCommandEventArgse)
{stringid=DataList2.DataKeys[e.Item.ItemIndex].ToString();
databaseds=newdatabase();
stringstr="deletefromauthorswhereau_id='"+id+"'";
inti=ds.executeSql(str);
if(i>0)
{Response.Write("<script>aletr('删除成功')");
DataList2.EditItemIndex=-1;
bind();}
}
protectedvoidDataList2_UpdateCommand(objectsource,DataListCommandEventArgse)
{stringid=DataList2.DataKeys[e.Item.ItemIndex].ToString();
stringau_fname=((TextBox)e.Item.FindControl("TextBox1")).Text.ToString();
stringcity=((TextBox)e.Item.FindControl("TextBox2")).Text.ToString();
stringstr="updateauthorssetau_fname='"+au_fname+"',city='"+city+"'whereau_id='"+id+"'";
databaseds=newdatabase();
intj=ds.executeSql(str);
if(j>0)
{DataList2.EditItemIndex=-1;
//若不加这一句只是数据库更新了,但是界面没有变化
bind();}
}
4GridView控件
4.1介绍
GridView是功能最为强大的模版控件。它可以呈现多列的、完全模版化的表格,目前在多用性方面超出了所有数据绑定控件。可以编辑多种不同类型的列,也可以启用分页、启用编辑、启用删除、启用排序等等。总之,结合数据源完全可以不写一句代码就可以实现数据的显示、编辑、删除、排序、分页等强大功能。也可以添加、修改、删除列,可以实现别的列向模版列的转换。可以通过样式设置布局。它的编辑模版和DataList不同,DataList的模版设置是针对整个控件,而GridView则可以对每一列设置不同的模版。
4.2举例
下面我们在GridView中用自制数据源实现数据的编辑、删除功能。手写代码实现编辑、删除功能和DataList类似,重复代码不再交代,只把不同的关键代码附上以示区别。这和DataList不同,不用在项模版和编辑项模版中添加LinkButton,不过要添加两个CommandField字段:编辑和删除,同时把需要编辑的列转化模板列,否则无法编辑。
protectedvoidGridView1_RowDeleting(objectsender,GridViewDeleteEventArgse)
{stringid=GridView1.DataKeys[e.RowIndex]["au_id"].ToString();
//注释:需要同时将GridView1的DataKeyNames设置为:au_id)
stringstr="deletefromauthorswhereau_id='"+id+"'";
inti=Convert.ToInt32(cmd(str));
if(i>0)
{Response.Write("<script>alert('删除成功')");
bind();}}
protectedvoidGridView1_RowEditing(objectsender,GridViewEditEventArgse)
{GridView1.EditIndex=e.NewEditIndex;
bind();}
protectedvoidGridView1_RowUpdating(objectsender,GridViewUpdateEventArgse)
{stringid=GridView1.DataKeys[e.RowIndex]["au_id"].ToString();
stringname=((TextBox)GridView1.Rows[e.RowIndex].Cells[3].FindControl("txtName")).Text.ToString();
stringcity=((TextBox)GridView1.Rows[e.RowIndex].Cells[4].FindControl("txtCity")).Text.ToString();
stringstr="updateauthorssetau_fname='"+name+"',city='"+city+"'whereau_id='"+id+"'";intj=cmd(str);
if(j>0)
{GridView1.EditIndex=-1;
bind();}}
protectedvoidGridView1_RowCancelingEdit(objectsender,GridViewCancelEditEventArgse)
{GridView1.EditIndex=-1;
bind();}
5 结束语
在ASP.NET 2.0 Web页面中操作数据时,开发人员常常会面临如何选择模版控件的问题。本文中,结合几个例子对三个模版控件的特点、功能进行了详尽的比较。总之,通常选用哪个控件在很大程度上取决于要实现的功能,对这些情况了解的清楚,开发出的Web应用程序质量也就越高。
参考文献:
[1] 丛书编委会.ASP.NET与网站开发实践教程[M].北京:清华大学出版社,2005.
[2] Esposito D.构建Web解决方案—应用ASP.NET和ADO.NET[M].梁超,译.北京:清华大学出版社,2002.
关键词:ASP.NET; repeater; datalist; gridview
中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)27-2078-03
Study and Analysis of Template Controls on ASP.NTE 2.0 Platform
DI Fang-ling, LIU Tian-shi
(School of Computer Science of Xi’an Shiyou University, Xi’an 710065, China)
Abstract: ASP.NET 2.0 provides three very useful data web Template Controls-Gridview, DataList and Repeater, which make the data work easier in the web applications. In accordance with using them in practical program,This thesis points out the all-around comparison and realition between them ,it also describes application, function and performance of these three web controls in details.
Key words: ASP.NET; repeater; datalist; gridview
1 ASP.NET 2.0的模板控件
ASP.NET提供了目前最先进的Web开发平台,它采用了微软最新的DOT NET框架,是DOT NET框架的核心元素。ASP.NET是一项基于服务器的强大技术。它在数据处理方面引入了许多新技术,具有很好的可扩展性和可定制性。ASP.NET有三种模板控件:Repeater控件、Datalist控件、Gridview控件,这些控件的通用特征是支持模板。模板可以影响控件所包含的元素的外观和行为,以及控件的页眉和页脚等。这些控件另一个特征是可以通过数据绑定来填充各自的内容。
基本数据绑定为:<%# DataBinder.Eval(Container.DataItem,"dataitem","{0}") %>
2 Repeater控件
2.1 介绍
Repeater控件是Web服务器控件的一个容器控件,它使您可以从页的任何可用数据中创建出自定义列表。Repeater控件不具备内置的呈现功能,这表示用户必须通过创建模板为Repeater控件提供布局。当该页运行时,Repeater控件依次通过数据源中的记录为每一个记录呈现一个项。该控件不支持选择或者编辑其中的元素,也不具备内置分页功能,当然可用通过手写代码实现这些功能,但是比较繁琐,对于这些任务不如使用作用更强大的Datalist和Gridview控件,后面将会介绍这些控件。但如果仅仅实现显示数据的功能,Repeater效率会更高。
2.2 举例
下面这个例子利用Repeater控件结合SqlDataSource数据源,实现了SqlServer2000 Pubs数据库中authors表中若干个字段的显示功能。
<form id="form1" runat="server">
<div>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:pubsConnectionString3 %>"
SelectCommand="SELECT [au_id], [city] FROM [authors]"></asp:SqlDataSource>
<br />
<asp:Repeater ID="Repeater1" runat="server" DataSourceID="SqlDataSource1" OnItemCommand="Repeater1_ItemCommand">
<HeaderTemplate>
<table width ="600">
<tr>
<td>
这是头模板
</td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<%# Eval("au_id") %>
//该语句等同于基本数据绑定:
<%# DataBinder.Eval(Container.DataItem,"au_id","{0}") %>)
</td>
</tr>
</ItemTemplate>
<AlternatingItemTemplate>
<tr>
<td>
<font color="red"> <%# Eval("au_id") %></font>
</td>
</tr>
</AlternatingItemTemplate>
<SeparatorTemplate>
<tr><td ><hr size="2pt" /></td></tr>
</SeparatorTemplate>
<FooterTemplate>
<tr>
<td>
//这是脚模板
</td>
</tr>
</table>
</FooterTemplate>
</asp:Repeater>
</div>
</form>
3 DataList控件
3.1 介绍
DataList控件它像Repeater控件一样可以以重复清单的方式显示数据项目,并且其内容和风格也要通过模板来实现,但这两个控件的差别还是很大的。Repeater控件要自由一些,但要花费更多的精力去设计它。DataList作为一个数据绑定控件,提供了大量新特性,其中大部分是关于图形布局的,这些都是Repeater控件所不具备的。可以通过属性生成器和样式来定义。例如,它支持方向性呈现,根据指定的列数可以水平或垂直排放项。DataList提供了可以检索与数据源当前行相关联值的工具,并具有对选择和编辑的内置支持,还支持更多的模板,并且可以触发比Repeater更多的事件。除了和Repeater类似的基本数据绑定外,DataSource属性用来将控件绑定到数据,DataBind方法用来刷新用户界面。
DataList1.DataSource =ds.Tables[“authors”];
DataList1.DataBind();
3.1.1 DataList专用模板
DataList除了上述五种模版外,还有两个模版:SelectedItemTemplate和EditItemTemplate。SelectedItemTemplate控制如何显示选定项,只在需要显示其它控件或者采用特定的逻辑时才使用它。EditItemTemplate通常和ItemTemplate一起使用,它是当项处于编辑模式时的布局,此模版通常包含编辑控件,如
TextBox等。数据绑定可以手写(如Repeater),也可在项模版指定的控件(通常是标签)上绑定。
3.2 举例
下面的例子用自制数据源来实现DataList的编辑和删除功能。在项模版里有Label1到Label3,分别绑定au_id,au_fname,city,还有两个LinkButton1和LinkButton2,Text属性分别设置为:编辑和删除。编辑项模版里设置:Label4,TextBox1,TextBox2;LinkButton3,LinkButton4,它们的Text 属性设为更新和取消。上述四个LinkButton按钮,它们的CommandName 属性分别设为:edit,delete,update和cancel(这是系统默认的)。
protectedvoidPage_Load(objectsender,EventArgse)
{if(!IsPostBack)
{bind();}}
publicintexecuteSql(stringquery)
{SqlConnectioncon=newSqlConnection("server=.;database=pubs;uid=sa;pwd=");
con.Open();
SqlCommandcmd=newSqlCommand(query,con);
return(cmd.ExecuteNonQuery());}
publicvoidbind()
{SqlConnectioncon=newSqlConnection("server=.;database=pubs;uid=sa;pwd=");
SqlDataAdaptersda=newSqlDataAdapter();
sda.SelectCommand=newSqlCommand("select*fromauthors",con);
DataSetds=newDataSet();
sda.Fill(ds,"authors");
DataList2.DataSource=ds.Tables[0];
DataList2.DataKeyField="au_id";
DataList2.DataBind();}
protectedvoidDataList2_EditCommand(objectsource,DataListCommandEventArgse)
{DataList2.EditItemIndex=e.Item.ItemIndex;
bind();}
protectedvoidDataList2_CancelCommand(objectsource,DataListCommandEventArgse)
{DataList2.EditItemIndex=-1;
bind();}
protectedvoidDataList2_DeleteCommand(objectsource,DataListCommandEventArgse)
{stringid=DataList2.DataKeys[e.Item.ItemIndex].ToString();
databaseds=newdatabase();
stringstr="deletefromauthorswhereau_id='"+id+"'";
inti=ds.executeSql(str);
if(i>0)
{Response.Write("<script>aletr('删除成功')");
DataList2.EditItemIndex=-1;
bind();}
}
protectedvoidDataList2_UpdateCommand(objectsource,DataListCommandEventArgse)
{stringid=DataList2.DataKeys[e.Item.ItemIndex].ToString();
stringau_fname=((TextBox)e.Item.FindControl("TextBox1")).Text.ToString();
stringcity=((TextBox)e.Item.FindControl("TextBox2")).Text.ToString();
stringstr="updateauthorssetau_fname='"+au_fname+"',city='"+city+"'whereau_id='"+id+"'";
databaseds=newdatabase();
intj=ds.executeSql(str);
if(j>0)
{DataList2.EditItemIndex=-1;
//若不加这一句只是数据库更新了,但是界面没有变化
bind();}
}
4GridView控件
4.1介绍
GridView是功能最为强大的模版控件。它可以呈现多列的、完全模版化的表格,目前在多用性方面超出了所有数据绑定控件。可以编辑多种不同类型的列,也可以启用分页、启用编辑、启用删除、启用排序等等。总之,结合数据源完全可以不写一句代码就可以实现数据的显示、编辑、删除、排序、分页等强大功能。也可以添加、修改、删除列,可以实现别的列向模版列的转换。可以通过样式设置布局。它的编辑模版和DataList不同,DataList的模版设置是针对整个控件,而GridView则可以对每一列设置不同的模版。
4.2举例
下面我们在GridView中用自制数据源实现数据的编辑、删除功能。手写代码实现编辑、删除功能和DataList类似,重复代码不再交代,只把不同的关键代码附上以示区别。这和DataList不同,不用在项模版和编辑项模版中添加LinkButton,不过要添加两个CommandField字段:编辑和删除,同时把需要编辑的列转化模板列,否则无法编辑。
protectedvoidGridView1_RowDeleting(objectsender,GridViewDeleteEventArgse)
{stringid=GridView1.DataKeys[e.RowIndex]["au_id"].ToString();
//注释:需要同时将GridView1的DataKeyNames设置为:au_id)
stringstr="deletefromauthorswhereau_id='"+id+"'";
inti=Convert.ToInt32(cmd(str));
if(i>0)
{Response.Write("<script>alert('删除成功')");
bind();}}
protectedvoidGridView1_RowEditing(objectsender,GridViewEditEventArgse)
{GridView1.EditIndex=e.NewEditIndex;
bind();}
protectedvoidGridView1_RowUpdating(objectsender,GridViewUpdateEventArgse)
{stringid=GridView1.DataKeys[e.RowIndex]["au_id"].ToString();
stringname=((TextBox)GridView1.Rows[e.RowIndex].Cells[3].FindControl("txtName")).Text.ToString();
stringcity=((TextBox)GridView1.Rows[e.RowIndex].Cells[4].FindControl("txtCity")).Text.ToString();
stringstr="updateauthorssetau_fname='"+name+"',city='"+city+"'whereau_id='"+id+"'";intj=cmd(str);
if(j>0)
{GridView1.EditIndex=-1;
bind();}}
protectedvoidGridView1_RowCancelingEdit(objectsender,GridViewCancelEditEventArgse)
{GridView1.EditIndex=-1;
bind();}
5 结束语
在ASP.NET 2.0 Web页面中操作数据时,开发人员常常会面临如何选择模版控件的问题。本文中,结合几个例子对三个模版控件的特点、功能进行了详尽的比较。总之,通常选用哪个控件在很大程度上取决于要实现的功能,对这些情况了解的清楚,开发出的Web应用程序质量也就越高。
参考文献:
[1] 丛书编委会.ASP.NET与网站开发实践教程[M].北京:清华大学出版社,2005.
[2] Esposito D.构建Web解决方案—应用ASP.NET和ADO.NET[M].梁超,译.北京:清华大学出版社,2002.