将BackColor设置为DropDownList中绑定到DetailsView内的ObjectDataSource的项目

时间:2013-01-20 00:32:37

标签: asp.net

如何在自定义绑定表达式中正确调用方法?是否存在并发症,因为下拉列表位于详细信息视图中?

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;
    }        
}

不改变背景色。但不会抛出异常。

1 个答案:

答案 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));
    }

}

显示正确的行为:

enter image description here