Avatar billede carstensuurland Nybegynder
07. juli 2007 - 12:17 Der er 7 kommentarer og
1 løsning

Bruge samme datasource flere gange

Hej Eksperter

Jeg har en side med mange dropdownlister.
Værdierne til disse lister læses p.t. ind med i SqlDataReader (SQL Server 2005).

Når jeg sætter den første dropdownliste datasource = min reader, så får den fint nogle options brugeren kan vælge mellem.

Men når jeg bruger den samme reader som datasource på mine andre dropdownloster, er det som om min reader er smuttet hen efter den sidste post, hvorfor mine dropdownlister ikke bliver udfyldt.

Det kan jeg så rette op på ved at lukke min reader og genudfylde den via mit commandobjekt, men det virker lidt tumpet at gøre det på den måde, da jeg principielt spørger databasen X antal gange om de samme...

Er der nogle gode råd til hvad der er best-pratice når jeg har brug for at fylde mange dropdonlister med de samme oplysninger?
Avatar billede showsource Seniormester
07. juli 2007 - 13:25 #1
Kender ikke asp.net og SQL server, men med PHP og Mysql (DB er nok et fedt) kan man lave en forløkkke
Altså, hent info fra db, og i stedet for at bruge f.eks. ( i php )

while($vis = mysql_fetch_object($fradb))

så lave en løkke, som kører det antal gange som der er rows i dit udtræk
Avatar billede mochr Nybegynder
07. juli 2007 - 15:26 #2
Kan du ikke lave en metode der retunere fx en dataview også binde det til alle dine dropdown lister. Metoden skal self hente det fra databasen du skal bruge.
Avatar billede neoman Novice
07. juli 2007 - 18:30 #3
En reader løber data igennem en gang og så er det slut - den gemmer ikke data nogen steder af sig selv, kun i den "dataholder" man fodrer med readeren - din DDL i dit tilfælde.

Du kunne  gemme data i et dataset og binde det til dine DDLer, som mochr skriver. Ellers kunne du vel tage fat i minDDL_1.Items collection og kopiere værdierne til minDDL_2.Items osv.

Hvis du skulle vælge at lave en SQL data source, så vil den mig bekendt hente data for hver data bind, så det er nok bedre at smække data ind i et data set og så binde de DDLer til dét.
Avatar billede carstensuurland Nybegynder
08. juli 2007 - 10:24 #4
DataSets virker som en mulig løsning, men jeg harvde håbet på at jeg kunne læse data fra min reader én gang over i f.eks et array og så efterfølgende bruge mit array som DataSource.

Jeg har i den forbindelse brug for at kunne angive på Text og Value element i mit array. Kan det lade sig gøre.

ShowSource : Hvis du ikke kender ASP.NET - hvorfor svarer du så på indlæg omkring ASP.NET? Er egentligt lidt "ligeglad" med hvordan man går i PHP. Endvidere så er dit svar ikke løsningen.
Avatar billede neoman Novice
08. juli 2007 - 10:45 #5
Det er noget med at du kan binde alt til en ddl som implementerer Ienumerable:
http://msdn2.microsoft.com/en-us/library/system.collections.ienumerable(VS.80).aspx

så du kunne lave dig en klasse med TExt og Value som public properties  .. og ellers formentligt også en Structure

Ellers, hvis du ikke vil have et helt dataset, kunne du nøjes med at fylde en DataTable med din reader og så binde den.
Avatar billede neoman Novice
08. juli 2007 - 10:53 #6
Jeg har et gammelt eksempel på en datatable du kunne brodere på:
    Private Function PrepareRequestTable(ByVal ActivityID As Integer) As DataTable

        Dim tbl As DataTable
        Dim col1, col2, col3 As DataColumn
        Dim workRow As DataRow

        tbl = New DataTable("mytabl")

        col1 = New DataColumn("ResourceProfileID", Type.GetType("System.Int32"))
        col2 = New DataColumn("Autofill", Type.GetType("System.Boolean"))
        col3 = New DataColumn("ResourceID", Type.GetType("System.Int32"))
        tbl.Columns.Add(col1)
        tbl.Columns.Add(col2)
        tbl.Columns.Add(col3)

        If ActivityID > 0 Then
            Dim myDBconnection As OleDbConnection = utils.DBconnection()
            Dim myDBcommand As OleDbCommand = New OleDbCommand("", myDBconnection)
            myDBcommand.CommandText = "SELECT  ResourceProfileID, Autofill, ResourceID FROM ResourceRequests WHERE ActivityID = " & ActivityID.ToString

            Dim myreader As OleDbDataReader = myDBcommand.ExecuteReader
            Do While myreader.Read()
                workRow = tbl.NewRow()
                workRow("ResourceProfileID") = myreader.GetInt32(myreader.GetOrdinal("ResourceProfileID"))
                workRow("Autofill") = myreader.GetBoolean(myreader.GetOrdinal("Autofill"))
                workRow("ResourceID") = myreader.GetInt32(myreader.GetOrdinal("ResourceID"))
                tbl.Rows.Add(workRow)
            Loop
            myDBconnection.Close()
        End If
        tbl.AcceptChanges()
        Return tbl
    End Function
Avatar billede carstensuurland Nybegynder
31. juli 2007 - 00:06 #7
neoman : Giv et svar så får du point
Avatar billede carstensuurland Nybegynder
25. juni 2008 - 23:09 #8
Lukket
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester