我有一箇中繼器控件,可以從SqlReader生成鏈接列表。我試圖在每個鏈接旁邊創建一個按鈕,以允許用戶刪除該鏈接。我最初的想法是在下面的Item模板中使用<%#Eval(「URL」)%>表達式。然而,ItemCommand方法中的CommandArgument總是回到空。SqlReader,Repeater控件和CommandArgument問題
<asp:Repeater ID="rptLinks" runat="server" onitemdatabound="rptLinks_ItemDataBound"
onitemcommand="rptLinks_ItemCommand">
<ItemTemplate><a href="<%# DataBinder.Eval(Container.DataItem, "URL") %>" target="_blank"><%# DataBinder.Eval(Container.DataItem, "URL") %></a><asp:ImageButton visible="false" ID="btnDeleteLink" runat="server" ImageUrl="/Images/DeleteIcon.gif" CommandName="DELETE" CommmandArgument=<%#Eval("URL") %> />
</ItemTemplate>
<SeparatorTemplate><br /></SeparatorTemplate>
</asp:Repeater>
我想接下來的事情是使用ItemDataBound事件以編程方式設置CommandArgument,但我想不出什麼鑄就e.Item.DataItem強制轉換成這樣我就可以參考[「URL」 ]項目。
protected void rptLinks_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
ImageButton btnDelete;
btnDelete = (ImageButton) e.Item.FindControl("btnDeleteLink");
if (btnDelete != null)
{
btnDelete.Visible = (bool)ViewState["LinkEditing"];
string URL = ((WhatTypeGoesHere)(e.Item.DataItem))["URL"].ToString();
btnDelete.CommandArgument = URL;
}
}
只是一個評論: 在不知道數據源的類型的情況下,是否有可能得到[「URL」]值?假設將來我想將數據源更改爲數據表或XML結構,是不是有辦法編寫ItemDataBound代碼,因此它是不可知的,並且可以用於任何數據源? – Aheho 2009-09-28 17:57:51
更新了我的回答,解釋了爲什麼這裏沒有問題 - 基本上,您並不是將您的ItemDataBound代碼綁定到數據源,而是綁定到您的對象。 – 2009-09-28 18:36:56