2012-10-09 215 views
1

我是ASP.NET新手,目前在DetailsView中存在dropdownlist问题。详细信息视图DropDownLists

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

我有这样的代码我的代码背后刷新列表为dropdownlists在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; 
    } 
} 

这两个dropdownlists在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时,我t错误“数据库方法,如Eval(),Xpath()和Bind()...”。

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

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

+0

开始可能会奏效。 – Patrick

+0

我更新了完全异常错误。我不知道我的帖子出了什么问题。我试图尽可能地格式化。请再次看帖子,尝试评估你的措辞“你应该善待”,在那种不友善的帖子里?请...如果你想帮忙,那么非常感谢! – Milacay

+0

我重新格式化了您的代码以说明我的意思。如果你不喜欢它,你可以自由回滚 – Patrick

回答

1

由于错误状态,您不能在您尝试使用它的情况下使用绑定。您应该能够使用DataBinder虽然

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

编辑:因为值绑定与DataBinder进行的SelectedValue没有工作,你可以尝试结合数据时设置的值。提供数据源是一个类,它有一个名为VendorBUID属性,类似于这样的一些实例通过张贴完整的异常/错误消息

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

private void dataBindDropDown(object sender, EventArgs e) { 
    VendorBUName.SelectedValue = dataSource.VendorBUID; 
} 
+0

谢谢@Patrick,我得到另一个错误“System.ArgumentOutOfRangeException:'VendorBUName'有一个无效的SelectedValue,因为它不存在于项目列表中。”看起来不是寻找价值的页面。 (对不起,我不能在这里评论框格式) – Milacay

+0

@Milacay:你可能无法像这样绑定SelectedValue ..嗯..你想通过设置selectedvalue来完成什么? – Patrick

+0

这是一个DetailsView,所以当我单击Edit时,VendorName和VendorBUName字段更改为下拉列表,SelectedValue将在列出的项目中选择当前的VendorID和VendorBUID。如果我删除了SelectedValue,当我单击Edit时,它将不会选择正确的值。 – Milacay