使用绑定下降,价值通过其他人下降

时间:2011-08-08 18:18:20

标签: c# asp.net

我有三个下拉菜单,并且它们都绑定到相同的数据,现在我尝试在客户端返回到它们存储的最后设置时选择下拉值。他们将映射到下拉列表中的那些。我遇到的问题是,无论最后一次下拉正在采取什么价值......都默认为其他值,尽管我设置的是带有值的下拉1,带有值的下拉2和带有不同值的下拉3 ...但所有选择都是第3次下拉的值。

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;
            }

对于所有下降,它默认为最后一个的值..任何想法为什么?或者我如何解决这个问题。谢谢。

2 个答案:

答案 0 :(得分: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;

修改

行;这就是我要做的事情,试着把它清理干净:

1。)创建一个静态方法,返回ListItems的集合。这就是你要将你的DropDownLists绑定到的地方。

2.。)将ListItems的集合绑定到每个下拉列表的DataSource;然后调用DataBind()。

3.。)使用保存的用户值预先设置每个DropDownList。

使用ObjectDataSource也是一种有效的方法;但上面应该让你朝着正确的方向前进。不要添加到DropDownList Items集合;因为这首先让你陷入困境。希望这会有所帮助。

答案 1 :(得分:0)

你应该重构你的代码。我们可以帮助您解决问题,但您的基础不是很扎实。

  1. 仅在BindMyItems()

  2. 时致电Page.IsNotPostback()
  3. BindMyItems内,将所有3个DDL绑定到您拥有的数据视图。在.DataBind()之后,然后使用.InsertAt(0, liDefault)插入默认值。

  4. 前两个步骤将始终发生;现在,如果要加载从数据库保存的值,可以创建另一个名为LoadDDLValues()的函数

  5. LoadDDLValues()内,您使用了已有的加载逻辑(很好)。只有当您加载其他值的页面时才会调用此函数(通常只在Page.IsNotPostback()或刷新数据时加载一次)