[VS2008”Orcas”]ASP.NET将引入新控件ListView

简介:

摘要:

    很多人可能在以前的ASP.NET版本中就已经用到ListView控件了,但是那个应该是第三方的控件。这回Microsoft将在ASP.NET中引入ListView控件,这个控件将DataListFormView, 和 GridView 控件的功能集成到一个控件中。同DataList 和 Repeater控件一样,他通过模板和样式表来格式化你所绑定的数据并呈现输出,然而他又能支持排序,更新,分页和删除等。本文将讲述ListView的一些基础知识,下面我们一起来看看吧!

 

绑定数据:

    ASP.NET中的每一个数据控件都能够进行绑定,ListView控件提供两种方法进行数据绑定。

    1.  DataSourceID属性来绑定数据,这里需要用到的是数据源控件,这样ListView就能够像GridView一样支持数据源控件的分页,排序,更新和删除等。

    2.  通过DataSource属性来进行绑定,这个一般都用与编程绑定,这就需要我们通过代码来进行分页,排序,删除和更新等,这样就支持自定义分页等等,适合大量数据时使用。

模板:

    以下是创建所能够涉及到的模板,有很多中选择,可以是单独的一项,也可以分组。

    LayoutTemplate

    根模板在此模板中定义对象容器,我们可以在此定义如table,div和span标签等,而把内容定义在ItemTemplates,GroupTemplateDataPager等中。在例子中我们将讲述以下怎样应用这些模板。

    ItemTemplate

    这个模板只要有用过Repeater等控件的人都知道,它可以循环呈现数据。

    ItemSeparatorTemplate

    分割模板。

    GroupTemplate

    分组定义数据,我们可以在此模板中定义如table row(tr),div或span等,而把数据内容定义在ItemTemplate 和 EmptyItemTemplate模板中。

    GroupSeparatorTemplate

    分组分割模板。

    EmptyItemTemplate

    当应用GroupSeparatorTemplate模板时用于呈现无内容的模板,例如:如果我们将GroupItemCount设置为10,而我们的实际数据只有8条,当呈现内容是就会有两条内容呈现EmptyItemTemplate模板所定义的内容。

    EmptyDataTemplate

    当数据源为空时所要显示的内容。

    SelectedItemTemplate

    被选择时呈现的模板。

    AlternatingItemTemplate

    层叠替换模板,定义的内容和ItemTemplate一样。

    EditItemTemplate

    和GridView一样,编辑时呈现的内容。

    InsertItemTemplate

    插入模板。

创建ItemTemplate:

    其实控件的使用都差不多,用多了也就明白了,最主要的是用于实践。创建ItemTemplate很简单,从中我们也可以看到LayoutTemplate的应用,在Repeater中头尾要分别定义在Header和Footer中,而ListView直接定义可谓是一大进步啊。

 1  < asp:ListView  runat ="server"  ID ="EmployeesListView"  
                       DataSourceID
="EmployeesDataSource"  DataKeyNames ="EmployeeID" >
 2     < LayoutTemplate >
 3        < table  align ="center" >
 4        < tr >
 5          < td >
 6            < table  cellpadding ="2"  runat ="server"  id ="itemContainer"  style ="width:460px" >
 7            </ table >
 8          </ td >
 9        </ tr >
10        < tr >
11          < td  align ="center" >
12            < asp:DataPager  runat ="server"  ID ="DataPager"  CssClass ="pager"  PageSize ="4" >
13              < Fields >
14                < asp:NumericPagerField
15                  ButtonCount ="5"
16                 PreviousPageText ="<--"
17                 NextPageText ="-->"   />
18              </ Fields >
19            </ asp:DataPager >
20          </ td >
21        </ tr >
22        </ table >
23     </ LayoutTemplate >
24     < ItemTemplate >
25        < tr >
26          < td  valign ="top"  colspan ="2"  align ="center"  class ="EmployeeName" >
27            < asp:Label  ID ="FirstNameLabel"  runat ="Server"  Text ='<%#Eval("FirstName")  % > ' />
28            < asp:Label  ID ="LastNameLabel"  runat ="Server"  Text ='<%#Eval("LastName")  % > ' />
29          </ td >
30        </ tr >
31        < tr  style ="height:72px" >
32          < td  valign ="top"  class ="EmployeeInfo" >
33            < asp:Label  ID ="JobTitleLabel"  runat ="Server"  Text ='<%#Eval("JobTitle")  % > ' />
34            < br  />
35            < asp:HyperLink  ID ="EmailAddressLink"  runat ="Server"  
                        Text
='<%#Eval("EmailAddress")  % >
                                      NavigateUrl='
<% # " mailto: "   +   Eval ( " EmailAddress " %> ' />
36            < br  />
37            < asp:Label  ID ="PhoneLabel"  runat ="Server"  Text ='<%#Eval("Phone")  % > ' />
38          </ td >
39          < td  valign ="top"  class ="EmployeeAddress" >
40            < asp:Label  ID ="AddressLine1Label"  runat ="Server"  Text ='<%#Eval("AddressLine1")  % > ' />
41            < br  />
42            < asp:Panel  ID ="AddressLine2Panel"  runat ="server"  
                                Visible
='<%#Eval("AddressLine2").ToString()  ! = String.Empty  % > '>
43            < asp:Label  ID ="AddressLine2Label"  runat ="Server"  Text ='<%#Eval("AddressLine2").ToString()% > '  />
44            < br  />
45            </ asp:Panel >
46            < asp:Label  ID ="CityLabel"  runat ="Server"  Text ='<%#Eval("City")  % > ' />,
47            < asp:Label  ID ="StateProvinceNameLabel"  runat ="Server"  Text ='<%#Eval("StateProvinceName")  % > ' />
48            < asp:Label  ID ="PostalCodeLabel"  runat ="server"  Text ='<%#Eval("PostalCode")  % > ' />
49            < br  />
50            < asp:Label  ID ="CountryRegionNameLabel"  runat ="Server"  Text ='<%#Eval("CountryRegionName")  % > ' />
51          </ td >
52        </ tr >
53      </ ItemTemplate >
54  </ asp:ListView >
55 

 

利用ListView分页:

    其实还是要靠自定义分页这样才能对大数据进行检索,如果直接用内置的效率将是非常地的,我们这里先看看内嵌的分页功能。

 1  < asp:DataPager  runat ="server"  ID ="EmployeesDataPager"  CssClass ="pager"  PageSize ="8" >
 2     < Fields >
 3       < asp:TemplatePagerField >
 4         < PagerTemplate >
 5           &nbsp;
 6           < asp:TextBox  ID ="CurrentRowTextBox"  runat ="server"
 7               AutoPostBack ="true"
 8               Text ="<%# Container.Pager.StartRowIndex + 1%>"  Columns ="1"  style ="text-align:right"
                             OnTextChanged
="CurrentRowTextBox_OnTextChanged"   />
 9          to
10           < asp:Label  ID ="PageSizeLabel"  runat ="server"  Font-Bold ="true"
11               Text ="<%# Container.Pager.StartRowIndex + Container.Pager.PageSize >
                            Container.Pager.TotalRowCount ? Container.Pager.TotalRowCount : 
                                    Container.Pager.StartRowIndex + Container.Pager.PageSize %>"
  />
12          of
13           < asp:Label  ID ="TotalRowsLabel"  runat ="server"  Font-Bold ="true"
14               Text ="<%# Container.Pager.TotalRowCount %>"   />
15         </ PagerTemplate >
16       </ asp:TemplatePagerField >
17       < asp:NextPreviousPagerField 
18            ShowFirstPageButton ="true"  ShowLastPageButton ="true"
19           FirstPageText ="|<< "  LastPageText =" >>|"
20           NextPageText =" > "  PreviousPageText =" < "   />
21     </ Fields >
22  </ asp:DataPager >
23 

 

   后台代码:

1  protected   void  CurrentRowTextBox_OnTextChanged( object  sender, EventArgs e)
2  {
3      TextBox t  =  (TextBox)sender;
4      DataPager pager  =  (DataPager)EmployeesListView.FindControl( " EmployeesDataPager " );
5      pager.SetPageProperties(Convert.ToInt32(t.Text)  -   1 , pager.PageSize,  true );
6  }
7 

排序:

     利用CommandArgument属性的定义来对数据进行排序。代码如下:
 1  < asp:ListView  runat ="server"  ID ="ListView1"  DataSourceID ="SqlDataSource1" >
 2     < LayoutTemplate >
 3       < asp:LinkButton  runat ="server"  ID ="SortButton"  
 4           Text ="Sort"  CommandName ="Sort"  CommandArgument ="LastName"   />
 5       < table  runat ="server"  id ="itemContainer" >
 6       </ table >
 7       < asp:DataPager  runat ="server"  ID ="DataPager"  PageSize ="20" >
 8           < Fields >
 9             < asp:NumericPagerField  ButtonCount ="10"
10                 PreviousPageText ="<--"
11                 NextPageText ="-->"   />
12           </ Fields >
13       </ asp:DataPager >
14     </ LayoutTemplate >
15     < ItemTemplate >
16       < tr  runat ="server" >
17         < td >< asp:Label  runat ="server"  ID ="FirstNameLabel"  
18                 Text ='<%#  Eval("FirstName")'  /></ td >
19         < td >< asp:Label  runat ="server"  ID ="LastNameLabel"  
20                 Text ='<%#  Eval("LastName")'  /></ td >
21       </ tr >
22     </ ItemTemplate >
23  </ asp:ListView >
24 

     后台代码:
 1  protected   void  EmployeesListView_OnSorting( object  sender, ListViewSortEventArgs e)
 2  {
 3       if  (e.SortExpression.Trim()  ==   "" ) {  return ; }
 4 
 5       string  direction  =   "" ;
 6       if  (ViewState[ " SortDirection " !=   null )
 7          direction  =  ViewState[ " SortDirection " ].ToString();
 8 
 9       if  (direction  ==   " ASC " )
10          direction  =   " DESC " ;
11       else
12          direction  =   " ASC " ;
13 
14      ViewState[ " SortDirection " =  direction;
15 
16       string [] sortColumns  =  e.SortExpression.Split( ' , ' );
17       string  sortExpression  =  sortColumns[ 0 +   "   "   +  direction;
18       for  ( int  i  =   1 ; i  <  sortColumns.Length; i ++ )
19          sortExpression  +=   " "   +  sortColumns[i]  +   "   "   +  direction;
20      e.SortExpression  =  sortExpression;
21  }
22 

总结:

     我们只要能够把其中一个数据控件用的很熟悉,就知道其他控件的基本用法了,掌握了他的事件驱动,再用其他的控件都是大同小异没什么差别。本文只是为了介绍这个控件,由于在Orcas Beta1中还没有这个控件的出没,无意中我看到了介绍此控件的文章,所以写写加上翻翻就成就了此文。

本文转自网魂小兵博客园博客,原文链接:http://www.cnblogs.com/xdotnet/archive/2007/05/10/aspnet_server_control_listview_overview.html,如需转载请自行联系原作者
相关文章
|
7月前
|
开发框架 前端开发 JavaScript
盘点72个ASP.NET Core源码Net爱好者不容错过
盘点72个ASP.NET Core源码Net爱好者不容错过
169 0
|
7月前
|
开发框架 .NET
ASP.NET Core NET7 增加session的方法
ASP.NET Core NET7 增加session的方法
92 0
|
4月前
|
开发框架 JavaScript 前端开发
震撼!破解 ASP.NET 服务器控件 Button 执行顺序之谜,颠覆你的开发认知!
【8月更文挑战第16天】在ASP.NET开发中,通过Button控件实现先执行JavaScript再触后台处理的需求十分常见。例如,在用户点击按钮前需前端验证或提示,确保操作无误后再传递数据至后台深度处理。此过程可通过设置Button的`OnClientClick`属性调用自定义JavaScript函数完成验证;若验证通过,则继续触发后台事件。此外,结合jQuery也能达到相同效果,利用`__doPostBack`手动触发服务器端事件。这种方式增强了应用的交互性和用户体验。
49 8
|
2月前
|
开发者 Windows
.NET 开源扁平化、美观的 C/S 控件库
【10月更文挑战第23天】介绍了三款适用于 .NET 平台的开源扁平化、美观的 C/S 控件库:MaterialSkin 采用 Google Material Design 风格,适合现代感界面;Krypton Toolkit 提供丰富控件,界面易于定制;Fluent Ribbon Control Suite 模仿 Office 界面,适合复杂功能应用。每款控件库均附有示例代码及 GitHub 链接。
winform .net6 和 framework 的图表控件,为啥项目中不存在chart控件,该如何解决?
本文讨论了在基于.NET 6和.NET Framework的WinForms项目中添加图表控件的不同方法。由于.NET 6的WinForms项目默认不包含Chart控件,可以通过NuGet包管理器安装如ScottPlot等图表插件。而对于基于.NET Framework的WinForms项目,Chart控件是默认存在的,也可以通过NuGet安装额外的图表插件,例如LiveCharts。文中提供了通过NuGet添加图表控件的步骤和截图说明。
winform .net6 和 framework 的图表控件,为啥项目中不存在chart控件,该如何解决?
|
2月前
|
C# Android开发 iOS开发
一组.NET MAUI绘制的开源控件 - AlohaKit
一组.NET MAUI绘制的开源控件 - AlohaKit
|
3月前
|
开发框架 JavaScript 前端开发
|
4月前
|
开发框架 JSON .NET
ASP.NET Core 标识(Identity)框架系列(三):在 ASP.NET Core Web API 项目中使用标识(Identity)框架进行身份验证
ASP.NET Core 标识(Identity)框架系列(三):在 ASP.NET Core Web API 项目中使用标识(Identity)框架进行身份验证
|
4月前
|
开发框架 .NET 数据库连接
ASP.NET Core 标识(Identity)框架系列(一):如何使用 ASP.NET Core 标识(Identity)框架创建用户和角色?
ASP.NET Core 标识(Identity)框架系列(一):如何使用 ASP.NET Core 标识(Identity)框架创建用户和角色?
|
7月前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界