Dobrý den, ve své asp.net web forms aplikaci mám stránku s výsledky vyhledávání. Data, podle kterých filtruju mám v QueryStringu. Takto například vypadá URL stránky: localhost:49778/sportovci-vyhledavani?s=1&r=&sp=&g=&af=&at=&pf=&pt=&n=&c=. Sice je tam většina QueryStringů prázdných (měli by se automaticky odstranit, mám v plánu to udělat), ale to nevadí, protože ne všechny musí být vyplněné. Takže by se měly zobrazit hodnoty, kde je QueryStrin s roven 1 - tedy uživatel, který má k sobě přiřazený sport s id 1. Sloupce Age a Practise mají být mezi nějakými hodnotami, proto parametry @AgeFrom a @AgeTo... Problém bude v SELECT příkazu, napsal jsem ho podle toho, co jsem nastudoval na internetu (W3school...), ale asi není dobře. Neporadil by mi prosím někdo, jak to správně napsat ten SELECT nebo nějaké jiné řešení? HTML:
<asp:ListView ID="profilesListView" runat="server" >
<ItemTemplate>
<div class="sportovci_item">
<asp:HiddenField ID="ProfileId" runat="server" Value='<%# Eval("Profiles.ProfileId") %>' />
<h2>
<asp:Literal ID="Name" runat="server" Text='<%# Eval("Profiles.Name") %>' Mode="Encode" /></h2>
<small>
<asp:Literal ID="Specialization" runat="server" Text='<%# Eval("Specialization") %>' Mode="Encode" /></small>
<p class="sportovci_sports">
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:SportovniPlanetaCS %>"
SelectCommand="SELECT Sports.Sport FROM UsersSports JOIN sports ON UsersSports.SportId = Sports.SportId WHERE (ProfileId = @ProfileId)">
<SelectParameters>
<asp:ControlParameter Name="ProfileId" Type="Int32" ControlID="ProfileId" />
</SelectParameters>
</asp:SqlDataSource>
<asp:Repeater ID="SportsRepeater" runat="server" DataSourceID="SqlDataSource2">
<ItemTemplate>
<asp:Literal ID="VIPSports" runat="server" Text='<%# Eval("Sports.Sport") %>' Mode="Encode" />
</ItemTemplate>
</asp:Repeater>
</p><asp:Image ID="ProfileImg" runat="server" ImageUrl='<%# Eval("ProfilesProPicUrl")%>' CssClass="sportovci_item_img" />
<br />
<ajaxToolkit:Rating ID="sportovci_item_rating" CssClass="sportovci_item_rating" CurrentRating='<%# Eval("UsersSports.Rating") %>' runat="server" MaxRating="5" ReadOnly="true" StarCssClass="sportovciRatingStar" WaitingStarCssClass="savedRatingStar" FilledStarCssClass="sportovciFilledRatingStar" EmptyStarCssClass="sportovciEmptyRatingStar" />
</div>
</ItemTemplate>
</asp:ListView>
Code behind:
Using conn As New SqlConnection(connStr)
Dim cmd As SqlCommand = conn.CreateCommand()
cmd.CommandText = "SELECT Profiles.ProfileId,Profiles.ProPicUrl, Profiles.Name, Profiles.Specialization, UsersSports.Rating " + _
"FROM Profiles " + _
"JOIN UsersSports ON Profiles.ProfileId = UsersSports.ProfileId " + _
"WHERE (UsersSports.SportId = @SportId) AND (@Region IS NULL OR Region = @Region) AND (@Specialization IS NULL OR Specialization = @Specialization)" + _
"AND (@Sex IS NULL OR Sex = @Sex) AND (@AgeFrom IS NULL OR Age BETWEEN @AgeFrom AND @AgeTo) AND (@PractiseFrom IS NULL OR UsersSports.Practise BETWEEN @PractiseFrom AND @PractiseTo)" + _
"AND (@Name IS NULL OR Profiles.Name LIKE '%@Name%') AND (@City IS NULL OR City LIKE @City)" + _
"ORDER BY UsersSports.Rating ASC"
cmd.Parameters.Add("@SportId", SqlDbType.Int).Value = Request.QueryString("s").ToString()
cmd.Parameters.AddWithValue("@Region", Request.QueryString("r"))
cmd.Parameters.AddWithValue("@Specialization", Request.QueryString("sp"))
cmd.Parameters.AddWithValue("@Sex", Request.QueryString("g"))
cmd.Parameters.AddWithValue("@AgeFrom", Request.QueryString("af"))
cmd.Parameters.AddWithValue("@AgeTo", Request.QueryString("at"))
cmd.Parameters.AddWithValue("@PractiseFrom", Request.QueryString("pf"))
cmd.Parameters.AddWithValue("@PractiseTo", Request.QueryString("pt"))
cmd.Parameters.AddWithValue("@Name", Request.QueryString("n"))
cmd.Parameters.AddWithValue("@City", Request.QueryString("c"))
conn.Open()
Dim dt As New DataTable
Dim adp As New SqlDataAdapter(cmd)
adp.Fill(dt)
profilesListView.DataSource = dt
profilesListView.DataBind()
conn.Close()
End Using
|