0

DetailsView の EditItemTemplate で使用されているドロップダウン リストがあり、SqlDataSource から入力されており、選択した値を次のようにバインドしています。

<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 の別の列に基づいてバインドされたリスト項目のみを有効にすることです。アクティブまたは非アクティブの値を持つことができる「ステータス」列があります。エントリのステータスがアクティブである場合、私は対応するリスト項目を有効にしたい、それ以外の場合は無効にしたい これは編集フォームであるため、非アクティブな値を選択できないようにしたいのですが、ドロップダウン リストにそれらの「非アクティブ」エントリを含める必要があるためです。編集中の場所には、現在非アクティブな場所の場所 ID が含まれている可能性があります。

私が使用しようとしたのは、DropDownList 定義に次のように記載されていました。

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

しかし、それはうまくいきませんでした - しかし、報告されたエラーはありませんでした。

助言がありますか?

ありがとう

4

2 に答える 2

1

Web コントロール内および DetailsView などのデータ コントロール内では、レイト バインド評価を実行できません。

ItemDataBound に値を割り当てます。この同様の質問を確認してください。

于 2009-10-03T14:03:12.623 に答える
0

さて、私は2つのことを発見しました。最初の、そして最も重要なことは、.Net ではドロップダウン リスト コントロールのリスト項目を無効にすることができないということです。2 つ目は、okw の提案に従って、イベント ハンドラーを使用する必要があったことです。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)" は、実際にはその listitem の "enabled" プロパティを false に設定していましたが、その唯一の効果は listitem をドロップダウン リストから完全に削除することでした。

于 2009-10-06T13:53:23.117 に答える