ListView Web 服务器控件概述(MSDN)

   1:  “折叠”图像“展开”图像“复制”图像“复制悬停”图像 全部折叠全部展开      代码:全部 代码:多个 代码:Visual Basic 代码:C# 代码:Visual C++ 代码:J# 代码:JScript  
   2:  Visual Basic
   3:  C#
   4:  Visual C++
   5:  J#
   6:  JScript
   7:   
   8:  ListView Web 服务器控件概述 
   9:  请参见  发送反馈意见 
  10:   
  11:   
  12:  利用 ASP.NET ListView 控件,可以绑定从数据源返回的数据项并显示它们。这些数据可以显示在多个页面。您可以逐个显示数据项,也可以对它们分组。
  13:   
  14:  ListView 控件会按照您使用模板和样式定义的格式显示数据。与 DataList 和 Repeater 控件相似,此控件也适用于任何具有重复结构的数据。但与这些控件不同的是,ListView 控件允许用户编辑、插入和删除数据,以及对数据进行排序和分页,所有这一切都无需编写代码。
  15:   
  16:  本主题包括:
  17:   
  18:  将数据绑定到 ListView 控件 
  19:   
  20:  为 ListView 控件创建模板 
  21:   
  22:  对数据进行分页 
  23:   
  24:  对数据进行排序 
  25:   
  26:  修改数据 
  27:   
  28:  对 ListView 项应用样式 
  29:   
  30:  类参考 
  31:   
  32:  代码示例 
  33:   
  34:  其他资源 
  35:   
  36:  “折叠”图像将数据绑定到 ListView 控件
  37:  通过下列方法,可以将 ListView 控件绑定到数据:
  38:   
  39:  使用 DataSourceID 属性。通过此属性可以将 ListView 控件绑定到数据源控件,例如 SqlDataSource 控件。我们建议采用这种方法,因为它可以使 ListView 控件利用数据源控件的功能。此外,它还可以提供用于排序、分页、插入、删除和更新操作的内置功能。采用这种方法时,还可以使用双向绑定表达式。有关数据源控件的更多信息,请参见数据源控件概述。
  40:   
  41:  使用 DataSource 属性。此属性允许绑定到各种对象,包括 ADO.NET 数据集、数据读取器以及内存中的结构(例如集合)。采用此方法时,您需要为所有附加功能(例如排序、分页和更新)编写代码。
  42:   
  43:  返回页首 
  44:   
  45:  “折叠”图像为 ListView 控件创建模板
  46:  与 DataList 和 Repeater 控件类似,ListView 控件显示的项也是用模板定义的。利用 ListView 控件,可以逐项显示数据,也可以按组显示数据。
  47:   
  48:  通过创建 LayoutTemplate 模板,可以定义 ListView 控件的主要(根)布局。LayoutTemplate 必须包含一个充当数据占位符的控件。例如,该布局模板可以包含 ASP.NET Table、Panel 或 Label 控件 (它还可以包含 runat 属性设置为“server”的 table、div 或 span 元素)。这些控件将包含 ItemTemplate 模板所定义的每个项的输出,您可以在 GroupTemplate 模板定义的内容中对这些输出进行分组。
  49:   
  50:  在 ItemTemplate 模板中,需要定义各个项的内容。此模板包含的控件通常已绑定到数据列或其他单个数据元素。
  51:   
  52:  对项分组
  53:  使用 GroupTemplate 模板,可以选择对 ListView 控件中的项进行分组。对项分组通常是为了创建平铺的表布局。在平铺的表布局中,各个项将在行中重复 GroupItemCount 属性指定的次数。为创建平铺的表布局,布局模板可以包含 ASP.NET Table 控件以及将 runat 属性设置为“server”的 HTML table 元素。随后,组模板可以包含 ASP.NET TableRow 控件(或 HTML tr 元素)。而项模板可以包含 ASP.NET TableCell 控件(或 HTML td 元素)中的各个控件。
  54:   
  55:  使用 EditItemTemplate 模板,可以提供已绑定数据的用户界面,从而使用户可以修改现有的数据项。使用 InsertItemTemplate 模板还可以定义已绑定数据的用户界面,以使用户能够添加新的数据项。有关更多信息,请参见本主题后面的修改数据。
  56:   
  57:  可用的模板
  58:  下表列出了可用于 ListView 控件的所有模板。
  59:   
  60:  LayoutTemplate 
  61:  标识定义控件的主要布局的根模板。它包含一个占位符对象,例如表行 (tr)、div 或 span 元素。此元素将由 ItemTemplate 模板或 GroupTemplate 模板中定义的内容替换。它还可能包含一个 DataPager 对象。
  62:   
  63:  ItemTemplate 
  64:  标识要为各个项显示的数据绑定内容。
  65:   
  66:  ItemSeparatorTemplate 
  67:  标识要在各个项之间呈现的内容。
  68:   
  69:  GroupTemplate 
  70:  标识组布局的内容。它包含一个占位符对象,例如表单元格 (td)、div 或 span。该对象将由其他模板(例如 ItemTemplate 和 EmptyItemTemplate 模板)中定义的内容替换。
  71:   
  72:  GroupSeparatorTemplate 
  73:  标识要在项组之间呈现的内容。
  74:   
  75:  EmptyItemTemplate 
  76:  标识在使用 GroupTemplate 模板时为空项呈现的内容。例如,如果将 GroupItemCount 属性设置为 5,而从数据源返回的总项数为 8,则 ListView 控件显示的最后一行数据将包含 ItemTemplate 模板指定的 3 个项以及 EmptyItemTemplate 模板指定的 2 个项。
  77:   
  78:  EmptyDataTemplate 
  79:  标识在数据源未返回数据时要呈现的内容。
  80:   
  81:  SelectedItemTemplate 
  82:  标识为区分所选数据项与显示的其他项,而为该所选项呈现的内容。
  83:   
  84:  AlternatingItemTemplate 
  85:  标识为便于区分连续项,而为交替项呈现的内容。
  86:   
  87:  EditItemTemplate 
  88:  标识要在编辑项时呈现的内容。对于正在编辑的数据项,将呈现 EditItemTemplate 模板以替代 ItemTemplate 模板。
  89:   
  90:  InsertItemTemplate 
  91:  标识要在插入项时呈现的内容。将在 ListView 控件显示的项的开始或末尾处呈现 InsertItemTemplate 模板,以替代 ItemTemplate 模板。通过使用 ListView 控件的 InsertItemPosition 属性,可以指定 InsertItemTemplate 模板的呈现位置。
  92:   
  93:  更改项模板
  94:  下面的示例演示了项模板的基本结构。
  95:   
  96:    “复制”图像复制代码 
  97:  <asp:ListView runat="server" ID="ListView1" 
  98:      DataSourceID="SqlDataSource1">
  99:    <LayoutTemplate>
 100:      <table runat="server" id="table1" runat="server" >
 101:        <tr runat="server" id="itemPlaceholder" ></tr>
 102:      </table>
 103:    </LayoutTemplate>
 104:    <ItemTemplate>
 105:      <tr runat="server>
 106:        <td runat="server">
 107:          <%-- Data-bound content. --%>
 108:          <asp:Label ID="NameLabel" runat="server" 
 109:            Text='<%#Eval("Name") %>' />
 110:        </td>
 111:      </tr>
 112:    </ItemTemplate>
 113:  </asp:ListView>
 114:   
 115:   
 116:  若要逐个显示项,请向 LayoutTemplate 模板中添加一个服务器端控件,并将该控件的 ID 属性设置为 itemPlaceholder。该控件只是其他模板(通常为 ItemTemplate 模板)的占位符。这样,该控件在运行时将被其他模板中的内容替换。
 117:   
 118:  注意注意: 
 119:  通过将 ItemPlaceholderID 属性设置为一个新值,可以更改用于标识项容器的 ID 属性的值。
 120:   
 121:   
 122:  定义布局模板后,可以添加 ItemTemplate 模板,它通常包含用于显示数据绑定内容的控件。通过使用 Eval 方法将这些控件绑定到数据源中的值,可以指定要用于显示每个项的标记。有关 Eval 元素的更多信息,请参见 数据绑定表达式语法。
 123:   
 124:  ItemSeparatorTemplate 模板用于标识要在各个项之间包括的内容,若要提供其他内容进行呈现,则可以使用此模板。
 125:   
 126:  下图显示的布局使用多个表行来显示数据源中的每项数据。
 127:   
 128:  每项使用多行的 ListView 
 129:  下面的示例演示如何创建此布局。
 130:   
 131:    “复制”图像复制代码 
 132:  <asp:ListView runat="server" ID="EmployeesListView" 
 133:      DataSourceID="EmployeesDataSource" 
 134:      DataKeyNames="EmployeeID">
 135:    <LayoutTemplate>
 136:      <table cellpadding="2" runat="server" id="tblEmployees" 
 137:          style="460px">
 138:        <tr runat="server" id="itemPlaceholder">
 139:        </tr>
 140:      </table>
 141:      <asp:DataPager runat="server" ID="DataPager" PageSize="3">
 142:        <Fields>
 143:          <asp:NumericPagerField
 144:            ButtonCount="5"
 145:            PreviousPageText="<--"
 146:            NextPageText="-->" />
 147:        </Fields>
 148:      </asp:DataPager>
 149:    </LayoutTemplate>
 150:    <ItemTemplate>
 151:       <tr runat="server">
 152:         <td valign="top" colspan="2" align="center" 
 153:             class="EmployeeName">
 154:           <asp:Label ID="FirstNameLabel" runat="server" 
 155:             Text='<%#Eval("FirstName") %>' />
 156:           <asp:Label ID="LastNameLabel" runat="server" 
 157:             Text='<%#Eval("LastName") %>' />
 158:         </td>
 159:       </tr>
 160:       <tr style="height:72px" runat="server">
 161:         <td valign="top" class="EmployeeInfo">
 162:           <asp:Label ID="JobTitleLabel" runat="server" 
 163:               Text='<%#Eval("JobTitle") %>' />
 164:           <br />
 165:           <asp:HyperLink ID="EmailAddressLink" runat="server" 
 166:               Text='<%#Eval("EmailAddress") %>'  
 167:               NavigateUrl='<%#"mailto:" + Eval("EmailAddress") %>' />
 168:           <br />
 169:           <asp:Label ID="PhoneLabel" runat="server" 
 170:               Text='<%#Eval("Phone") %>' />
 171:         </td>
 172:         <td valign="top" class="EmployeeAddress">
 173:           <asp:Label ID="AddressLine1Label" runat="server" 
 174:               Text='<%#Eval("AddressLine1") %>' />
 175:           <br />
 176:           <asp:Panel ID="AddressLine2Panel" runat="server" 
 177:              Visible='<%#Eval("AddressLine2").ToString() != String.Empty %>'>
 178:           <asp:Label ID="AddressLine2Label" runat="server" 
 179:              Text='<%#Eval("AddressLine2").ToString()%>'  />
 180:           <br />
 181:           </asp:Panel>
 182:           <asp:Label ID="CityLabel" runat="server" 
 183:             Text='<%#Eval("City") %>' />,
 184:           <asp:Label ID="StateProvinceNameLabel" runat="server" 
 185:             Text='<%#Eval("StateProvinceName") %>' />
 186:           <asp:Label ID="PostalCodeLabel" runat="server" 
 187:             Text='<%#Eval("PostalCode") %>' />
 188:           <br />
 189:           <asp:Label ID="CountryRegionNameLabel" runat="server" 
 190:             Text='<%#Eval("CountryRegionName") %>' />
 191:         </td>
 192:       </tr>
 193:     </ItemTemplate>
 194:  </asp:ListView>
 195:   
 196:   
 197:  创建组模板
 198:  下面的示例演示如何创建组模板。
 199:   
 200:    “复制”图像复制代码 
 201:  <asp:ListView runat="server" ID="ListView1" 
 202:      DataSourceID="SqlDataSource1" 
 203:      GroupItemCount="5">
 204:    <LayoutTemplate>
 205:      <table runat="server" id="table1">
 206:        <tr runat="server" id="groupPlaceholder">
 207:        </tr>
 208:      </table>
 209:    </LayoutTemplate>
 210:    <GroupTemplate>
 211:      <tr runat="server" id="tableRow">
 212:        <td runat="server" id="itemPlaceholder" />
 213:      </tr>
 214:    </GroupTemplate>
 215:    <ItemTemplate>
 216:      <td runat="server">
 217:        <%-- Data-bound content. --%>
 218:        <asp:Label ID="NameLabel" runat="server" 
 219:            Text='<%#Eval("Name") %>' />
 220:      </td>
 221:    </ItemTemplate>
 222:  </asp:ListView>
 223:   
 224:   
 225:  若要按组显示各项,可以在 LayoutTemplate 模板中使用一个服务器控件来充当组的占位符。例如,可以使用 TableRow 控件。请将该占位符控件的 ID 属性设置为 groupPlaceholder。在运行时,该占位符控件将被 GroupTemplate 模板中的内容替换。
 226:   
 227:  随后,请再添加一个占位符控件,并将其 ID 属性设置为 itemPlaceholder。该控件只是其他模板(通常为 ItemTemplate 模板)的占位符。这样,该控件在运行时将被其他模板中的内容替换。该内容将重复 ListView 控件的 GroupItemCount 属性所指定的项次数。
 228:   
 229:  最后,请添加一个 ItemTemplate 模板,并提供要在每个项的包含控件内显示的数据绑定内容。
 230:   
 231:  注意注意: 
 232:  通过为 GroupPlaceholderID 属性设置一个新值,可以更改用于标识组占位符的 ID 属性的值。
 233:   
 234:   
 235:  使用 ItemSeparatorTemplate 模板可以指定各个项之间的分隔符。使用 GroupSeparatorTemplate 属性可以指定各个组之间的分隔符。
 236:   
 237:  下图显示的布局在每行中显示了数据源中的多个项。
 238:   
 239:  ListView 控件中每行有多个项 
 240:  下面的示例演示如何创建此布局。
 241:   
 242:    “复制”图像复制代码 
 243:  <asp:ListView runat="server" ID="ProductsListView"
 244:      GroupItemCount="3"
 245:      DataSourceID="ProductsSqlDataSource" DataKeyNames="ProductID">
 246:    <LayoutTemplate>
 247:      <table cellpadding="2" runat="server"
 248:             id="tblProducts" style="height:320px">
 249:        <tr runat="server" id="groupPlaceholder">
 250:        </tr>
 251:      </table>
 252:      <asp:DataPager runat="server" ID="DataPager"
 253:                     PageSize="9">
 254:         <Fields>
 255:           <asp:NumericPagerField ButtonCount="3"
 256:                PreviousPageText="<--"
 257:                NextPageText="-->" />
 258:         </Fields>
 259:      </asp:DataPager>
 260:    </LayoutTemplate>
 261:    <GroupTemplate>
 262:      <tr runat="server" id="productRow"
 263:          style="height:80px">
 264:        <td runat="server" id="itemPlaceholder">
 265:        </td>
 266:      </tr>
 267:    </GroupTemplate>
 268:    <ItemTemplate>
 269:      <td valign="top" align="center" style="100" runat="server">
 270:        <asp:Image ID="ProductImage" runat="server"
 271:             ImageUrl='<%#"~/images/thumbnails/" + 
 272:                 Eval("ThumbnailPhotoFileName") %>'
 273:             Height="49" /><br />
 274:        <asp:HyperLink ID="ProductLink" runat="server"
 275:             Target="_blank" Text='<% #Eval("Name")%>'
 276:             NavigateUrl='<%#"ShowProduct.aspx?ProductID=" + 
 277:                Eval("ProductID") %>' />
 278:      </td>
 279:    </ItemTemplate>
 280:  </asp:ListView>
 281:   
 282:   
 283:  返回页首 
 284:   
 285:  “折叠”图像对数据进行分页
 286:  若要使用户能够按页查看 ListView 控件中的数据,可以使用 DataPager 控件。DataPager 控件可以位于 LayoutTemplate 模板内部,也可以位于 ListView 控件之外的页面上。如果 DataPager 控件不在 ListView 控件内,则必须将 PagedControlID 属性设置为 ListView 控件的 ID。
 287:   
 288:  DataPager 控件支持内置的分页用户界面。您可以使用 NumericPagerField 对象,此对象允许用户按页码选择数据页。此外也可以使用 NextPreviousPagerField 对象。利用此对象,用户可以逐页浏览数据页,也可以直接跳到第一个或最后一个数据页。数据页的大小由 DataPager 控件的 PageSize 属性设置。单个 DataPager 控件中可以使用一个或多个页导航字段对象。
 289:   
 290:  另外,通过使用 TemplatePagerField 对象,还可以创建自定义分页用户界面。在 TemplatePagerField 模板中,可以使用 Container 属性来引用 DataPager 控件。此属性可提供对 DataPager 控件的各个属性的访问。这些属性包括起始行索引、页面大小,以及当前绑定到 ListView 控件的总行数。
 291:   
 292:  下面的示例演示了一个在 ListView 控件的 LayoutTemplate 模板中包括的 DataPager 类。
 293:   
 294:    “复制”图像复制代码 
 295:  <asp:ListView runat="server" ID="ListView1" 
 296:      DataSourceID="SqlDataSource1">
 297:    <LayoutTemplate>
 298:      <table runat="server" id=" table1">
 299:        <tr runat="server" id="itemPlaceholder">
 300:        </tr>
 301:      </table>
 302:      <asp:DataPager runat="server" ID="DataPager" PageSize="5">
 303:          <Fields>
 304:            <asp:NumericPagerField ButtonCount="10"
 305:                 PreviousPageText="<--"
 306:                 NextPageText="-->" />
 307:          </Fields>
 308:      </asp:DataPager>
 309:    </LayoutTemplate>
 310:    <ItemTemplate>
 311:      <tr runat="server">
 312:        <%-- Data-bound content. --%>
 313:      </tr>
 314:    </ItemTemplate>
 315:  </asp:ListView>
 316:   
 317:   
 318:  下图显示的布局使用 NumericPagerField 对象基于页码显示数据页的链接。
 319:   
 320:  使用 NumericPagerField 对象 
 321:  下面的示例演示如何创建此布局。
 322:   
 323:    “复制”图像复制代码 
 324:  <asp:DataPager runat="server" ID="DataPager" PageSize="10">
 325:    <Fields>
 326:      <asp:NumericPagerField ButtonCount="10"
 327:           CurrentPageLabelCssClass="CurrentPage"
 328:           NumericButtonCssClass="PageNumbers"
 329:           NextPreviousButtonCssClass="PageNumbers" NextPageText=" > "
 330:           PreviousPageText=" < " />
 331:    </Fields>
 332:  </asp:DataPager>
 333:   
 334:   
 335:  下图显示的分页用户界面使用 NextPreviousPagerField 对象显示下一个、上一个、第一个以及最后一个数据页的链接。分页用户界面还包括 TemplatePagerField 模板中的自定义内容,此模板用于显示当前的项编号范围以及总项数。TemplatePagerField 模板包含一个文本框,用户可以在其中输入要移到的项的编号。指定的项将显示为页面的第一项。
 336:   
 337:  使用 TemplatePagerField 对象 
 338:  下面的示例演示如何创建分页用户界面。
 339:   
 340:    “复制”图像复制代码 
 341:  <asp:DataPager runat="server" ID="EmployeesDataPager" PageSize="8">
 342:    <Fields>
 343:      <asp:TemplatePagerField>
 344:        <PagerTemplate>
 345:          &nbsp;
 346:          <asp:TextBox ID="CurrentRowTextBox" runat="server"
 347:               AutoPostBack="true"
 348:               Text="<%# Container.StartRowIndex + 1%>" 
 349:               Columns="1" 
 350:               style="text-align:right" 
 351:               OnTextChanged="CurrentRowTextBox_OnTextChanged" />
 352:          to
 353:          <asp:Label ID="PageSizeLabel" runat="server" Font-Bold="true"
 354:               Text="<%# Container.StartRowIndex + Container.PageSize > Container.TotalRowCount ? Container.TotalRowCount : Container.StartRowIndex + Container.PageSize %>" />
 355:          of
 356:          <asp:Label ID="TotalRowsLabel" runat="server" Font-Bold="true"
 357:               Text="<%# Container.TotalRowCount %>" />
 358:        </PagerTemplate>
 359:      </asp:TemplatePagerField>
 360:      <asp:NextPreviousPagerField 
 361:           ShowFirstPageButton="true" ShowLastPageButton="true"
 362:           FirstPageText="|<< " LastPageText=" >>|"
 363:           NextPageText=" > " PreviousPageText=" < " />
 364:    </Fields>
 365:  </asp:DataPager>
 366:   
 367:   
 368:  下面的示例演示了 TextBox 控件(包含在 TemplatePagerField 模板中)的 TextChanged 事件的事件处理程序。该处理程序中的代码会移至用户指定的数据项。
 369:   
 370:  Visual Basic  “复制”图像复制代码 
 371:  Protected Sub CurrentRowTextBox_OnTextChanged(ByVal sender As Object, _
 372:          ByVal e As EventArgs) 
 373:      Dim t As TextBox = CType(sender, TextBox)
 374:      Dim pager As DataPager = _
 375:          CType(EmployeesListView.FindControl("EmployeesDataPager"), _
 376:          DataPager)
 377:      pager.SetPageProperties(Convert.ToInt32(t.Text) - 1, _
 378:          pager.PageSize, True)
 379:  End Sub
 380:   
 381:  C#  “复制”图像复制代码 
 382:  protected void CurrentRowTextBox_OnTextChanged(object sender, 
 383:      EventArgs e)
 384:  {
 385:      TextBox t = (TextBox)sender;
 386:      DataPager pager = 
 387:          (DataPager)EmployeesListView.FindControl("EmployeesDataPager");
 388:      pager.SetPageProperties(Convert.ToInt32(t.Text) - 1, 
 389:           pager.PageSize, true);
 390:  }
 391:   
 392:   
 393:  返回页首 
 394:   
 395:  “折叠”图像对数据进行排序
 396:  通过在 LayoutTemplate 模板中添加一个按钮,并将该按钮的 CommandName 属性设置为“Sort”,可以对 ListView 控件中显示的数据进行排序。该按钮的 CommandArgument 属性应设置为要用作排序依据的列名。重复单击“Sort”(排序)按钮可在排序方向 Ascending 和 Descending 之间切换。
 397:   
 398:  在“Sort”(排序)按钮的 CommandArgument 属性中,可以指定多个列名。但是,ListView 控件会向整个列表的列应用该排序方向。因此,只有列表的最后一列会应用该排序方向。例如,如果 CommandArgument 包含“LastName, FirstName”,则重复单击“Sort”(排序)按钮会产生某种类似于“LastName, FirstName ASC”或“LastName, FirstName DESC”的表达式。
 399:   
 400:  下面的示例演示了一个 ListView 控件,它包含的“Sort”(排序)按钮将按姓氏对数据排序。
 401:   
 402:    “复制”图像复制代码 
 403:  <asp:ListView runat="server" ID="ListView1" DataSourceID="SqlDataSource1">
 404:    <LayoutTemplate>
 405:      <asp:LinkButton runat="server" ID="SortButton" 
 406:           Text="Sort" CommandName="Sort" CommandArgument="LastName" />
 407:      <table runat="server" id="table1">
 408:        <tr runat="server" id="itemPlaceholder">
 409:        </tr>
 410:      </table>
 411:      <asp:DataPager runat="server" ID="DataPager" PageSize="20">
 412:          <Fields>
 413:            <asp:NumericPagerField ButtonCount="10"
 414:                 PreviousPageText="<--"
 415:                 NextPageText="-->" />
 416:          </Fields>
 417:      </asp:DataPager>
 418:    </LayoutTemplate>
 419:    <ItemTemplate>
 420:      <tr runat="server">
 421:        <td><asp:Label runat="server" ID="FirstNameLabel" 
 422:                 Text='<%# Eval("FirstName")' /></td>
 423:        <td><asp:Label runat="server" ID="LastNameLabel" 
 424:                 Text='<%# Eval("LastName")' /></td>
 425:      </tr>
 426:    </ItemTemplate>
 427:  </asp:ListView>
 428:   
 429:   
 430:  动态设置排序表达式
 431:  通过动态设置 ListView 控件的排序表达式,可以创建自定义排序。若要执行此操作,请调用 Sort 方法或处理 Sorting 事件。
 432:   
 433:  下面的示例演示 Sorting 事件的处理程序。此代码将向 SortExpression 属性中的所有列应用同一排序方向。
 434:   
 435:  Visual Basic  “复制”图像复制代码 
 436:  Protected Sub ContactsListView_Sorting(ByVal sender As Object, _
 437:          ByVal e As ListViewSortEventArgs)
 438:   
 439:      If (String.IsNullOrEmpty(e.SortExpression)) Then Return
 440:   
 441:      Dim direction As String = ""
 442:      If Not (ViewState("SortDirection") Is Nothing) Then
 443:          direction = ViewState("SortDirection").ToString()
 444:      End If
 445:      
 446:      If direction = "ASC" Then
 447:          direction = "DESC"
 448:      Else
 449:          direction = "ASC"
 450:      End If
 451:   
 452:      ViewState("SortDirection") = direction
 453:   
 454:      Dim sortColumns As String() = e.SortExpression.Split(","c)
 455:      Dim sortExpression As String = sortColumns(0) & " " & direction
 456:      Dim i As Integer
 457:      For i = 1 To sortColumns.Length - 1
 458:          sortExpression += ", " & sortColumns(i) & " " & direction
 459:      Next i
 460:      e.SortExpression = sortExpression
 461:      
 462:    End Sub
 463:   
 464:  C#  “复制”图像复制代码 
 465:  protected void EmployeesListView_OnSorting(object sender, 
 466:          ListViewSortEventArgs e)
 467:  {
 468:      if (String.IsNullOrEmpty(e.SortExpression)) { return; }
 469:      string direction = "";
 470:      if (ViewState["SortDirection"] != null)
 471:          direction = ViewState["SortDirection"].ToString();
 472:   
 473:      if (direction == "ASC")
 474:          direction = "DESC";
 475:      else
 476:          direction = "ASC";
 477:   
 478:      ViewState["SortDirection"] = direction;
 479:   
 480:      string[] sortColumns = e.SortExpression.Split(',');
 481:      string sortExpression = sortColumns[0] + " " + direction;
 482:      for (int i = 1; i < sortColumns.Length; i++)
 483:          sortExpression += ", " + sortColumns[i] + " " + direction;
 484:      e.SortExpression = sortExpression;
 485:  }
 486:   
 487:   
 488:  返回页首 
 489:   
 490:  “折叠”图像修改数据
 491:  通过为 ListView 控件创建模板,可允许用户编辑、插入或删除单个数据项。
 492:   
 493:  若要使用户能够编辑数据项,可以向 ListView 控件添加一个 EditItemTemplate 模板。在将一个项切换至编辑模式时,ListView 控件将使用编辑模板显示该项。该模板应包含一些数据绑定控件,以便用户可以在其中编辑各个值。例如,该模板可以包含用户可以在其中编辑现有值的文本框。
 494:   
 495:  若要使用户能够插入新项,可以向 ListView 控件中添加一个 InsertItemTemplate 模板。与编辑模板一样,插入模板也应该包含允许输入数据的数据绑定控件。InsertItemTemplate 模板呈现在所显示项的开始或末尾。通过使用 ListView 控件的 InsertItemPosition 属性,可以指定 InsertItemTemplate 模板的呈现位置。
 496:   
 497:  通常需要向模板中添加一些按钮,以允许用户指定要执行的操作。例如,可以向项模板中添加“Delete”(删除)按钮,以允许用户删除该项。
 498:   
 499:  通过在模板中添加“Edit”(编辑)按钮,可允许用户切换到编辑模式。在 EditItemTemplate 中,可以添加允许用户保存更改的“Update”(更新)按钮。此外,还可以添加“Cancel”(取消)按钮,以允许用户在不保存更改的情况下切换回显示模式。
 500:   
 501:  通过设置按钮的 CommandName 属性,可以定义按钮将执行的操作。下表列出了一些 CommandName 属性值,ListView 控件已内置了针对这些值的行为。
 502:   
 503:  Select 
 504:  显示所选项的 SelectedItemTemplate 模板的内容。
 505:   
 506:  Insert 
 507:  在 InsertItemTemplate 模板中,指定应将数据绑定控件的内容保存在数据源中。
 508:   
 509:  Edit 
 510:  指定 ListView 控件应切换到编辑模式,并使用 EditItemTemplate 模板显示项。
 511:   
 512:  Update 
 513:  在 EditItemTemplate 模板中,指定应将数据绑定控件的内容保存在数据源中。
 514:   
 515:  Delete 
 516:  从数据源中删除项。
 517:   
 518:  Cancel 
 519:  取消当前操作。显示 EditItemTemplate 模板时,如果该项是当前选定的项,则取消操作会显示 SelectedItemTemplate 模板;否则将显示 ItemTemplate 模板。显示 InsertItemTemplate 模板时,取消操作将显示空的 InsertItemTemplate 模板。
 520:   
 521:  (自定义值) 
 522:  默认情况下,不执行任何操作。您可以为 CommandName 属性提供自定义值。随后可以在 ItemCommand 事件中测试该值并执行相应的操作。
 523:   
 524:  有关配置为允许执行编辑、删除和插入操作的 ListView 控件的示例,请参见演练:使用 ListView Web 服务器控件修改数据。
 525:   
 526:  返回页首 
 527:   
 528:  “折叠”图像对 ListView 项应用样式
 529:  ListView 控件不支持 BackColor 和 Font 等样式属性。若要向 ListView 控件应用样式,必须对 ListView 模板中的各个控件应用级联样式表 (CSS) 类或内联样式元素。
 530:   
 531:  某些对象支持允许对输出元素设置样式的属性。例如,NumericPagerField 对象包括下列属性:
 532:   
 533:  NumericButtonCssClass 属性,可为用于按页码在数据页间移动的按钮指定 CSS 类名。
 534:   
 535:  CurrentPageLabelCssClass 属性,可为当前页码指定 CSS 类名。
 536:   
 537:  NextPreviousButtonCssClass 属性,可为用于移到数字按钮的下一个或上一个组的按钮指定 CSS 类名。
 538:   
 539:  返回页首 
 540:   
 541:  “折叠”图像类参考
 542:  下表列出了与 ListView 控件相关的关键类。
 543:   
 544:  
 545:   说明
 546:   
 547:  ListView 
 548:   一个服务器控件,它使用用户定义的模板显示数据源的值。此控件可配置为允许用户选择、删除、编辑和插入记录,以及对记录进行排序。
 549:   
 550:  ListViewItem 
 551:   一个对象,表示 ListView 控件中的项。
 552:   
 553:  ListViewDataItem 
 554:   一个对象,表示 ListView 控件中的数据项。
 555:   
 556:  ListViewItemType 
 557:   一个枚举,用于标识 ListView 控件中各个项的功能。
 558:   
 559:  DataPager 
 560:   一个服务器控件,可为实现 IPageableItemContainer 接口的控件(例如 ListView 控件)提供分页功能。
 561:   
 562:  NumericPagerField 
 563:   一个 DataPager 字段,它允许用户按页码选择数据页。
 564:   
 565:  NextPreviousPagerField 
 566:   一个 DataPager 字段,它允许用户逐页浏览数据页,或者跳到第一个或最后一个数据页。
 567:   
 568:  TemplatePagerField 
 569:   一个 DataPager 字段,它允许用户创建自定义分页用户界面。
 570:   
 571:   
 572:  返回页首 
 573:   
 574:  “折叠”图像代码示例
 575:  以下部分包含使用 ListView 控件的代码示例。
 576:   
 577:  帮助和演练主题
 578:  演练:使用 ListView Web 服务器控件对数据进行显示、分页和排序 
 579:   
 580:  演练:使用 ListView Web 服务器控件修改数据 
 581:   
 582:  返回页首 
 583:   
 584:  “折叠”图像请参见
 585:  概念
 586:  ASP.NET 全球化和本地化
 587:  ASP.NET 辅助功能
 588:  ASP.NET 数据绑定 Web 服务器控件概述
 589:  绑定到数据库
 590:  数据源控件概述
 591:  “页脚”图像发送反馈意见,就此主题向 Microsoft 发送反馈意见。
原文地址:https://www.cnblogs.com/kim0zh/p/3420902.html