zoukankan      html  css  js  c++  java
  • [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

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

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

  • 相关阅读:
    tensorflow 1
    BAT变量中的百分号学习
    mysqldump: unknown option '--no-beep'
    mysql数据库文件默认保存目录(windows)
    mysql 直接从date 文件夹备份表,还原数据库之后提示 table doesn`t exist的原因和解决方法
    淘宝开源Web服务器Tengine安装教程
    Solr开发文档
    spring线程池配置
    Host 'XXX' is not allowed to connect to this MySQL server 解决方案/如何开启MySQL的远程帐号
    Redis应用场景
  • 原文地址:https://www.cnblogs.com/xdotnet/p/aspnet_server_control_listview_overview.html
Copyright © 2011-2022 走看看