如何在自定义绑定表达式中正确调用方法?是否存在并发症,因为下拉列表位于详细信息视图中?
asp.net代码:
<asp:DropDownList ID="ddlExceptionEditStatus" runat="server"
DataSourceID="odsExceptionsStatus"
DataTextField="Name"
DataValueField="StatusID"
SelectedValue='<%# Bind("StatusID") %>'
BackColor="<%# SetBackColorProp(Container.DataItem) %>">
</asp:DropDownList>
代码背后的代码:
protected System.Drawing.Color SetBackColorProp(object o)
{
System.Drawing.Color statusColor = System.Drawing.Color.White;
string statusName = o as string;
if (statusName != null)
{
statusColor = System.Drawing.ColorTranslator.FromHtml(FISBLL.StatusColors.GetColor(statusName));
return statusColor;
}
else
{
return statusColor;
}
}
不改变背景色。但不会抛出异常。
答案 0 :(得分:1)
所以,我有两个错误:
1)我需要将Container.DataItem转换为我用于ObjectDataSource的类对象。转换后,下拉列表中每个项目的BackColor与已转换的Container.DataItem的StatusID匹配。
2)不幸的是,这给了所有项目相同的颜色,我想让每个项目的颜色反映出附加到下拉列表中的自己的值。这是因为dropdownlist在DetailsView之外有一个objectdatasource。因此,下拉列表中的selectedValue项目决定了所有其他项目的颜色。
我决定采用Tim的建议并为数据绑定事件中的每个项目绑定BackColor设置:
protected string GetColor(string name)
{
return FISBLL.StatusColors.GetColor(name);
}
protected void ddlExceptionEditStatus_DataBound(object sender, EventArgs e)
{
foreach (ListItem item in ((DropDownList)sender).Items)
{
item.Attributes.Add("style", "background-color:" + GetColor(item.Text));
}
}
显示正确的行为: