0

为什么在DataBind()“作品”下方的代码中仅在Insert()

工作代码:

DataView dvTransportadora = dtTransportadora.DefaultView;
dvTransportadora.Sort = "NICKNAME ASC";

ddlTransportadora.DataSource = dvTransportadora;
ddlTransportadora.DataValueField = "ID_CUSTOMER";
ddlTransportadora.DataTextField = "NICKNAME";
ddlTransportadora.DataBind();

ListItem lstItmSelecione = new ListItem("SELECT", "0");
ddlTransportadora.Items.Insert(0, lstItmSelecione);

不工作代码:

DataView dvTransportadora = dtTransportadora.DefaultView;
dvTransportadora.Sort = "NICKNAME ASC";

ddlTransportadora.DataSource = dvTransportadora;
ddlTransportadora.DataValueField = "ID_CUSTOMER";
ddlTransportadora.DataTextField = "NICKNAME";

ListItem lstItmSelecione = new ListItem("SELECT", "0");
ddlTransportadora.Items.Insert(0, lstItmSelecione);

ddlTransportadora.DataBind();

在“不工作的代码”中,项目“SELECT”没有出现,DataBind() 不需要刷新下拉列表吗?

4

4 回答 4

3

绑定数据时,它将清除当前集合中的所有项目,并为数据源中的每个新项目创建新项目。

您需要将附加项添加到基础数据源,而不是将其插入控件本身,或者您需要执行第一个示例中所做的操作并在直接插入任何项之前绑定数据。

于 2013-09-13T13:45:36.183 回答
0

当您使用 DataBind 时,您实际上是在删除之前存在的内容,因为您正在设置 DataSource。但是,一旦绑定到数据,您就可以添加到列表中。下次刷新时它可能不存在。

为防止新值被覆盖,您可以直接添加到数据源。例如,假设控件绑定到BindingSource,您可以调用 AddNew 方法。如果数据来自数据库,您需要将新值添加到数据库中,然后再次调用 DataBind,或者根据您的方案执行任何必要的操作。

于 2013-09-13T13:45:27.457 回答
0

DataBind() 仅在 Insert() 之前“起作用”,因为 DataBind() 将清除下拉列表中的所有数据并将所有数据添加到数据源中。因此,您在数据绑定之前插入的任何内容都会删除或清除。

于 2013-09-13T13:58:56.053 回答
0

DropDownList 是一个 ListControl,所有 ListControl 都有一个名为 AppendDataBoundItems 的属性(默认为 false)。如果将此属性设置为 true,则由于调用 DataBind() 而创建的任何项目都不会首先清除已经存在的项目,而是将它们附加到列表中。在这种情况下,不应清除您自己的物品。

于 2013-09-13T14:14:28.693 回答