Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB.NET Pudotusvalikon perusteella tietoja kannasta

Sivun loppuun

mizzou [01.03.2007 06:23:14]

#

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

neau33 [02.03.2007 02:24:15]

#

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 ...

neau33 [02.03.2007 04:02:10]

#

SELECT * FROM [tblBooks] where price between araja and yraja

tsuriga [02.03.2007 04:58:08]

#

Tässäkin varmaan pätee SELECT * is evil.

mizzou [02.03.2007 07:30:53]

#

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?

mizzou [03.03.2007 06:24:32]

#

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.

neau33 [03.03.2007 15:40:30]

#

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>

mizzou [03.03.2007 16:23:48]

#

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?

neau33 [03.03.2007 18:12:22]

#

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.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta