插入数据之前的DataBind()?

时间:2013-09-13 13:41:23

标签: c# asp.net data-binding

为什么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();

在“not working code”中没有出现“SELECT”项,DataBind()不必刷新下拉列表?

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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