I keep getting the above error in the title line and it makes no sense, because I am using a sample table with only 5 records and each record has a value as per the drop down menu.
This is my code used to declare the drop down list. I have joined two tables in my SQL data source to reflect what I want populated in the grid view and have hidden columns as necessary. I am using the same data source to populate the drop down list any help would be most appreciated
<asp:DropDownList ID="DropDownListCurrency" runat="server" CausesValidation="True" DataSourceID="GridView" DataTextField="Currency" DataValueField="Currency_ID" AppendDataBoundItems="True"> <asp:ListItem Value="0" Text="<Select>" Enabled="True"></asp:ListItem> </asp:DropDownList>
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) { try { GridViewRow row = GridView1.SelectedRow; AccountNumber.Text = (string)row.Cells[0].Text; .... DropDownListCurrency.SelectedValue = (string)row.Cells[8].Text; } catch (Exception ex) { Console.WriteLine("{0} Exception caught.", ex); } }
Advertisement
Answer
Attempt to find the value in the drop down list before attempting to set the SelectedValue, like this:
if (DropDownListCurrency.Items.FindByValue(row.Cells[8].Text.ToString().Trim()) != null) { DropDownListCurrency.SelectedValue = row.Cells[8].Text.ToString().Trim(); }
Note: The Trim()
call will remove any leading or trailing spaces in your text box text, which could be a cause for a match not being found.
So your full code should be this:
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) { try { GridViewRow row = GridView1.SelectedRow; AccountNumber.Text = (string)row.Cells[0].Text; .... if (DropDownListCurrency.Items.FindByValue(row.Cells[8].Text.ToString().Trim()) != null) { DropDownListCurrency.SelectedValue = row.Cells[8].Text.ToString().Trim(); } } catch (Exception ex) { Console.WriteLine("{0} Exception caught.", ex); } }