2012-01-14 40 views
4

此列表存在這是無效的是我得到的錯誤:的SelectedValue,因爲它並不在項目

ddlRankEdit」具有的SelectedValue是無效的,因爲它在項目列表中未 存在。參數名稱:值

我有一個表格嵌套在一個默認設置爲不可見的面板中的幾個下拉列表。當用戶從單獨的列表框中選擇一條記錄時,所選的索引更改事件將該面板設置爲可見並進行數據調用。那是錯誤發生的時候。看到下面的代碼,我在XXX上添加了它的位置。

<asp:DropDownList runat="server" ID="ddlRankEdit" CssClass="txtfield" DataSourceID="ODCRanks" 
    DataTextField="Rank" DataValueField="ID" AppendDataBoundItems="True"> 
    <asp:ListItem Text="--- Select a Rank ---" Value="-1" />            
    </asp:DropDownList> 
    <asp:ObjectDataSource ID="ODCRanks" runat="server" 
    OldValuesParameterFormatString="original_{0}" SelectMethod="GetRanks" 
    TypeName="RanksTableAdapters.RankTableAdapter"></asp:ObjectDataSource> 

protected void lboxManageMembers_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    pnlReviewMemberDetails.Visible = false; 
    pnlUnlockUserAccount.Visible = false; 
    pnlAdmins.Visible = false; 
    pnlCreateAdmins.Visible = false; 
    lblNote.Visible = false; 
    pnlManageMenbers.Visible = true; 

    MembershipUser user = Membership.GetUser(); 
    DataSetTableAdapters.MemberInfoTableAdapter da = new DataSetTableAdapters.MemberInfoTableAdapter(); 

    Guid _memberId = Guid.Empty; 
    _memberId = new Guid(lbxManageMembers.SelectedValue); 
    DataSet.MemberInfoDataTable dt = da.GetMember(_memberId); 
    if (dt.Rows.Count == 1) 
    { 
     DataSet.MemberInfoRow mr = dt[0]; 

    XXX ddlRankEdit.SelectedValue = Convert.ToString(mr.rankid); 
    XXX ddlPatrolEdit.SelectedValue = Convert.ToString(mr.patrolid); 
    XXX ddlPositionEdit.SelectedValue = Convert.ToString(mr.bsaposid); 

     txtFirstNameEdit.Text = mr.firstname; 
     txtLastNameEdit.Text = mr.lastname; 
     txtEmailEdit.Text = user.Email; 
     txtAddressEdit.Text = mr.address; 
     txtPhoneEdit.Text = mr.phone; 
     txtCellPhoneEdit.Text = mr.altphone; 
     txtAltEmailEdit.Text = mr.altemail; 

     txtMotherFirstNameEdit.Text = mr.parentfn; 
     txtMotherLastNameEdit.Text = mr.parentln; 
     txtMotherWorkPhoneEdit.Text = mr.parentworkphone; 
     txtMotheHomePhoneEdit.Text = mr.parentworkphone; 
     txtMotherCellkPhoneEdit.Text = mr.parentscellphone; 
     txtMotherTwitterEdit.Text = mr.parenttwitter; 
     txtMotherEmailEdit.Text = mr.parentemail; 
     txtMotherAltEmailEdit.Text = mr.parentemailalt; 

     txtFatherFirstNameEdit.Text = mr.parent2fn; 
     txtFatherLastNameEdit.Text = mr.parent2ln; 
     txtFatherWorkPhoneEdit.Text = mr.parent2workphone; 
     txtFatherHomePhoneEdit.Text = mr.parent2workphone; 
     txtFatherCellPhoneEdit.Text = mr.parent2cellphone; 
     txtFatherTwitterEdit.Text = mr.parent2twitter; 
     txtFatherEmailEdit.Text = mr.parent2email; 
     txtFatherAltEmailEdit.Text = mr.parent2emailalt; 
    } 

} 

回答

3

錯誤消息告訴你到底發生了什麼:值,例如存儲在mr.rankid,是不存在的下拉列表。

您需要確定下拉列表是否包含正確的值或您嘗試分配的值在可用值列表中不存在。

更新

既然是含面板,這似乎是導致問題的知名度,這將是更好地隱藏使用CSS不是設置Visible屬性設置爲false面板,這將阻止它從渲染到頁面。

這可以用類似的代碼隱藏在下面的代碼來完成:

Panel1.Style.Add(HtmlTextWriterStyle.Visibility, "Hidden"); 
Panel1.Style.Add(HtmlTextWriterStyle.Display, "None"); 
+0

這是由於面板設置爲inv而導致的生命週期問題isible?數據是正確的。 – Risho 2012-01-15 01:09:25

+0

我曾經想過可能存在一個頁面生命週期問題,但我只是在一個小項目上測試了這個問題,發現即使DDList的可見性設置爲false,值也會正確回發。重現此問題的唯一方法是使用實​​際上不在下拉列表中的值列表中的值。 – 2012-01-15 02:09:38

+0

不知道你是如何做到的,因爲我從一開始就讓面板可見,然後在回發中沒有錯誤。 – Risho 2012-01-15 02:17:39

1

修改這樣的代碼:

if (dataTable1.Rows[0]["columnName"].ToString() != "" && dataTable1.Rows[0]["columnName"] != null) 
    DropDownList1.SelectedIndex = DropDownList1.Items.IndexOf(DropDownList1.Items.FindByValue(dataTable1.Rows[0]["columnName"].ToString())); 
1

您可以在editemplate使用此代碼使用下拉列表當您不需要使用數據源時:

<asp:TemplateField HeaderText="state" SortExpression="state"> 
      <EditItemTemplate> 
       <asp:DropDownList ID="DropDownList4" runat="server" Style="position: relative" AppendDataBoundItems="true" SelectedValue='<%# Bind("state") %>' > 
     <asp:ListItem Value="approved">approved</asp:ListItem> 
     <asp:ListItem Value="notapproved">notapproved</asp:ListItem> 
    </asp:DropDownList> 
     </EditItemTemplate> 
<ItemTemplate> 
      <asp:Label ID="Label1" runat="server" Text='<%# Bind("state") %>'></asp:Label> 
     </ItemTemplate> 
</asp:TemplateField> 
相關問題