1

当用户从下拉列表中选择一个值并单击按钮时,该值将添加到第二个列表(也显示在屏幕上)。

问题是当用户单击按钮时,所选值被添加到第二个列表中,但是下拉列表被复制并添加到原始下拉列表中。

所以我们在原始下拉列表中有 1、2、3,用户选择“1”并按下按钮。'1' 被添加到第二个列表并显示在屏幕上,但是当用户单击下拉列表时,它现在包含 2、3、1、2、3

我用断点检查了我的代码,我认为它与.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. 这将清除列表。

但是,就像我之前所说的,我认为您不需要从数据库中重新绑定 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 页面中设置的数据。(我有时需要保留一两行以及数据绑定数据)。

我发现的唯一解决方法是在页面加载中添加一个条件,无论页面是否已经从我们的数据库中获取了源。该数据不太可能改变。:

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 回答