0

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

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

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

4

1 回答 1

1

所以,我犯了两个错误:

1) 我需要将 Container.DataItem 转换为我用于 ObjectDataSource 的类对象。投射后,下拉列表中每个项目的 BackColor 与投射的 Container.DataItem 的 StatusID 匹配。

2)不幸的是,这给了所有项目相同的颜色,因为我希望每个项目的颜色都反映附加到下拉列表的它们自己的值。这是因为下拉列表在其内部的 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));
    }

}

并显示了正确的行为:

在此处输入图像描述

于 2013-01-20T01:20:07.433 回答