2011-06-30 9 views
3

から余分な項目を追加するDropDownListは、aspxページのDataSourceに関連付けられています。ページが読み込まれたら、もう1つのアイテムを追加する必要があります。DropdownlistデータソースとC#

マイコード:

<asp:LabelDropDownList ID="ddlVisualTemplate" runat="server" LabelText="Visual Template:"  DataSourceID="VisualTemplateDataSource" DataTextField="Name" DataValueField="Id" AutoPostBack="true" OnSelectedIndexChanged="ddlVisualTemplate_SelectedIndexChanged"/>       

<asp:EntityDataSource ID="VisualTemplateDataSource" runat="server" 
    ConnectionString="name=Entities" 
    DefaultContainerName="Entities" EnableFlattening="False" 
    EntitySetName="tbEmailVisualTemplates"> 

そして、私はそれに余分な項目にしようとしています:私は、コードをデバッグする場合

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      ddlVisualTemplate.Items.Add(new ListItem("None", string.Empty)); 
     } 
    } 

、それを通過します。しかし、ページが表示されるときには、ドロップダウンには"None"が含まれません。

+0

あなたがデータバインドイベント –

答えて

9

これはおそらく、あなたがDataBind()の前に商品を追加しているためです。あなたは

ddlVisualTemplate.Items.Add() 

で項目を追加したいなら、あなたはドロップダウンがバインドされている後にそれをしなければなりません。

http://msdn.microsoft.com/en-us/library/ms178472.aspxを見ると、PreRenderCompleteでDataBindが実行されています。したがって、PreRenderCompleteの後に発生するイベントで要素を追加する必要があります。 または、ddlVisualTemplate.DataBoundイベントで実行できます。

+1

おかげで、レンダリングされていることが、teのデータの後にやるべきでバインドされたドロップダウンリストに項目を追加するには!それがまさに私が探していたものです。 – Sami

6

あなたは簡単にprgrammaticallyデータソースを設定することにより、この問題を解決することができます:

ddlVisualTemplate.DataSource = VisualTemplateDataSource; 
ddlVisualTemplate.DataBind(); 

ddlVisualTemplate.Items.Add(new ListItem("None", string.Empty)); 

ところで、これらのデータソースコントロールが私の意見ではasp.netで間違ったことです。私は、データソースを定義し、aspxページへのdb接続を制御するという考えが嫌いです。リクエストパターンごとのセッション、懸念事項とn層アプリケーションの分離について、これを行うには良い方法です。

更新: "VisualTemplateDataSource"ではなく、直接データを呼び出すことができます。私はEFについてはわかりませんが、 "DataContext.tbEmailVisualTemplates"のようになります。あなたはdatacontextを設定する必要があります。そして、あなたはデータソースコントロールを取り除くことができます。

+1

素晴らしい!ヒントをありがとう – Sami

0

これは私のために修正されましたが、最後に値を置きます。

protected void ddlTest_PreRender(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     ddlTest.Items.Add(new ListItem("All", string.Empty)); 
    } 
} 
+2

ddlTest.Items.Insert(0、新しいListItem( "All"、string.Empty)); アイテムを一番上に置きます – MoMo

12

おそらく手遅れオリジナルポスターが、他のユーザーのために多分便利のために:

あなたが値を追加することができ、「なし」、「値を選択してください」などのデザイナーで(またはコードで)AppendDataBoundItems="true"を設定して、DataBindが上書きしないようにします。これにより、明確ではなく、DataBindが追加されます。

例については、Scott Guthrieの投稿ListControl.AppendDataBoundItems Property in ASP.NET 2.0を参照してください。

1

これを使用して、0インデックス

ddlTicketType.Items.Insert(0, new ListItem("All", "0")); 
関連する問題