0

現在、配列 (2 つの値) をループして、ループ内のクエリで両方の値を使用しようとしています。以下のコードを参照してください。現在、私のコードは機能しません。SQLDataSource の「SelectParameters」タグ内に「appType」パラメーターを動的に入力しようとしていますが、これは機能しません。

なにか提案を?

<%

    Dim appTypes() As String = {"Extranet", "Internet"}

    For Each appType As String In appTypes

%>

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ProviderName = "<%$ ConnectionStrings:CMS.ProviderName %>"
    SelectCommand = "SELECT Applications.Name as AppName, Applications.Abbr as AppAbbr, Types.Name as TypeName, Managers.LastName as LastName, Managers.FirstName As FirstName, Managers.EDKeyEmpID as EDKeyID
        FROM Types INNER JOIN (Managers INNER JOIN Applications ON Managers.ID=Applications.Manager) ON Types.ID=Applications.Type
        WHERE (Types.Name = @appType)
           ORDER BY Types.Name, Applications.Name;"
    ConnectionString="<%$ ConnectionStrings:CMS %>">
    <SelectParameters>
        <asp:Parameter DefaultValue="<%=appType%>" Name="appType"  Type="String" />
    </SelectParameters>   
</asp:SqlDataSource>

<asp:Repeater ID="Repeater1" DataSourceID="SqlDataSource1" runat="server">
    <ItemTemplate>
        <%#Eval("AppName")%> (<%=appType%>)
    </ItemTemplate>
</asp:Repeater>


<% Next %>
4

1 に答える 1

2

OnSelectingメンバーを持つように SqlDataSource を変更します。

<asp:SqlDataSource ID="SqlDataSource1" runat="server" OnSelecting="OnSelecting"

SelectParameters を通常の状態にリセットします。

<SelectParameters>
    <asp:Parameter Name="appType" Type="String" />
</SelectParameters>

コード ビハインドでこのメソッドを定義します。必要に応じてロジックを実装します。ここで、リピーターからのダミー値を示しました。それが実際にどのように/どこから来るかを判断するのはあなた次第です(SelectedItemまたは同様のもの)。

Protected Sub OnSelecting(sender As Object, e As SqlDataSourceSelectingEventArgs) Handles SqlDataSource1.Selecting
    e.Command.Parameters("@appType").Value = Repeater1.SomeValue
End Sub
于 2012-05-11T20:56:45.997 に答える