2016-03-30 41 views
0

這個問題解決了,請參閱下面的帖子我的評論ASP.NET DropDownList.SelectedValue丟失我nPostBack

我有我的代碼的問題是puzzeling我: 我有一個ASP.NET的DropDownList(簡單,不在gridview或者...),這是靜態數據綁定到數據庫查詢。另外,我在標記添加一個列表項:

<asp:DropDownList ID="ddDeviceSelector" runat="server" DataSourceID="CryringDB_InventoryAssets" DataTextField="Identifier" DataValueField="RowID" AutoPostBack="True" OnTextChanged="ddDeviceSelector_IndexChanged" ToolTip="Select a device by name" AppendDataBoundItems="True" Width="300px"> 
    <asp:ListItem>-- Select Device OR Enter Data of New Device --</asp:ListItem> 
</asp:DropDownList> 
<asp:SqlDataSource ID="CryringDB_InventoryAssets" runat="server" connectionString="<%$ ConnectionStrings:CMSValuesExplicitUser %>" SelectCommand="SELECT valueColumn, textColumns FROM myTable"></asp:SqlDataSource> 

我可以用一個URL查詢參數調用頁面?「擺脫= ...」,其中包含去掉一個特定項目的列表中的價值。當我嘗試解析rid並按值選擇列表中的項目時,DropDownList.SelectedValue不會被設置。 代碼的Page_Load的:

protected void Page_Load(object sender, EventArgs e) 
    { 
     // Code to interpret the parameter rid (RowID) in the URL 
     // provides functionality to open formAssetDetails of an individual object. 
     if (!IsPostBack) 
     { 
      ddDeviceSelector.DataBind(); 
      setUiPropertiesByMode(classConstants.displayMode); 

      String rowID = null; 
      rowID = Request.QueryString["rid"]; 

      if (rowID != null) 
      { 
       setUiPropertiesByMode(classConstants.editMode); 
       ddDeviceSelector.Enabled = true; 
       ddDeviceSelector.Enabled = true; 
       ddDeviceSelector.SelectedValue = rowID; 
      } 
     } 

該代碼的執行沒有問題,但我在調試器看到錯誤信息(行之後斷點 「ddDeviceSelector.SelectedValue = ROWID;」)

錯誤CS0103:該名「的SelectedValue」不會在目前情況下

存在(此消息來自德國的翻譯並可能在英語中是悅目不同)

任何幫助表示讚賞。

+0

問題解決方案: 在我用來調用上面的頁面/代碼的URL中,參數rid是作爲UPPERCASE字符串(數據庫級別的唯一標識符)傳輸的。在運行時,DropDown的項目是小寫的,所以SelectedValue(區分大小寫)不匹配。代碼更改爲: if(rowID!= null) { rowID = rowID.ToLower(); ddDeviceSelector.Enabled = true; ddDeviceSelector.SelectedValue = rowID; setAssetValuesByRowID(rowID); } – WolfiG

回答

0

嘗試在下拉列表中的數據綁定事件,這將確保您的下拉列表與數據完全數據綁定你嘗試設置的SelectedValue之前設置選擇的值,記得要委託這種方法也:

//In your designer file 
ddDeviceSelector.DataBound += new System.EventHandler(ddDeviceSelector_DataBound); 

protected void ddDeviceSelector_DataBound(object sender, EventArgs e) 
{ 
    String rowID = null; 
    rowID = Request.QueryString["rid"]; 

    if (rowID != null) 
    { 
     setUiPropertiesByMode(classConstants.editMode); 
     ddDeviceSelector.Enabled = true; 
     ddDeviceSelector.Enabled = true; 
     ddDeviceSelector.SelectedValue = rowID; 
    } 
} 
+0

嗨,詹姆斯,謝謝你的回答。不幸的是,它沒有工作:( – WolfiG

+0

它是否是相同的錯誤? –

+0

哦 - 對不起,我在這一刻看到,錯誤是由於我的錯誤:我選擇了錯誤的變量來觀看...仍然,SelectValue我檢查了ddDeviceSelector的項目 - 我想要選擇的項目在那裏,但是如果在設置所選值後做了「DataBind()」,則程序崩潰時顯示「值不在列表中」。 – WolfiG