2012-05-10 36 views
0

現在、配列(2つの値)をループし、両方の値をループ内のクエリで使用しようとしています。以下のコードをご覧ください。今、私のコードは動作しません。私はSQLDataSourceの "SelectParameters"タグ内の "appType"パラメータを動的に設定しようとしていますが、これは機能しません。ASP.Netの動的クエリ(SQLDataSourceのWHERE句)

提案がありますか?

<% 

    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 %> 
+1

提案1:過去の質問の回答を受け入れる。 – StriplingWarrior

答えて

2

OnSelectingメンバーを持っているあなたのSqlDataSourceコントロールを変更します。

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

は正常に戻ってあなたのSelectParametersをリセットします。

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

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

Protected Sub OnSelecting(sender As Object, e As SqlDataSourceSelectingEventArgs) Handles SqlDataSource1.Selecting 
    e.Command.Parameters("@appType").Value = Repeater1.SomeValue 
End Sub 
+0

助けてくれてありがとう。 "appType"という値は、私がループしている配列から来ています。 配列の宣言とループを使ってコードを更新しました。 サブのループ(appType)からその値にアクセスするにはどうすればよいですか? もう一度ありがとう –