ListView 內建選擇、排序、分頁支援,透過 CommandName 與模板切換實現零程式碼互動,配合 DataPager 完成完整資料瀏覽體驗。
<asp:ListView ID="ListView1" runat="server" OnSelectedIndexChanging="ListView1_SelectedIndexChanging">
<LayoutTemplate>
<table><tr runat="server" id="itemPlaceholder" /></table>
</LayoutTemplate>
<ItemTemplate>
<tr>
<td><%# Eval("ID") %></td>
<td><asp:Label Text='<%# Eval("Name") %>' runat="server" /></td>
<td><asp:Label Text='<%# Eval("Age") %>' runat="server" /></td>
<td><asp:Button CommandName="Select" Text="選擇" runat="server" /></td>
</tr>
</ItemTemplate>
<SelectedItemTemplate>
<tr style="background-color:Blue">
<td><%# Eval("ID") %></td>
<td><asp:Label Text='<%# Eval("Name") %>' runat="server" /></td>
<td><asp:Label Text='<%# Eval("Age") %>' runat="server" /></td>
<td><asp:Button CommandName="Select" Text="選擇" runat="server" /></td>
</tr>
</SelectedItemTemplate>
</asp:ListView>
protected void ListView1_SelectedIndexChanging(object sender, ListViewSelectEventArgs e)
{
ListView1.SelectedIndex = e.NewSelectedIndex;
BindData(); // 重新繫結套用 SelectedItemTemplate
}
ListView 本身不直接支援排序,需搭配 DataPager 分頁,排序通常在資料來源層(LINQ/SQL OrderBy)或自訂 Sorting 事件處理。
<asp:DataPager ID="DataPager1" runat="server" PagedControlID="ListView1" PageSize="10">
<Fields>
<asp:NextPreviousPagerField FirstPageText="首頁" PreviousPageText="上頁" NextPageText="下頁" LastPageText="末頁" />
<asp:NumericPagerField ButtonCount="10" />
</Fields>
</asp:DataPager>
<asp:ListView ID="ListView1" runat="server" DataKeyNames="ID">...</asp:ListView>
<br />
<asp:DataPager ID="DataPager1" runat="server" PagedControlID="ListView1" ... />
| 功能 | 關鍵屬性/事件 | 模板 |
|---|---|---|
| 選擇 | SelectedIndex, SelectedIndexChanging, SelectedDataKey | SelectedItemTemplate |
| 編輯 | EditIndex, ItemEditing, ItemUpdating, ItemCanceling | EditItemTemplate |
| 插入 | InsertItemPosition, ItemInserting | InsertItemTemplate |
| 刪除 | ItemDeleting, ItemDeleted | — |
| 分頁 | DataPager (外掛控件) | — |