Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

DropDown voorzien van gegevens (asp.net, C#)

None
15 antwoorden
  • In de HTML van een aspx-pagina (zonder code-behind) heb ik een DropDownlist staan. Er staan geen waarden in want die stop ik er pas in als ik weet welke 'waarde' als eerste getoond moet worden.

    Ik moet voor een product bepalen of het op de ene website getoond moet worden, of op een andere of misschien wel op beide.

    De waarde [i:0ecf4934d2]website1[/i:0ecf4934d2], [i:0ecf4934d2]website2[/i:0ecf4934d2] of [i:0ecf4934d2]beide[/i:0ecf4934d2] staat in de producten-tabel.

    Wanneer een product slechts op een website voorkomt maar de gebruiker wil ze op een andere of op beide site's tonen dan kan dat met blabla_wijzen.aspx.

    Het product heeft al een waarde voor een van de drie mogelijkheden en om de huidige waarde te tonen én een wijziging mogelijk te maken doe ik het als volgt:

    [code:1:0ecf4934d2]// determine order of content of dropdown ddlShowOnPage

    if (dr.GetString(7) == "WebSite1.nl")
    {
    ddlShowOnPage.Items.Insert(0, dr.GetString(7));
    ddlShowOnPage.Items.Insert(1, "WebSite2.nl");
    ddlShowOnPage.Items.Insert(2, "Beide");
    }

    if (dr.GetString(7) == "WebSite2.nl")
    {
    ddlShowOnPage.Items.Insert(0, dr.GetString(7));
    ddlShowOnPage.Items.Insert(1, "WebSite1.nl");
    ddlShowOnPage.Items.Insert(2, "Beide");
    }

    if (dr.GetString(7) == "Beide")
    {
    ddlShowOnPage.Items.Insert(0, dr.GetString(7));
    ddlShowOnPage.Items.Insert(1, "WebSite1.nl");
    ddlShowOnPage.Items.Insert(2, "WebSite2.nl");
    }[/code:1:0ecf4934d2]

    Nu wordt mij verteld dat de code wel korter kan, maar ik kan dat zo gauw niet bedenken.

    Wie weet er een snellere methode?
  • // determine order of content of dropdown ddlShowOnPage

    site = dr.GetString(7);

    ddlShowOnPage.Items.Insert(0, site);
    ins1 = site != "WebSite1.nl" ? "WebSite1.nl" : "WebSite2.nl";
    ins2 = site != "Beide" ? "Beide" : "WebSite2.nl";

    ddlShowOnPage.Items.Insert(1, ins1);
    ddlShowOnPage.Items.Insert(2, ins2);

    Maar veel voordeel haal je hiermee niet hoor. Korter is niet automatisch sneller.

    Ik weet overigens niet zeker of C# de ? : constructie kent.
  • Het werkt perfect. Thanks :D
  • Voordeel van jouw methode is dat je het later (als je de complete werking allang weer vergeten bent) eventueel nog makkelijk een item kan toevoegen, website3.nl bijv. Bij die kortere versie moet je dan weer goed nadenken of de vergelijkingen wel weer kloppen en kunnen sneller fouten ontstaan.

    Nogmaals die paar kb meer aan witruimte die een duidelijke code kost wordt ruimschoots goedgemaakt met debuggen en later aanpassen van de code.
  • Het is inderdaad een voorbeeld van [i:abd7667c4a]Hoge School-programmering[/i:abd7667c4a]. Ik zie niet direct exact hoe het werkt, maar.. het werkt. :lol:

    En mijn voorbeeld was niet goed genoeg vond de "opdrachtgever".
  • Waarom zou je een bepaalde waarde als eerste willen tonen? Mij lijkt het veel makkelijker om gewoon de lijst te laten zoals hij is en simpelweg het geselecteerde item te 'setten' (SelectedIndex).
    Daarmee zal de code een stuk overzichtelijker worden en ook beter onderhoudbaar.
  • Dat is heel simpel beantwoord: een product kan op de ene, de andere, of op beide site's getoond worden.

    Bij het aanmaken van een nieuw product bepaal je op welke site of dat het op beide getoond wordt.

    naam: product A
    kleur: groen
    Zichtbaar op: website 1

    Twee websites maken dus gebruik van dezelfde database.

    Als je dan de 'details' van een product bekijkt als 'beheerder' moet je op dat moment wel kunnen zien op welke site(s) het product getoond wordt en niet een lijstje die slechts de mogelijkheden toont.

    snappie?
  • Ja, dat snap ik. Maar de gebruikelijke wijze waarop je dat doet in webapplicaties, is niet telkens de lijst opbouwen in een andere volgorde (met het gekozen item als eerste), maar de lijst laten voor wat-ie is en het juiste item selecteren (middels SelectedIndex of SelectedValue).

    Bijv.
    [code:1:bcf5d612a3]
    private void Page_Load(object sender, System.EventArgs e)
    {
    if (!IsPostBack)
    // getValue haalt de geselecteerde waarde uit de db/session/whatever.
    ddlShowOnPage.SelectedValue = getValue();
    }
    [/code:1:bcf5d612a3]
  • Nee, je snapt het niet. (of ik snap jou niet, dat kan ook) De waarde staat al vast. De gebruiker krijgt echter de mogelijkheid het te veranderen. De gebruiker selcteert in eerste instantie dus helemaal niets maar ziet welke waarde bij een product hoort.

    Er is dus geen sprake van [i:b26ced28ee]selected[/i:b26ced28ee] maar slechts het uitlezen van een waarde uit een kolom.
  • Oh, ik snap het wel hoor ;)
    Jij snapt het niet :P :lol:

    Wat ik probeer aan te geven, is dat je de waarde die vast staat, dat je die middels SelectedValue/SelectedIndex 'set' in je code. In de gerenderde pagina ziet de gebruiker dan dit item als geselecteerd. Dat scheelt je een heleboel code (zoals je in mijn voorbeeld ziet).

    Dat de gebruiker daarna een andere waarde kan kiezen, is een ander verhaal.
  • Eh, we zijn het er over eens dat ik jou voorbeeld niet snap. Dan zou ik het eerst uit moeten proberen. Maar dat moet dan even op een later tijdstip deze week/maand.

    Ik kom er dus nog op terug.
  • Ik had je vraag twee keer doorgelezen, maar snapte niet helemaal wat je nou precies wou bereiken.

    Door die opmerking van Annie, las ik nog een keer je antwoord en begrijp eindelijk wat je wilt bereiken :D.

    De way to go is in ieder geval die van Annie!

    Misschien dat je hem niet snapt, omdat je denkt dat een dropdownmenu default altijd de bovenste waarde laat zien. Dit is niet zo. Als je een selected-attribute toevoegt in je html (wat ddlShowOnPage.SelectedValue eigenlijk doet), dan wordt die als default getoond.

    Dus onderstaand, toont 'Beide' in je dropdownbox:
    [code:1:110da52b31]
    <select name="Website">
    <option value="1">WebSite1.nl</option>
    <option value="2">WebSite2.nl</option>
    <option value="3" selected="selected">Beide</option>
    </select>
    [/code:1:110da52b31]
  • Dat zal wel Remytje maar dat is niet de bedoeling.

    Nog een keer: een product kan getoond worden op website1, website2 of beide.


    Voorbeeld zoals het in een tabel staat:
    Product
    Naam: A
    Kleur: Geel
    Zichtbaar: website 1

    Naam: B
    Kleur: Geel
    Zichtbaar: Beide

    Naam: C
    Kleur: Blauw
    Zichtbaar: website 2

    Details.aspx

    Vraag: toon gegevens product A

    Naam: A
    Kleur: Geel
    Zichtbaar: website 1

    De waarde die je ziet bij Zichtbaar is: website 1
    In de dropdown moet staan:

    [b:cc61e9b0ac]website 1[/b:cc61e9b0ac][/color:cc61e9b0ac]
    website 2[/color:cc61e9b0ac]
    Beide[/color:cc61e9b0ac]


    Vraag: toon gegevens product B

    Naam: B
    Kleur: Geel
    Zichtbaar: Beide

    In de dropdown moet staan:

    [b:cc61e9b0ac]Beide[/b:cc61e9b0ac][/color:cc61e9b0ac]
    website 1[/color:cc61e9b0ac]
    website 2[/color:cc61e9b0ac]

    Vraag: toon gegevens product C
    In de dropdown moet staan:

    [b:cc61e9b0ac]website 2[/color:cc61e9b0ac][/b:cc61e9b0ac]
    website 1[/color:cc61e9b0ac]
    Beide[/color:cc61e9b0ac]



    Annie zegt dat de volgorde niet belangrijk is maar dat is het juist wel. De volgorde moet dus steeds veranderen.

    Wat jij waarschijnlijk doet is iedere keer de waarde tonen die er bij hoort en vervolgens blijft de volgorde gelijk.
    Bij jouw voorbeeld is het - waarschijnlijk - altijd:

    Website 1
    Website 2
    Beide.

    En dat is niet de bedoeling.
  • [quote:e65b2aa560="Wiep Corbier"]Annie zegt dat de volgorde niet belangrijk is maar dat is het juist wel. De volgorde moet dus steeds veranderen.
    [/quote:e65b2aa560]
    Kan je dan uitleggen waarom die volgorde zo belangrijk is? Als dat namelijk alleen maar is om deze waarde in beeld (of: geselecteerd) te krijgen, dan ben je imho niet juist bezig. Als je andere redenen hebt, dan hoor ik ze graag.
    [quote:e65b2aa560="Wiep Corbier"]Wat jij waarschijnlijk doet is iedere keer de waarde tonen die er bij hoort en vervolgens blijft de volgorde gelijk.
    Bij jouw voorbeeld is het - waarschijnlijk - altijd:

    Website 1
    Website 2
    Beide.
    [/quote:e65b2aa560]
    Klopt, zowel Remytje als ik lossen het op die wijze op. En niet alleen wij doen dat zo. Dit is namelijk de 'normale' manier om dat aan te pakken.
  • Ik vind jullie oplossing - na er over nagedacht te hebben - eigenlijk veel beter. En ik denk dat ik de 'opdrachtgever' ook wel overtuig dat jullie oplossing beter is. Het is veel consequenter.

    Daarom wil ik jullie oplossing gaan toepassen.

    Heb het inmiddels toegepast. [u:c2ea8c5858]Beter!! [/u:c2ea8c5858]

    Bedankt voor jullie bijdrage en advies.

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.