简体   繁体   中英

DropDownList error 'does not exist in the in the list of items' ASP.NET C#

I was trying to make a custom application form. I've added some control like TextBox and Button so far everything is fine until I modified some of the TextBox with a DropDownList control. When I click the add button it returns an error:

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

I've attached the sample code of my code behind:

public partial class Test2 : System.Web.UI.Page
    {
        public string GetConnectionString()
        {
            return System.Configuration.ConfigurationManager.ConnectionStrings["LibrarySystemConnectionString"].ConnectionString;
        }

        private void execution(string bookid, string booktitle, string lastname, string firstname, string description, string categoryid, string dateadded, string quantity, string statusid)
        {
            SqlConnection conn = new SqlConnection(GetConnectionString());

            string sql = "INSERT INTO TblBooks(bookid, booktitle, lastname, firstname, description, categoryid, dateadded, quantity, statusid) VALUES "+" (@bookid, @booktitle,@lastname, @firstname, @description, @categoryid, @dateadded, @quantity, @statusid)";

            try
            {
                conn.Open();
                SqlCommand cmd = new SqlCommand(sql, conn);
                SqlParameter[] pram = new SqlParameter[9];
                pram[0] = new SqlParameter("@bookid", SqlDbType.BigInt, 64);
                pram[1] = new SqlParameter("@booktitle", SqlDbType.NVarChar, 50);
                pram[2] = new SqlParameter("@lastname", SqlDbType.NVarChar, 50);
                pram[3] = new SqlParameter("@firstname", SqlDbType.NVarChar, 50);
                pram[4] = new SqlParameter("@description", SqlDbType.NVarChar, 200);
                pram[5] = new SqlParameter("@categoryid", SqlDbType.Int, 32);
                pram[6] = new SqlParameter("@quantity", SqlDbType.Int, 32);
                pram[7] = new SqlParameter("@statusid", SqlDbType.Int, 32);
                pram[8] = new SqlParameter("@dateadded", SqlDbType.DateTime, 32);

                pram[0].Value = bookid;
                pram[1].Value = booktitle;
                pram[2].Value = lastname;
                pram[3].Value = firstname;
                pram[4].Value = description;
                pram[5].Value = categoryid;
                pram[6].Value = quantity;
                pram[7].Value = statusid;
                pram[8].Value = dateadded;

                for (int i = 0; i < pram.Length; i++)
                {
                    cmd.Parameters.Add(pram[i]);
                }
                cmd.CommandType = CommandType.Text;
                cmd.ExecuteNonQuery();
            }
            catch (System.Data.SqlClient.SqlException ex_msg)
            {

                string msg = "Error occured while inserting";
                msg += ex_msg.Message;
                throw new Exception(msg);
            }

            finally
            {
                conn.Close();
            }
            }

        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            if (bookidTextBox.Text == "")
            {
                Response.Write("Please complete the form");
            }

            else
            {
             execution(bookidTextBox.Text, booktitleTextBox.Text, lastnameTextBox.Text, firstnameTextBox.Text, descriptionTextBox.Text, categoryDropDownList.SelectedValue, dateaddedTextBox.Text, quantityTextBox.Text, statusDropDownList.SelectedValue);
                //conform.Visible = true;
                bookidTextBox.Text = "";
                booktitleTextBox.Text = "";
                lastnameTextBox.Text = "";
                firstnameTextBox.Text = "";
                descriptionTextBox.Text = "";
                categoryDropDownList.SelectedValue = "";
                dateaddedTextBox.Text = "";
                statusDropDownList.SelectedValue = "";
                quantityTextBox.Text = "";

            }
        }
    }
}

Here's the sample code of the form:

<table class="style1">
    <tr>
        <td class="style2">
            ISBN:
            </td>
            <td class="style3">
            <asp:TextBox ID="bookidTextBox" runat="server" Text='<%# Bind("bookid") %>'>
            </asp:TextBox>
            </td>
            <td>
            <asp:RequiredFieldValidator ID="RequiredFieldValidator" runat="server" ControlToValidate="bookidTextBox" ErrorMessage="* " ValidationGroup="addbooks">
            </asp:RequiredFieldValidator>
        </td>
    </tr>

<tr>
<td class="style2">
Title:
</td>
<td class="style3">
<asp:TextBox ID="booktitleTextBox" runat="server" Text='<%# Bind("booktitle") %>'>
</asp:TextBox>
</td>
<td>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="booktitleTextBox" ErrorMessage="* " ValidationGroup="addbooks">
</asp:RequiredFieldValidator>
</td>
</tr>

... (cut some code here)

<tr>
<td class="style2">
Category:
</td>
<td class="style3">
    <asp:DropDownList ID="categoryDropDownList" runat="server" 
        DataSourceID="categoryDataSource" DataTextField="name"
        DataValueField="categoryid" >
    </asp:DropDownList>
    <asp:SqlDataSource ID="categoryDataSource" runat="server"
        ConnectionString="<%$ ConnectionStrings:LibrarySystemConnectionString %>" 
        SelectCommand="SELECT [categoryid], [name] FROM [TblCategory]">
    </asp:SqlDataSource>
</td>
</tr>

...

<tr>
<td class="style2">
Status:</td>
<td class="style3">
    <asp:DropDownList ID="statusDropDownList" runat="server" 
        DataSourceID="statusDataSource" DataTextField="statusname" 
        DataValueField="statusid" >
    </asp:DropDownList>
    <asp:SqlDataSource ID="statusDataSource" runat="server" 
        ConnectionString="<%$ ConnectionStrings:LibrarySystemConnectionString %>" 
        SelectCommand="SELECT [statusid], [statusname] FROM [BookStatus]">
    </asp:SqlDataSource>
</td>
</tr>

</table>
</div>

<asp:Button ID="AddBtn" runat="server" Text="Add" OnClick="Button1_Click" Width="100px" />
<br />
<br />

<b>Book List</b>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
    DataKeyNames="bookid" DataSourceID="bookDataSource">
    <Columns>
        <asp:BoundField DataField="bookid" HeaderText="bookid" ReadOnly="True" 
            SortExpression="bookid" />
        <asp:BoundField DataField="booktitle" HeaderText="booktitle" 
            SortExpression="booktitle" />
        <asp:BoundField DataField="lastname" HeaderText="lastname" 
            SortExpression="lastname" />
        <asp:BoundField DataField="firstname" HeaderText="firstname" 
            SortExpression="firstname" />
        <asp:BoundField DataField="categoryid" HeaderText="categoryid" 
            SortExpression="categoryid" />
        <asp:BoundField DataField="description" HeaderText="description" 
            SortExpression="description" />
        <asp:BoundField DataField="dateadded" HeaderText="dateadded" 
            SortExpression="dateadded" />
        <asp:BoundField DataField="statusid" HeaderText="statusid" 
            SortExpression="statusid" />
        <asp:BoundField DataField="quantity" HeaderText="quantity" 
            SortExpression="quantity" />
        <asp:CheckBoxField DataField="isdeleted" HeaderText="isdeleted" 
            SortExpression="isdeleted" />
    </Columns>
</asp:GridView>

It worked when I try to convert the DropDownList to textbox but how can I bind it with a DropDownList control??

Help would be much appreciated. Thanks in advance.

Your DropDown is bound to SqlDataSource . When you execute categoryDropDownList.SelectedValue = "" , the DropDown is looking for empty value in the data source, but can't find such, so it fails.

If might want to run dropDownList.ClearSelection() if this is what you are trying to achieve.

Here is simplified code example that would demonstrate the issue

protected void Page_Load(object sender, EventArgs e)
{
    var items = new[] { new { Id = 1, Name = "Test1" }, new { Id = 2, Name = "Test2" } };

    dropDownList.DataSource = items;
    dropDownList.DataValueField = "Id";
    dropDownList.DataTextField = "Name";
    dropDownList.DataBind();
}

protected void Button1_Click(object sender, EventArgs e)
{
    dropDownList.SelectedValue = ""; // trhows exception
    dropDownList.ClearSelection(); // works
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM