1

ユーザーがドロップダウン リストから値を選択してボタンをクリックすると、値が 2 番目のリストに追加されます (これも画面に表示されます)。

問題は、ユーザーがボタンをクリックすると、選択した値が 2 番目のリストに追加されますが、ドロップダウン リストが複製され、元のドロップダウン リストに追加されます。

元のドロップダウンには 1、2、3 があり、ユーザーは「1」を選択してボタンを押します。「1」が 2 番目のリストに追加され、画面に表示されますが、ユーザーがドロップダウンをクリックすると、2、3、1、2、3 が含まれるようになります。

Iv はブレーク ポイントを使用してコードを実行しましたが、.dataSource と関係があると思います。

protected void UpdatePage()
{
   int Id = System.Convert.ToInt32(Id.Value);

   List<Contractor> allContractors = new List<Contractor>();
   ClarkeDBDataContext db = new ClarkeDBDataContext();

   allSubContractors = (from BoqContractors in db.BOQ_Contractors
                        where BoqContractors.Bill_Of_Quantity_id == tempBoqId
                        select BoqContractors.Contractor).ToList();

   repeaterShowContractorName.DataSource = allContractors;
   repeaterShowContractorName.DataBind();

   IEnumerable<Sub> availableContractors = 
       (from sc in db.Contractors
        select sc).ToList().Except(allContractors);

    //i've tried to set it to null to test it, but to no avail
    DropDownListContractors.DataSource = null;
    DropDownListContractors.DataSource = availableContractors;
    DropDownListContractors.DataBind();
 }
4

2 に答える 2

2

ViewStateとPostbackのため、元の値はddlに存在します。ddlはPostbackで再入力されます。これが元の値が存在する理由です。

このユースケースでデータベースからデータを再取得する必要がある理由がわかりません。データベースからリストを更新する必要がある場合は、をDropDownListContractors.Clear()設定する前に呼び出すだけDataSourceです。これでリストがクリアされます。

しかし、前に述べたように、dbからddlを再バインドする必要はないと思います。コードからこれらの行を削除するだけで(ポストバックする場合)、希望どおりに機能するはずです。

   IEnumerable<Sub> availableContractors = 
       (from sc in db.Contractors
        select sc).ToList().Except(allContractors);

    //i've tried to set it to null to test it, but to no avail
    DropDownListContractors.DataSource = null;
    DropDownListContractors.DataSource = availableContractors;
    DropDownListContractors.DataBind();
于 2013-02-07T17:02:29.157 に答える
0

VB 側では、DropDownListContractors.ClearSelection() では十分ではありません。データが選択されていない場合、私の場合は何もありませんが、リスト内のデータをクリアする必要があります。

DropDownListContractors.Items.Clear() を使用するだけで、aspx ページに設定されたリスト内のデータが既に消去されます。(データバインドデータとともに、1行または2行を保持する必要がある場合があります)。

私が見つけた唯一の回避策は、ページがデータベースからソースを既に取得しているかどうかにかかわらず、ページロードに条件を追加することです。そのデータは変更される可能性が低くなります。

If Not Page.IsPostBack Then
  'myComboBox.Items.Clear() 
  'Can't use this, i got one or two items i gotta keep from the aspx page
  'myComboBox.DataSource = Nothing 
  'DOESNT WORK
  myComboBox.DataSource = someSource
  myComboBox.DataBind()
End If

私があなたのケースにいた場合、items.clear() を呼び出して、必要な項目を .vb コード ビハインドに手動で追加するだけです。

于 2013-03-12T20:42:18.893 に答える