2009-10-02 2 views
0

У меня есть выпадающий список, который используется в EditItemTemplate из в DetailsView, и она заселяется из SqlDataSource, и я связывание выбранного значения следующим образом:Включение DataBound элементов списка в DropDownList

<EditItemTemplate> 
    <asp:DropDownList ID="lstLocations" runat="server" 
     DataSourceID="sqlMDALocationsAll" DataTextField="loc_name" DataValueField="id" 
     SelectedValue='<%# Bind("staff_location_id") %>' AppendDataBoundItems="True" > 
     <asp:ListItem Value="">(Unknown)</asp:ListItem> 
    </asp:DropDownList> 
</EditItemTemplate> 

Все работает должным образом. Теперь то, что я хочу сделать, это включить только те элементы связанного списка на основе другого столбца в sqlDataSource - есть столбец состояния, который может иметь значения как активного, так и неактивного - и если статус записи активен, тогда я хотите, чтобы соответствующий элемент списка был включен, в противном случае я хочу, чтобы он был отключен. Причина в том, что, поскольку это форма редактирования, я не хочу, чтобы люди могли выбирать значение, которое неактивно, но мне нужно включить эти «неактивные» записи в раскрывающемся списке, поскольку основная запись, которая редактирование может иметь идентификатор местоположения для местоположения, которое теперь неактивно.

То, что я пытался использовать было следующее atted к определению DropDownList:

Enabled='<%# Eval("status") = "active" %>' 

Но это не сработало - но не было никаких ошибок сообщается.

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

Благодаря

ответ

1

Вы не можете выполнить поздний переплет оценки внутри WebControl и в элементе управления данными, как DetailsView.

Назначить значение для ItemDataBound. Посмотрите аналогичный question.

+0

Спасибо за эту информацию - мне это не помогло, и мне кажется, что мне удалось смутить себя наличием двух источников данных - одного для просмотра подробностей, а другого - для заполнения элементов списка списка выпадающего списка. Что мне нужно для разработки, так как я могу каким-то образом захватить «onDataBound» для каждого элемента списка, который добавляется в выпадающий список из его источника данных. Но событие onDataBinding не отображает значения, которые мне нужны. –

+0

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

0

Ну, я обнаружил две вещи. Первое, и самое главное, - это то, что .Net не позволяет вам отключать списки в элементе dropdownlist. Во-вторых, я действительно должен был принять предложение ОКВ и использовать обработчик событий - я решил использовать onbadabound событие:

Protected Sub lstLocations_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) 
    'Once the drop down list has been populated, we want to disable any locations whose status is inactive. 
    Dim lstLocations As DropDownList = CType(Me.dgStaff.FindControl("lstLocations"), DropDownList) 
    If Not lstLocations Is Nothing Then 
     Dim dView As System.Data.DataView = CType(Me.sqlMDALocationsAll.Select(DataSourceSelectArguments.Empty), System.Data.DataView) 
     If Not dView Is Nothing Then 
      dView.Sort = "id" 
      For nIndex As Integer = 0 To lstLocations.Items.Count - 1 
       If lstLocations.Items(nIndex).Value <> "" Then 
        Dim rowIndex As Integer = dView.Find(CInt(lstLocations.Items(nIndex).Value)) 
        Trace.Write("lstLocations_DataBound", "Location ID = " & lstLocations.Items(nIndex).Value & " Name = " & dView(rowIndex)("loc_name") & " Status = " & dView(rowIndex)("status")) 
        If dView(rowIndex)("status").ToString.ToLower.Trim = "inactive" Then 
         lstLocations.Items(nIndex).Text &= " (Unavailable)" 
        End If 
       End If 
      Next 
     End If 
    Else 
     Trace.Write("lstLocations_DataBound", "FindControl failed") 
    End If 
End Sub 

Первоначально линия lstLocations.Items (nIndex) .Text & = "(Unavailable) «на самом деле установить свойство« enabled »этого listitem равным false, но единственным эффектом этого является полное удаление списка из раскрывающегося списка.

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