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="width: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="width: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 发送反馈意见。

你可能感兴趣的:(ListView)