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

そのため、次の 2 つの間違いがありました。

1) ObjectDataSource に使用していたクラス オブジェクトに Container.DataItem をキャストする必要がありました。キャスト後、ドロップダウン リストの各項目の 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 に答える