DropDownList ma SelectedValue, która jest nieprawidłowa, ponieważ nie istnieje na liście elementów. Nazwa parametru: wartość


Powyższy błąd pojawia się na pasku tytułu i nie ma to żadnego sensu, ponieważ używam przykładowej tabeli z tylko 5 rekordami, a każdy rekord ma wartość zgodnie z menu rozwijanym.
To jest mój kod używany do deklarowania listy rozwijanej. Połączyłem dwie tabele w moim źródle danych SQL, aby odzwierciedlić to, co chcę wypełnić w widoku siatki, i w razie potrzeby mieć ukryte kolumny. Używam tego samego źródła danych, aby wypełnić listę rozwijaną, każda pomoc byłaby bardzo mile widziana
<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);
}
}

Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Spróbuj znaleźć wartość w combobox przed próbą ustawienia SelectedValue, na przykład:
if (DropDownListCurrency.Items.FindByValue(row.Cells[8].Text.ToString().Trim()) != null)
{
DropDownListCurrency.SelectedValue = row.Cells[8].Text.ToString().Trim();
}

Uwaga: wywołanie funkcji
Trim ()
usunie wszelkie początkowe lub końcowe spacje z tekstu pola tekstowego, które mogą być przyczyną braku dopasowania.
Więc cały kod powinien wyglądać następująco:
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);
}
}
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

to takie proste, po prostu użyj tego
Dropdown.SelectedValue = null;
Dropdown.DataBind();
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Witam, może ta komórka z twojego widoku siatki ma spację lub lista rozwijana ma spację, na przykład to nie to samo
Dolary = Dolary
lub
Dolar = Dolar__
użyj przycinania w kodzie, aby wyczyścić białe znaki w SQL Server, nie używaj Rtrim, to nie jest dobra praktyka
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Wartości rozwijane różnią się od wartości w kolumnie bazy danych.
Przykład: Lista rozwijana pokazuje Emmę, ale Emma i Emma1 istnieją w bazie danych.
Na liście rozwijanej nie można znaleźć wartości Emma1.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Może się tak zdarzyć, jeśli wiersze na liście rozwijanej znajdują się w powiązanej tabeli, a integralność referencyjna nie jest używana w bazie danych. W moim przypadku używam integralności referencyjnej, ale dodaję wartość logiczną do pozycji rozwijanej, aby powiedzieć „Wyłączone” - to znaczy nie chcę, aby użytkownicy mogli już wybierać tę wartość z listy rozwijanej. Dlatego filtruję listę rozwijaną, aby wyświetlać tylko wartości, które nie są „Wyłączone”, ale problem polega na tym, że istniejące dane mogą już zawierać tę wartość, co powoduje, że powyższy komunikat o błędzie pojawia się po kliknięciu Edytuj w siatce.
Sposób radzenia sobie z tą sytuacją jest następujący:
  • Niech lista rozwijana nie będzie powiązana, aby uniknąć błędów.
  • Dodaj następujący kod do kodu za:
    protected void StaffTypeGridView_OnRowDataBound(object sender, GridViewRowEventArgs e){ if (e.Row.RowType != DataControlRowType.DataRow || e.Row.RowIndex != StaffTypeGridView.EditIndex) return; var staffType = (StaffType)e.Row.DataItem; var appCode = staffType.AppCode; var ddl = (DropDownList) e.Row.FindControl(ddlName); if (!string.IsNullOrEmpty(value) && ddl.Items.FindByValue(value) == null) { ddl.Items.Add(new ListItem { Value = value, Text = value + " (Deleted)" }); } ddl.SelectedValue = value;}
  • Pamiętaj, aby napisać kod w DropDownList_OnSelectedIndexChanged lub GridViewOnRowUpdating, aby zaktualizować wartość z powrotem do źródła danych (ponieważ jest to pole niezwiązane).
  • Dodaj niestandardowy walidator do EditItemTemplate, aby upewnić się, że nie można wprowadzić usuniętych danych, tj. Użytkownik MUSI zmienić wartość w menu rozwijanym, aby zapisać.

Wydaje się to dość trudne do wyjaśnienia, ale to całkiem prosty sposób na zapewnienie tej funkcjonalności, chyba że ktoś ma lepsze pomysły ...
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Ustawienie właściwości
Text
DropDownList
w ASPX na wartość nieobecną w
ItemList
powoduje ten sam błąd.
W moim przypadku przez pomyłkę dodałem tag
meta-resourcekey
, w którym właściwość
Text
została ustawiona jako nieobecna w
ItemList
.
Wartości zasobów były następujące:
<div class="snippet-code">
<div class="snippet" data-babel="false" data-console="true" data-hide="false" data-lang="js">
<pre class="snippet-code-css lang-css prettyprint-override">
table {
border-collapse: collapse;
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
}
table th, table td {
border: solid 1px darkgray;
padding: 0 5px;
}table.tr:first(){

}

<pre class="snippet-code-html lang-html prettyprint-override">
<table css="table">
<tr>
<th>Name</th>
<th>Value</th>
<th>Comment</th>
</tr>
<tr>
<td>Template.Text</td>
<td>Template</td>
<td></td>
</tr>
<tr>
<td>Template.ToolTip</td>
<td>template of standard outgoing email settings</td>
<td></td>
</tr>
</table>

a formant ASPX to:
<asp:DropDownList runat="server" ID="ddlTemplate" CssClass="form-control dropdownlist" meta:resourcekey="Template" >
<asp:ListItem Selected="True" meta:resourcekey="TemplateEmpty" Value="EMPTY"/>
<asp:ListItem Selected="False" meta:resourcekey="TemplatePOP3" Value="POP3"/>
<asp:ListItem Selected="False" meta:resourcekey="TemplatePOP3Secured" Value="POP3S"/>
<asp:ListItem Selected="False" meta:resourcekey="TemplateIMAP" Value="IMAP"/>
<asp:ListItem Selected="False" meta:resourcekey="TemplateIMAPSecured" Value="IMAPS"/>
</asp:DropDownList>

Usunięcie
meta: resourcekey
załatwiło sprawę.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

#region by zia for if item not exist in dropdownlist
string qlf = dsEmp.Tables["tblEmp"].Rows[0]["Group"].ToString();
ListItem selLqli = ddlGroup.Items.FindByText(qlf.Trim());
if (selLqli != null)
{
ddlGroup.ClearSelection();
}
else
{
ddlGroup.SelectedIndex = 0; }
#endregion
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Możesz użyć metody Trim ()
ddlname.Text = dt.Rows[0][3].ToString().Trim();

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się