2016-05-15 4 views
0

今日はかなり奇妙な問題に直面しています。 選択したアイテムをリストに追加するDropDownListを作成しました。 ListはListViewにバインドされます。ASP .NET c#ListViewにデータリスト<Object>を追加DataBild

これはドロップダウンである:それは追加する必要があります一覧<>に追加されます

//This is a global variable 
List<NewApplicationModels> applicationName = new List<NewApplicationModels>(); 

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     string value = ddlChooseNewApplication.SelectedValue.ToString(); 

     applicationName.Add(new NewApplicationModels(){ ApplicationName = value}); 
     ListViewNewApplications.DataSource = applicationName; 
     ListViewNewApplications.DataBind(); 
    } 

:項目は、それが次のコードを実行しますクリックされた

<asp:DropDownList ID="ddlChooseNewApplication" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" AutoPostBack="True"> 
     <asp:ListItem Selected="True">Bitte wählen</asp:ListItem> 
     <asp:ListItem Value="windows">Windows</asp:ListItem> 
     <asp:ListItem Value="mail">E-Mail</asp:ListItem> 
     <asp:ListItem Value="app1">App1</asp:ListItem> 
     <asp:ListItem Value="app2">App2</asp:ListItem> 
     <asp:ListItem Value="app3">App3</asp:ListItem> 
</asp:DropDownList> 

次に、 ListViewに選択したアプリケーションを次のように表示します。

<asp:ListView ID="ListViewNewApplications" runat="server"> 
    <ItemTemplate> 
     <br /><br /> 
     <%# Eval("ApplicationName") %><br /> 

     <asp:Label ID="Label3" runat="server" Text="Titel"></asp:Label><br /> 
     <asp:TextBox ID="tbNewTitle" runat="server"></asp:TextBox><br /><br /> 

     <asp:Label ID="Label4" runat="server" Text="Beschreibung"></asp:Label><br /> 
     <asp:TextBox ID="tbNewDescription" runat="server" TextMode="MultiLine"></asp:TextBox><br /><br /> 
     </div> 
    </ItemTemplate> 
</asp:ListView> 

ListViewへのItemが機能します。問題は、DropDownで新しいItemを選択すると、ListViewの現在のオブジェクトが上書きされることです。私は現在のItemの下に新しいItemを作成します。 間違いはどこですか?

多くのおかげで、事前に

+0

まだデバッグモードで実行しましたか?リストビューのデータソースを設定すると、 'applicationName'リストには何がありますか? 1個以上の商品のみ? –

+0

@ PhamX.Bach常に1つのアイテム。おそらく、アイテムを挿入する際にエラーが発生する可能性があります。何か案は? –

+1

次に、 'applicationName'のリストは'グローバル変数 'です。定義行にデバッグフラグを置き、ドロップダウンリスト(=新しいリスト<...)を変更するたびにリセットされるかどうかを確認する必要があります。それが宣言されている場所を確認できますか?コードビハインドクラスのメンバーですか? –

答えて

1

Editted:static propertyはアプリケーションドメインごとではなく、ユーザーごとなので、解決策はstatic propertyについてSession State

//Add using on top of .cs 
using System.Linq; 

//In cs class 
public partial class name_of_class : Page 
{ 
    private List<NewApplicationModels> applicationName = new List<NewApplicationModels>(); 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      //Do page_load stuff.... 
      Session.Remove("name_here"); //reset the Session when first page load 
     } 
    } 

    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     //Get List from Session 
     applicationName = (List<NewApplicationModels>)Session["name_here"]; 
     if (applicationName == null) 
      applicationName = new List<NewApplicationModels>(); 

     string value = ddlChooseNewApplication.SelectedValue.ToString(); 
     if (!applicationName.Any(item => item.ApplicationName == value)) 
     { 
      applicationName.Add(new NewApplicationModels(){ ApplicationName = value}); 
      Session["name_here"] = applicationName; 

      ListViewNewApplications.DataSource = applicationName; 
      ListViewNewApplications.DataBind(); 
     } 
    } 
} 

を使用するように変更すべきことは、アプリケーションドメインごとであることだけでread here、2 2つの異なる場所から見知らぬ人が同じサーバー(アプリドメイン)内の同じページを閲覧すると、すべてが表示されます。 2回とリストビューは、その後、ユーザーB参照およびドロップダウンリストを変更する2つのアイテムを、持っているとき、ユーザAの変更ドロップダウンリスト、彼はリストビューに3つの項目を取得することを意味し

、ユーザAの2と彼の1は最近(彼はあまりにも何も得ること)を選択します。

+1

これは私の問題を解決しました。どうもありがとうございました! –

+0

親愛なる@ManuelBürge、私はちょうど私の最後の答えが「悪い」解決であることを発見しました。私は解説した解を変更して解決しました。あなたは 'Session'を使うために実装を読んで変更しなければなりません。 –

関連する問題