2012-04-25 2 views
1

У меня есть следующий asp.net DropDownList:DropDownList SelectedValue недействителен, поскольку он не существует в списке Items

<asp:DropDownList ID="ddlRole" runat="server" DataSourceID="dsRole" 
     DataTextField="RoleCode" DataValueField="ID" Font-Names="Verdana" Font-Size="11px" 
     ForeColor="#2D2D2D" ClientIDMode="Static" Width="120px" CssClass="selectedRole" 
     OnDataBound="ddlEntity_DataBound" AppendDataBoundItems="true" > 
     <asp:ListItem Value="-1">--- Select ---</asp:ListItem> 
</asp:DropDownList> 
<asp:ObjectDataSource ID="dsRole" runat="server" SelectMethod="GetList" TypeName="Roles" 
    OldValuesParameterFormatString="original_{0}"></asp:ObjectDataSource> 

я получаю «SelectedValue недействительна, поскольку он не существует в списке предметов «ошибка, указав« значение », неверна. Идентификатор, на который я ссылаюсь, равен 1, и он определенно существует в БД, откуда я звоню.

Я пробовал решить эту проблему, как указано в Интернете и других форумах, но я все равно получаю ту же ошибку. Я предполагаю, что это имеет какое-то отношение к тому, что мой SelectedValue начинается с -1?

Любые предложения?

+2

Когда вы устанавливаете выбранное значение? Является ли до привязки данных или после? –

ответ

-2

Я решил сделать это, чтобы «Выбрать» была первой линией в передаваемом наборе данных. Вы можете сделать это с UNION в MSSQL.

Запрос это получилось так:

SELECT '-1' AS id, 'Select' AS name UNION ALL SELECT id, name FROM users 

должны дать псевдоним столбца или DropDownList просто не понимает, где идентификатор, и где имя

<asp:DropDownList ID="MainCat" runat="server" AutoPostBack="True" 
     DataSourceID="SqlDataSource1" DataTextField="name" DataValueField="id"> 
</asp:DropDownList> 

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
     ConnectionString="<%$ ConnectionStrings:ConnectionString1%>" 
      SelectCommand="SELECT id,name FROM users"> 
</asp:SqlDataSource> 

мне нужно сделать в том же костюме

+1

Мы не должны делать этот союз, это должно обрабатываться ASP .Net, а не SQL. Ошибка из ASP .Net, поэтому ASP .Net должен ее исправить. –