1

我是 ASP.NET 的新手,目前在 DetailsView 中的下拉列表有问题。

异常错误:System.InvalidOperationException:Eval()、XPath() 和 Bind() 等数据绑定方法只能在数据绑定控件的上下文中使用。

我有这段代码,我的代码在后面刷新 DetailsView 中下拉列表的列表

protected void ddlVendor_SelectedIndexChanged 
               (object sender, EventArgs e) 
{ 
    DropDownList ddlVendorBB = 
        (DropDownList)DetailsView1.FindControl("VendorBUName"); 

    if (ddlVendorBB != null) 
    { 
        Response.Write("SelectChanged"); 
        ddlVendorBB.DataBind(); 
    } 
} 

protected void SqlDataSourceProd_Selecting 
    (object sender, SqlDataSourceSelectingEventArgs e) 
{ 
    DropDownList ddlVendor = 
        (DropDownList)DetailsView1.FindControl("VendorName"); 

    if (ddlVendor != null) 
    { 
        e.Command.Parameters["@VendorID"].Value = ddlVendor.SelectedValue; 
    } 
}

DetailsView 中的这两个下拉列表

<EditItemTemplate> 
    <asp:DropDownList id="VendorName"
        datasourceid="VendorSqlDataSource"
        AutoPostBack="true"
        datatextfield="VendorName"
        DataValueField="VendorID"   
        SelectedValue='<%# Bind("VendorID") %>'  
        runat="server"
        OnSelectedIndexChanged="ddlCategory_SelectedIndexChanged" />

    <asp:SqlDataSource ID="VendorSqlDataSource"
        ConnectionString="<%$Connectionstrings:ConnectionString%>" 
        SelectCommand="SELECT VendorID, VendorName from MDF_Vendor"
        runat="server"> 
    </asp:SqlDataSource> 
</EditItemTemplate> 


<EditItemTemplate>
    <asp:DropDownList id="VendorBUName"
        datasourceid="VendorBUSqlDataSource" 
        datatextfield="VendorBUName"
        DataValueField="VendorBUID"   
        SelectedValue='<%# Bind("VendorBUID") %>'  
        runat="server"/>

    <asp:SqlDataSource ID="VendorBUSqlDataSource"
        runat="server"
        ConnectionString="<%$Connectionstrings:ConnectionString%>"
        selectcommand="SELECT VendorBUID, VendorBUName
                       from MDF_VendorBU
                       Where VendorID = @VendorID"
        OnSelecting="SqlDataSourceProd_Selecting"> 
        <SelectParameters> 
            <asp:Parameter Name="VendorID" Type="Int32" /> 
        </SelectParameters> 
    </asp:SqlDataSource> 
</EditItemTemplate>

问题是:

如果我将 SelectedValue= 留在那里,则编辑模式下的下拉列表会在我第一次单击编辑时在列出的项目中选择正确的值,但是当我选择新的供应商名称时,它会出错“数据绑定方法,例如 Eval()、Xpath() 和绑定()...“。

现在,如果我删除了下拉列表的 Selectedvalued,它将在选择新的 VendorName 时刷新 VendorBUName,但在单击“编辑”时不会选择默认的 VendorID。它只是列出了 VendorName 列表,而没有选择当前的 VendorID 之一。

有人可以让我知道我的代码有什么问题吗?谢谢!

4

1 回答 1

1

正如错误所述,您不能在尝试使用它的地方使用 Bind。您应该可以使用DataBinder

SelectedValue='<%# DataBinder.Eval (Container.DataItem, "VendorBUID") %>'

编辑:由于使用 DataBinder 将值绑定到 SelectedValue 不起作用,您可以尝试在绑定数据时设置该值。提供的 dataSource 是具有名为的属性的类的某个实例VendorBUID,类似于此的东西可能适用于

public override void OnLoad(EventArgs e) {
    VendorBUName.DataBinding += dataBindDropDown;
}

private void dataBindDropDown(object sender, EventArgs e) {
    VendorBUName.SelectedValue = dataSource.VendorBUID;
}
于 2012-10-09T23:10:30.800 回答