2009-03-24 1 views
6

でカスタムオブジェクトのドロップダウンリストに空の項目を追加します。これを行う1つの方法は、文字列の中間リストを作成し、最初の文字列に空の文字列を取り込み、残りのリストにカスタムオブジェクト情報を入力することです。は、我々はC#でASP.NETのDropDownListにカスタムオブジェクトのリストを結合しているが、我々はDropDownListコントロールが最初に選択された何かを持っていないことを可能にするC#の

しかしこれは非常にエレガントないないようだ、誰もがより良い提案がありますか?

答えて

23

はい、そうのようなあなたのリストを作成します。

<asp:DropDownList ID="Whatever" runat="server" AppendDataBoundItems="True"> 
    <asp:ListItem Value="" Text="Select one..." /> 
</asp:DropDownList> 

AppendDataBoundItems="True"の使用に注意してください)

そして、あなたがバインドするときに、バインドされたアイテムは、空の項目の後に置くのではなく交換しますそれ。あなたがデータバインドさイベントに追加することができ

+0

わかりやすい簡単な作業 – Sauron

+0

あなたがそれを知っていれば簡単です。ありがとうSean。与えることを続けている贈り物。 :) – BobRodes

11

:ちょうどこの上で作業

protected void DropDownList1_DataBound(object sender, EventArgs e) 
     { 
      DropDownList1.Items.Insert(0,new ListItem("","")); 
     } 
+0

かなりの方法私がいなくてもテデータバインドではなく、いつでも後か、数年のためにそれをやっている、あなたは、これは本当に質問に答えていないデータソース+1 –

2

は、実際に、ここでは(カップルのデータバインディンググッズと一緒に)私がこれまでに得たものだ

public interface ICanBindToObjectsKeyValuePair { 
    void BindToProperties<TYPE_TO_BIND_TO>(IEnumerable<TYPE_TO_BIND_TO> bindableEnumerable, Expression<Func<TYPE_TO_BIND_TO, object>> textProperty, Expression<Func<TYPE_TO_BIND_TO, object>> valueProperty); 
} 

public class EasyBinderDropDown : DropDownList, ICanBindToObjectsKeyValuePair { 
    public EasyBinderDropDown() { 
     base.AppendDataBoundItems = true; 
    } 
    public void BindToProperties<TYPE_TO_BIND_TO>(IEnumerable<TYPE_TO_BIND_TO> bindableEnumerable, 
     Expression<Func<TYPE_TO_BIND_TO, object>> textProperty, Expression<Func<TYPE_TO_BIND_TO, object>> valueProperty) { 
     if (ShowSelectionPrompt) 
      Items.Add(new ListItem(SelectionPromptText, SelectionPromptValue)); 
     base.DataTextField = textProperty.MemberName(); 
     base.DataValueField = valueProperty.MemberName(); 
     base.DataSource = bindableEnumerable; 
     base.DataBind(); 
    } 
    public bool ShowSelectionPrompt { get; set; } 
    public string SelectionPromptText { get; set; } 
    public string SelectionPromptValue { get; set; } 
    public virtual IEnumerable<ListItem> ListItems { 
     get { return Items.Cast<ListItem>(); } 
    } 
} 

お知らせ一つのことあなたが行うことができます

dropDown.BindToProperties(myCustomers, c=>c.CustomerName, c=>c.Id); 
1

まず次のとおりです。

DropDownList1.Items.Clear();

次にドロップダウンリストにのlistItemsを追加します。

これは、アイテム、それがポストバックまたは非同期ポストバックでレンダリングされるたびに増え続けるリストを取得からDropDownListコントロールを防ぎます。

+0

設定されますが、1私はASPを始めたときに理由.NET、私はこれをひどく知る必要があった、hehe :)私はそれを把握するために数時間かかりました。 – SirDemon

関連する問題