我的asp.net页面上有一个Datalist,ImageButton
中有一个<Item Template>
。单击ImageButton
后,我使用ItemCommand
事件设置数据项的边框:
protected void dlProducts_ItemCommand(object source, DataListCommandEventArgs e)
{
e.Item.BorderColor = System.Drawing.ColorTranslator.FromHtml("#ff5800");
e.Item.BackColor = System.Drawing.ColorTranslator.FromHtml("#ffeee5");
}
工作正常,但发生回发时边框消失了。我已尝试在页面加载事件中绑定我的datalist,如下所示:
if (!Page.IsPostBack)
{
dlProducts.DataSource = ObjectDataSource4;
dlProducts.DataKeyField = "Product_ID";
dlProducts.DataBind();
}
但是在回发后边界消失了。是什么给了什么?
这是datalist标记:
<asp:DataList ID="dlProducts" runat="server" CellPadding="5" CellSpacing="5"
OnItemCommand="dlProducts_ItemCommand"
RepeatColumns="4" RepeatDirection="Horizontal"
ondatabinding="dlProducts_DataBinding"
onitemdatabound="dlProducts_ItemDataBound" >
<ItemTemplate>
<asp:ImageButton ID="img" ImageAlign="Middle" runat="server"
ImageUrl='<%# "~/uploads/profile/" + DataBinder.Eval(Container.DataItem,"ProfileImageName").ToString() %>'
onclick="img_Click" />
</ItemTemplate>
</asp:DataList><asp:ObjectDataSource ID="ObjectDataSource4" runat="server" SelectMethod="GetAllCompetitorProducts"
TypeName="DalProduct" OldValuesParameterFormatString="original_{0}">
<SelectParameters>
<asp:SessionParameter Name="producttype_id" SessionField="ProductType_id" Type="Int32" DefaultValue="13" />
<asp:SessionParameter DefaultValue="2009" Name="Year" SessionField="Year" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
答案 0 :(得分:1)
试试这个:
<ItemTemplate>
<div id="divImg" runat="server">
<asp:ImageButton ID="img" ImageAlign="Middle" runat="server"
ImageUrl='<%# "~/uploads/profile/" + DataBinder.Eval(Container.DataItem,"ProfileImageName").ToString() %>'
onclick="img_Click" />
</div>
</ItemTemplate>
在ItemCommand中
protected void dlProducts_ItemCommand(object source, DataListCommandEventArgs e)
{
var divImg = (HtmlGenericControl)e.Item.FindControl("divImg");
divImg.Style.Add("background-color", "#ffeee5");
}
正如您所看到的,img控件现在包含在服务器div元素中,以便在发生回发时自动从viewstate恢复其状态。话虽如此,它与回发工作正常,但如果你重新绑定你的网格,它将失去其风格。为了在重新绑定后继续,在itemcommand上将img的id存储在viewstate中并应用样式。
另外,我建议在div元素中使用class属性,而不是在代码隐藏中应用颜色。
divImg.Attributes.Add("class", "classnamewhichhasgroundandbordercolor");