Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

c#

asp.net

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.

like image 353
Loupi Avatar asked Jan 28 '26 22:01

Loupi


1 Answers

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
}
like image 171
Alex Aza Avatar answered Jan 30 '26 15:01

Alex Aza



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!