SelectedValue无效,因为它不存在于项列表中

时间:2012-01-14 20:28:22

标签: c# asp.net

这是我得到的错误:

  

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

}

2 个答案:

答案 0 :(得分:3)

错误消息告诉您到底发生了什么:例如存储在mr.rankid中的值不在下拉列表中。

您需要确定下拉列表是否包含正确的值,或者您尝试分配的值在可用值列表中是否不存在。

<强>更新

由于包含面板的可见性似乎导致了问题,因此最好使用CSS隐藏面板而不是将Visible属性设置为false,这将阻止它呈现给页。

这可以使用类似于代码隐藏中的以下代码来完成:

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

答案 1 :(得分:1)

当您不需要使用数据源时,可以使用此代码在editemplate中使用dropdownlist:

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