2013-01-20 24 views
0

如何正確調用自定義綁定表達式中的方法?是否有複雜性,因爲dropdownlist是在detailsview中?設置BackColor到綁定到ObjectDataSource裏面的DropDownList中的項目DetailsView

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

所以它的工作原理,結果是不希望的,拋出異常,什麼都沒有?它應該工作,但我更喜歡['DataBound'事件](http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.basedataboundcontrol.databound.aspx)加載' DropDownList'。 –

回答

1

所以,我有兩個錯誤:

1)我需要到的Container.DataItem投給我使用爲ObjectDataSource類對象。投射後,下拉列表中每個項目的BackColor與已鑄造的Container.DataItem的StatusID相匹配。

2)不幸的是,這給了所有的項目相同的顏色,因爲我希望每個項目的顏色反映他們自己的附加到下拉列表的價值。這是因爲dropdownlist在其DetailsView外部有一個objectdatasource。因此,下拉列表中的selectedValue項目決定了所有其他項目的顏色。

我決定去與蒂姆的建議和領帶的背景色在數據綁定情況下每個項目設置:顯示

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

+0

+1你可以接受你自己的答案。 –

相關問題