2011-08-08 3 views
0

私は3つのドロップダウンがあり、それらはすべて同じデータにバインドされているので、クライアントが最後に保存した設定に戻ったときにドロップダウン値を選択しようとしています。彼らはドロップダウンのものにマップします。私が抱えている問題は、最後のドロップダウンが何を取っているかということですが、ドロップダウン1を値で設定していますが、値2でドロップし、別の値でドロップ3 ...すべてが3番目のドロップダウンの値に選択されています。それは最後の1の値をデフォルトされたすべてのドロップダウンのためにバインドされたドロップダウンを使用すると、他の人に落ちる値

var item1 = ddlMyItem1.Items.FindByValue("1"); 

      if(item1!=null) 
      { 
       ddlMyItem1.ClearSelection(); 
       item1.Selected = true; 
      } 

      var item2 = ddlMyItem2.Items.FindByValue("2"); 

      if (item2 != null) 
      { 
       ddlMyItem2.ClearSelection(); 
       item2.Selected = true; 
      } 
      var item3 = ddlMyItem3.Items.FindByValue("3"); 

      if (item3 != null) 
      { 
       ddlMyItem3.ClearSelection(); 
       item3.Selected = true; 
      } 

..任意のアイデアなぜですか?または私がこれを修正する方法..ありがとう。

+0

あなたはASPXファイルでコントロールの宣言を投稿することができ、他の値が(Page.IsNotPostback()たり、データを更新する際、通常はそれが一度だけロードされています)のページをロードする際にこの機能は、呼び出される必要がありますか? –

答えて

1

私はこれがあなたのデータ結合に関係していると思います。

私はオフかもしれないが、あなたはこのようにデータバインディングしている場合:

foreach(var item in myListItems) 
    ddlMyItem1.Items.Add(item) 

foreach(var item in myListItems) 
    ddlMyItem2.Items.Add(item) 

foreach(var item in myListItems) 
    ddlMyItem3.Items.Add(item) 

各リスト項目への参照は、すべてのドロップダウンでも同じです。 Itemsコレクションを手動で構築する代わりに。 DataSourceプロパティを使用する方がよいでしょう。ユニークな参照が作成されます。したがって、このような何か:

 var list = new ListItemCollection {new ListItem("1", "1"), new ListItem("2", "2"), new ListItem("3", "3")}; 

     DropDownList1.DataSource = list; 
     DropDownList1.DataBind(); 

     DropDownList2.DataSource = list; 
     DropDownList2.DataBind(); 

     DropDownList3.DataSource = list; 
     DropDownList3.DataBind(); 

     var item = DropDownList3.Items.FindByValue("3"); 
     item.Selected = true; 

EDIT:

OK。ここで私はこれをクリーンアップしようとします:

1.)ListItemsのコレクションを返す静的メソッドを作成します。これはあなたのDropDownListsをバインドするものです。

2.)各ドロップダウンのDataSourceにそのListItemのコレクションをバインドします。 DataBind()を呼び出します。

3.)各DropDownListには、保存されたユーザーの値があらかじめ設定されています。

ObjectDataSourceを使用することも可能です。しかし、上記はあなたを正しい方向に向かわせるはずです。 DropDownList Itemsコレクションには追加しないでください。それが最初の問題であなたを困惑させているからです。お役に立てれば。

+0

こんにちは、はい、私はあなたが正しいと思いますが、私は既存のコードでそれを実装する方法がわかりません..私はちょっと混乱しています..私は上にあるコードを書いた – user710502

+0

Nevermind、あなたの助言のために、私は各liのための新しいインスタンスを追加し、それは働いた – user710502

0

コードをリファクタリングする必要があります。私たちはあなたの問題を解決するのを手助けすることができますが、あなたの基礎はあまり強固ではありません

  1. のみ呼び出すあなたBindMyItems()BindMyItemsインサイドPage.IsNotPostback()

  2. は、あなたが持っているデータビューにすべての3 DDLをバインドします。 .DataBind()の後に、.InsertAt(0, liDefault)を使用してデフォルト値を挿入します。

  3. 最初の2つの手順は常に行われます。データベースから保存した値をロードする場合は、LoadDDLValues()

  4. の中にあるLoadDDLValues()という内部関数を作成します。これはすでにロードロジックを使用しています(問題ありません)。あなたは

関連する問題