且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

的SelectedValue因为它不在项目列表中存在这是无效的

更新时间:2022-12-14 23:07:05

该错误信息是告诉你到底发生了什么:值,例如存储在mr.rankid,是不是在DropDownList present

您需要弄清楚DropDownList中是否包含正确的值或者你想在指定可用值列表中不存在的价值。

更新

既然是包含面板,这似乎是导致问题的知名度,倒不如隐藏使用CSS比可见属性设置为false面板,这将prevent从渲染到页面上。

这可以用类似于code-背后以下code完成

  Panel1.Style.Add(HtmlTextWriterStyle.Visibility,隐藏);
Panel1.Style.Add(HtmlTextWriterStyle.Display,无);

This is the error I get:

ddlRankEdit' has a SelectedValue which is invalid because it does not exist in the list of items. Parameter name: value

I have a form wiht several dropdownlists that are nested in a panel that is by default set to invisible. When a user selects a record from a separate list box the selected index changed event sets the panel to visible and makes a data call. That's when the error happens. See the code below, I added XXX where it stalls.

<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;
    }

}

The error message is telling you exactly what is happening: the value, for example stored in mr.rankid, is not present in the dropdownlist.

You need to figure out whether or not the dropdownlist contains the correct value or the value you are trying to assign does not exist in the list of available values.

Update

Since it is the visibility of the containing panel that seems to be causing the problems, it would be better to hide the panel using CSS than setting the Visible property to false, which will prevent it from rendering to the page.

This can be done with code similar to the following in the code-behind:

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