DetailsView DropDownLists

时间:2012-10-09 21:43:03

标签: c# asp.net

我是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 =留在那里,编辑模式下的下拉列表会在我第一次单击编辑时在列出的项目中选择正确的值,但是当我选择新的VendorName时,它会出现错误&#34;数据组合方法,例如Eval() ,Xpath()和Bind()...&#34;。

现在,如果我删除了下拉列表中的Selectedvalued,那么当选择新的VendorName时它将用于刷新VendorBUName,但是当我点击&#34;编辑&#34;时,不会选择默认的VendorID。它只列出VendorName列表而未选择当前的VendorID列表。

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

1 个答案:

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