2012-10-09 280 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