我有一個綁定到自定義對象(EntitySpaces查詢)的Repeater控件,並且已經注意到有兩種方法可以有條件地格式化顯示的值。在數據綁定控件中應用條件格式時的最佳做法?
1)從我的aspx我可以在後臺代碼調用的方法和通過該結合的值,並用它來驅動任何條件邏輯:
<a class="star" href="<%#MakePackageSelectionUrl((int)DataBinder.Eval(Container.DataItem, "PackageId"))%>">
and then in the code-dehind:
protected string MakePackageSelectionUrl(int packageId)
{
return string.Format("/Packages/NoAjax/ToggleStar.aspx?p={0}&s={1}&st={2}", packageId, _streamId, (int)_phase);
}
2)I可以掛接到ItemDataBound事件,檢索e.Item.DataItem強制轉換爲DataRowView的,然後發瘋:
protected void PackageList_ItemDataBound(Object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType != ListItemType.Item && e.Item.ItemType != ListItemType.AlternatingItem) { return; }
DataRowView details = (DataRowView)e.Item.DataItem;
EncodePackageName(e, details);
EncodeStatusName(e);
DisplayStarImage(e, details);
}
private static void EncodePackageName(RepeaterItemEventArgs e, DataRowView dr)
{
HtmlAnchor p = (HtmlAnchor)e.Item.FindControl("packageLink");
if (p != null)
{
p.HRef = string.Format("/Packages/View.aspx?p={0}", dr["packageId"]);
p.InnerHtml = HttpUtility.HtmlEncode((string)dr["packageName"]);
}
}
我也注意到,在使用e.Item.FindControl()代碼後需要對控制RUNAT =「服務器」在aspx中有一個令人討厭的編碼id習慣,並且通常搞亂了HTML。
我很想聽到任何人提出了處理這類問題的好方法。