Morjens,
taas on mennyt hommat poskelleen eli apua tarvitaan. Tarkoitus olisi etta kun valitsen pudotus valikosta "hinta luokan" niin tietokanta taulusta tulostuu GridView:iin valittuun hinta luokkaan kuuluvat kirjat (tekija, kirjan nimi, sivumaara, jne.).
Ongelma on se etta en osaa yhdistaa pudotusvalikkoa kantaan koska pudotusvalikossa olevia hinta luokkia ei loydy taulusta vaan taulussa on kirjan hinta (numeroina). Sekava selitys joten selvennan: Taulussani on nama kentat: ID, Nimi, Tekija, Julkaisu, Hinta, Luettu pvm, Sivumaara. Pudotusvalikossa sitten on hintaluokat: "0-5 euroa", "6-9 euroa", "enemman kuin 9 euroa".
If-lausekkeellahan tuo taytyy jotenkin hoitaa mutta ei taivu sitten niin millaan. Tassa on koodi jonka olen saanut vasattya. Nyt kun valitsen mita tahansa pudotusvalikosta niin samat tiedot tulostuu GridView:een (tottakai koska minulla ei ole kuin yksi Select-lauseke joka valitsee kaikki tiedot).
<form id="form1" runat="server"> <!-- PUDOTUSVALIKKO --> <asp:dropdownlist id="pudotusvalikko" runat="server" autopostback="True"> <asp:listitem selected="True">-- Hinta Luokka --</asp:listitem> <asp:listitem>0-5 euroa</asp:listitem> <asp:listitem>6-9 euroa</asp:listitem> <asp:listitem>enemman kuin 9 euroa</asp:listitem> </asp:dropdownlist></p> <!-- HAETAAN TIEDOT KANNASTA --> <asp:SqlDataSource id="tietolahde" runat="server" DataSourceMode="DataReader" ConnectionString="<%$ ConnectionStrings:ConnectionString%>" SelectCommand="SELECT * FROM [tblBooks]"> <selectparameters> <asp:controlparameter name="Title" controlid="pudotusvalikko" propertyname="SelectedValue"/> </selectparameters> </asp:SqlDataSource> <!-- TULOSTETAAN TIEDOT --> <asp:GridView id="GridView4" runat="server" DataSourceID="tietolahde"> </asp:GridView> </form>
Eli miten saan tietokantaa muuttamatta tulostumaan niiden kirjojen tiedot joiden hinta on pudotusvalikosta valitun euro maaran sisalla.
Koodini on muuten kokonaisuudessaan tiedostonimi.aspx tiedostossa koska en osannut IF-lauseketta ja muutenkaan muuta tiedostonimi.aspx.vb puolelle laittaa.
(Teen tata muuten Visual Web Developer 2005 EE:lla ja kieli on VB)
Kiitokset jalleen kerran pienimmastakin avusta,
-Matti
Heippa mizzou!
yksi vaihtoehto on, että pistät sinne kantaan 'hintaluokka' sarakkeen johon asetat arvoksi esim. 1 (kirjat 0-5 euroa) jne.
SqlDataAdapter myCommand = new SqlDataAdapter("select * from tblBooks, where Hintaluokka='" + pudotusvalikko.get_SelectedItem().get_Value() + "',myConnection);
jos taas haluat suodatella suoraan 'where' lauseessa niin joudut pukkaamaan hintaluokista ala - yläraja arvot muutujiin putotusvalikon 'SelectedIndexChanged' tapahtumassa, joita käytät sitten vertailussa ...where hinta>=' + muuttuja_araja and <= muuttuja_yraja ...
SELECT * FROM [tblBooks] where price between araja and yraja
Tässäkin varmaan pätee SELECT * is evil.
Kiitoksia Nea ja tsuriga vastauksista. Ensinna tuohon tsurigan antamaan linkkiin etta oikeassahan siella ollaan. Ei varmasti tuo kaikkien tietojen haku ole hyva vaihtoehto mutta nyt se ei ole se ongelman ydin :)
Tuo Nean antama neuvo varmasti toimisi mutta taulua en pysty/saa menna muuttamaan joten taytyy toteuttaa muilla keinoin. Jotenkin pitaisi saada homma toimimaan niin etta kun pudotusvalikosta on valittu jotain niin kasky kay jota kuinkin seuraavasti (siis nyt ihan vain kirjoitan miten mielessa tata mietin):
If Pudotusvalikon Value on 1 then Select * From tblBooks where Price > 5 and Price < 10 ELSE if Pudotusvalikon Value on 2 then... ja jne. Tuolla tavalla loytyisi kitjat joiden hinta on suurempi kuin 5 mutta pienempi kuin 10.
En vain saa tuota toimimaan vaikka olen yrittanyt jos jonkin moista if-lauseketta rakentaa. Loytyisiko ideaa?
Enhan mina tata saa toimimaan sitten niin millaan. Kuulostaako jarkevalta (tai edes toimivalta) jos tekisin IF-lauseketta tahan suuntaan:
Dim hinta1, hinta2 As Integer Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load If pudotusvalikko.SelectedValue = "0" Then hinta1 = 0 hinta2 = 5 ElseIf pudotusvalikko.SelectedValue = "1" Then hinta1 = 5 hinta2 = 10 End If End Sub
Tuossa nyt hiukan suuntaa etta mita tassa mietin. Ja sitten tekisi SELECT hakuun WHERE filtterin niin etta se ottaisi raja-arvot noista "hinta1 ja hinta2". Noin olen tata yrittanyt pahkata mutta kun ei taito riita. Jos vain jollain raksuttaisi etta miten tama kannattaisi toteuttaa niin mielellaan otan vinkit vastaan.
Heippa taas mizzou!
<!--Tässä kohtaa koodiasi pudotusvalikko.SelectedIndex = 0 -->
<asp:listitem selected="True">-- Hinta Luokka --</asp:listitem>
<!-- Jos et ole erikseen asettanut value-arvoa niin systeemi
nappaa value-arvoksi text-arvon (-- Hinta Luokka --).
Voit määritellä value-arvon helposti pudotusvalikon ominaisuus
asetuksissa: Items (collection). Asetettu arvo näkyy html osiossa
(hipsujen sisällä) vaikkapa näin:-->
<asp:listitem value="0-5">0-5 euroa</asp:listitem>
<script runat="server"> Sub pudotusvalikko_SelectedIndexChanged(Sender As Object e As EventArgs)'... 'Ainoa If lause, jota "tarvitset" on: If pudotusvailikko.SelectedIndex > 0 Then dim raja() as string = Split(pudotusvalikko.SelectedItem.value,"-") ' alaraja: raja(0) ' yläraja: raja(1) 'Suunnilleen tässä vaiheessa kannattaisi miettiä olisiko järkevää 'tutkia voisiko <div id="MyDiv"> tagin sisältöä mahdollisesti korvata 'lennossa innerHTML'n avulla VB-scriptiä käytettäessä. Vai olisiko 'kenties sittenkin järkevämpää syventyä tutkimaan, että mitä kaikkea 'elämää helpottavaa sinne tiedostonimi.aspx.vb sisälle voisi pukata. 'Jos valinta osuu jälkimmäiseen vaihtoehtoon, niin jatkossa koodi 'voisi näyttää vaikkapa tämänsuuntaiselta: Dim myProxy As New myDemo.mySample() 'Nimitila.Luokka() .aspx.vb tiedostossa GridView4.DataSource = myProxy.GetPrice(raja(0), raja(1)) GridView4.DataBind() End if End Sub </script>
Hei Nea ja oikein paljon kiitoksia avusta. Pari kysymysta tassa kuitenkin viela on :)
Minkalaista Select lauseketta tuohon pitaisi rakentaa tai siis tarkemmin mitka ehdot sille annan etta se osaa hakea kirjat joiden hinta on raja(0) ja raja(1) valissa. Tasta selviaa mita tarkoitan (MITA_TAHAN-kohdat on ne mita yritan kysya):
Select * FROM [tblBooks] WHERE (([hinta] < MITA_TAHAN) AND ([hinta] >= MITA_TAHAN))
Noin ajattelin Select lausekkeen olevan mutta varma en ole etta kuuluisiko se noin olla.
Sitten pieni/tyhma kysymys etta kohta jossa tulee "myDemo.MySample()" menee hiukan yli eli se herjaa etta ei ole "defined"... miten saan sen pois?
Heippa taas mizzou!
Oletetaan että olet luonut esim. tiedostonimi.aspx nimisen tiedoston, jonka aivan ensimmäinen rivi esittelee kaiken tarvittavan ja on seuraavan näköinen:
<%@ Page Language="VB" autoeventwireup="false" codebehind="tiedostonimi.aspx.vp" Inherits="myDemo.mySample" %>
ja olet edelleen luonut tiedostonimi.aspx.vb nimisen (codebehind) tiedoston johon olet sijoittanut nimitilan esim.:
Namespace myDemo
joka sisältää luokan esim.:
public class mySample
joka sisälätää funktion esim.:
Function GetPrice(ByVal araja As Object, ByVal yraja As Object)
joka sisältää string tyyppisen objektin, jonka olet määritellyt esim.:
Dim queryString As String="SELECT [tblBooks].* FROM [tblBooks] WHERE price between " + araja.ToString() + " and " + yraja.ToString()
tiedostonimi.aspx tiedoston scriptissä olevan koodinpätkän:
GridView4.DataSource = myProxy.GetPrice(raja(0), raja(1))
jälkimmäinen osa välittää funktiolle parametrit eli arajan ja yrajan arvot. Funktio puolestaan palauttaa GridView objektille märittelyn mukaan joko DataReader'in tai DataSet'in keskeisen sisällön.
Aihe on jo aika vanha, joten et voi enää vastata siihen.