2014-11-05 4 views
0

У меня есть выпадающий список внутри DataList EditItemTemplate, питаемый SQLDataSource (см. Ниже). Параметр @panelid устанавливается в коде в событии SQL databinding и, похоже, работает нормально. Содержание точных и то, что я ожидал.ddl Выбранное значение неверная ошибка

Затем я попытался установить выбранное значение с помощью Bind("scopeid"), что должно быть хорошо. scopeid и equipmentid связаны, фактически scopeid заполняется equipmentid в нижнем колонтитуле этого же источника данных, поэтому их значения должны соответствовать (и они есть). Это должно нажать scopeid выбранной записи на выбранный элемент в ddl. Однако при переключении на мой EditItemTemplate я получаю ошибку 'ddlEquipment' has a SelectedValue which is invalid because it does not exist in the list of items. Parameter name: value. Есть идеи?

<asp:DropDownList class="smallInputddl" ID="ddlEquipment" runat="server" DataSourceID="sqlEditEquipment" SelectedValue='<%# Bind("scopeid")%>' DataTextField="modelnumber" DataValueField="equipmentid" AppendDataBoundItems="true"> 
</asp:DropDownList> 
<asp:SqlDataSource ID="sqlEditEquipment" runat="server" OnDataBinding="sqlEditEquipment_DataBinding" ConnectionString="<%$ ConnectionStrings:ProductionDatabaseConnectionString1 %>" 
    SelectCommand="select * from tblsls_equipmentscope where proposalnumber in (select proposalnumber from tblsls_cntrlpanel where id = @panelid)"> 
    <SelectParameters> 
     <asp:Parameter Name="panelid" /> 
    </SelectParameters> 
</asp:SqlDataSource> 

Чтобы продемонстрировать, вот запрос Sql, чтобы показать связь между scopeid и equipmentid. tblsls_cntrlvfd также имеет идентификатор из tblsls_cntrlpanel .:

select e.equipmentid, c.scopeid from tblsls_equipmentscope e 
left join tblsls_cntrlvfd c on e.equipmentid = c.scopeid 
where proposalnumber in (select proposalnumber from tblsls_cntrlpanel where id = 20) 

Результаты:

equipmentid scopeid 
----------- -------- 
9513  9513 
9541  9541 
9543  NULL 

(3 row(s) affected) 

Суть в том, что оборудование существует вне в своем собственном маленьком мире, и контролирует в это. Оба привязаны к предложению. Существует также VFD, который связан как с панелью управления, так и с конкретным оборудованием.

+0

Как показано в наборе результатов, идентификатор области также имеет нулевое значение. Думаю, вам нужно это проверить. –

+0

scopeid имеет null, потому что у него нет записи для этого оборудования, и он не должен. Он не пытается вставить нуль в datalist, он пытается нажать 9541 или 9513, в зависимости от того, какую запись я редактирую. Уточнение в моем оригинальном посте. – Crimius

ответ

0

Выяснил это. У меня есть привычка хранить источники данных SQL, которые просто заправляют выпадающим списком, со списком, который они заполняют. Обычно это желательно. В этой ситуации сохранение этого списка привело к тому, что мне пришлось использовать работу, чтобы установить ее значение параметра. Он не мог видеть метку, в которой он нуждался, откуда он был, поэтому я установил значение по умолчанию в источнике данных Databinding. Это отлично работает на своем, и список заполняется, как ожидалось. Как только вы попытаетесь установить SelectedValue, однако, когда источник данных имеет настройки параметров в databinding, происходит небольшая проблема с загрузкой. В конечном итоге они запускаются одновременно, поэтому источник данных не запускался и не заполнял его набор данных, SelectedValue видит набор с 0 элементами в нем.

Перемещение SQLDataSource так, чтобы он мог видеть элемент управления, изначально я хотел, чтобы он решил проблему. Ему больше не нужно было устанавливать свой параметр через код, его список по существу статичен.

0

Вам нужно будет указать «пустую» опцию в вашем DDL, чтобы она соответствовала нулевому значению. Он пытается найти соответствие в списке исходному значению ячейки (null), но поскольку это не доступный параметр, он выбрасывает исключение. Просто установите индекс 0 вашего DDL, чтобы он был пустым.

Смежные вопросы