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

摘要:

    很多人可能在以前的ASP.NET版本中就已经用到ListView控件了,但是那个应该是第三方的控件。这回Microsoft将在ASP.NET中引入ListView控件,这个控件将DataList, FormView, 和 GridView 控件的功能集成到一个控件中。同DataListRepeater控件一样,他通过模板和样式表来格式化你所绑定的数据并呈现输出,然而他又能支持排序,更新,分页和删除等。本文将讲述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="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://xdotnet.cnblogs.com

本文可以随意转载,摘抄等非商业用途。

为了尊重作者成果,在转载和摘抄的时候请留下作者名称和出处。

原文地址:https://www.cnblogs.com/xdotnet/p/aspnet_server_control_listview_overview.html