使用 Visual Studio 「添加新項」→ 「DataSet」,拖入表生成 TableAdapter,自動創建強類型 DataTable 與查詢方法。
<asp:ObjectDataSource ID="odsCategories" runat="server"
TypeName="Repeater.DataSetEmployeesTableAdapters.CategoriesTableAdapter"
SelectMethod="GetData" />
<asp:Repeater ID="rptCategories" runat="server" DataSourceID="odsCategories"
OnItemDataBound="rptCategories_ItemDataBound">
<HeaderTemplate>
<table border="1"><thead><tr>
<th>ID</th><th>名稱</th><th>描述</th><th>圖片</th>
</tr></thead><tbody>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><%# Eval("CategoryID") %></td>
<td><asp:TextBox ID="txtName" runat="server" Text='<%# Eval("CategoryName") %>' /></td>
<td><%# Eval("Description") %></td>
<td><img src='<%# Eval("Picture") %>' alt="圖片" /></td>
</tr>
</ItemTemplate>
<AlternatingItemTemplate>
<tr style="background-color: #E0E0E0;">
<td><%# Eval("CategoryID") %></td>
<td><asp:TextBox ID="txtName" runat="server" Text='<%# Eval("CategoryName") %>' /></td>
<td><%# Eval("Description") %></td>
<td><img src='<%# Eval("Picture") %>' alt="圖片" /></td>
</tr>
</AlternatingItemTemplate>
<FooterTemplate>
</tbody></table>
</FooterTemplate>
</asp:Repeater>
protected void rptCategories_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{
TextBox txt = (TextBox)e.Item.FindControl("txtName");
if (txt != null && txt.Text.Contains("o"))
txt.BackColor = System.Drawing.Color.Red;
}
}
| 語法 | 說明 |
|---|---|
<%# Eval("Field") %> | 單向綁定,調用 DataBinder.Eval,支持屬性路徑 Customer.Name。 |
<%# Bind("Field") %> | 雙向綁定,配合編輯/更新(Repeater 需手動處理)。 |
Container.DataItem | 當前綁定的數據項對象,可在代碼塊中強轉訪問。 |
FindControl("ID") | 在模板命名容器中查找控件,必須在 ItemDataBound 或 ItemCreated 中使用。 |
PagedDataSource 或自定義分頁存儲過程。ObjectDataSource.EnableCaching="true"。ASP.NET Core Razor Pages / MVC:@foreach (var item in Model) { <tr>...</tr> },完全掌控 HTML,無 ViewState、無命名容器查找控件的痛苦。