2012-05-10 38 views
0

我目前正試圖通過數組(兩個值)循環,並在循環內的查詢中使用這兩個值。請參閱下面的代碼。現在我的代碼不起作用。我試圖動態填充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

修改您的SqlDataSource有一個OnSelecting成員:

<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 
+0

感謝您的幫助。 值「appType」來自我正在循環的數組。 我已經用數組聲明和循環更新了代碼(在我的原始文章中)。 我如何從循環中訪問該值(appType)? 再次感謝 –