web-dev-qa-db-ja.com

onDataBindingイベント中に個々のドロップダウンリストアイテム(色など)をフォーマットする方法

ObjectDataSourceにバインドされた基本的なDropDownListがあります。

<asp:DropDownList ID="DropDownList1" runat="server" 
AutoPostBack="True" DataSourceID="objDataSource1" 
DataTextField="FieldName" DataValueField="FieldID" />

DataTextFieldDataValueFieldの値を受け取るDataTableは、レコードに関するその他の興味深い情報も返します。いう Active = Y/N簡単にするために。

私がやりたいのは、データソース結果のアクティブフィールドに基づいて、DropDownListアイテムのbackground-colorプロパティを設定することです。さらに、DropDownListがデータにバインドされている場合と「同じパスで」これを実行したいと思います。したがって、私の推測では、OnDataBound中に発生する必要があります。

私がすでに知っている/試したこと:

  1. 後で戻ってDropDownListアイテムをループすることができます。ただし、ループの埋め込みとDataTable行への再アクセスが必要になり、非効率に思えます

     int row;
     for (row = 0; row < DropDownList1.Items.Count - 1; row++)
     {
        [[if this row = that data row]]
         DropDownList1.Items[row].[[DoStuffHere, etc.]]
     }
    
  2. OnRowDataBounds eにアクセスすることにより、GridView GridViewRowEventArgイベントでこのようなことをすでに行っています。私が見逃しているように見えるのは、いわばOnDropDownListItemBoundイベントです。

私が明確で簡潔であることを願っています。簡単なはずなのに….

13
LesterDove

データは実際にはまだバインドされていないため、OnDataBinding中には実行できません。ベストショットは(1)です。つまり、OnDataBoundを使用して、アイテムをループします。

protected void DropDownList1_DataBound(object sender, EventArgs e)
{
    foreach(ListItem myItem in DropDownList1.Items)
    {
         //Do some things to determine the color of the item
         //Set the item background-color like so:
         myItem.Attributes.Add("style","background-color:#111111");
    }
}
24
Matthew Jones

私はこのコードを使用していますが、正常に機能しています。

DropDownList1.Items(0).Attributes.CssStyle.Add("color", "Blue");
DropDownList1.Items(0).Attributes.CssStyle.Add("background-color", "#eae9e9");
1
Salah Salem