Toon posts:

[ASP.NET - VB] String toevoegen aan variabelenaam

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met een website in ASP.net met Visual Basic waarbij ik gebruik maak van een database.
Uit deze database haal ik een aantal waardes (bv. Competitiespelers)
Deze waardes gebruik ik om radiobuttons aan te maken, bv CompetitiespelersRadiobutton

Ik wil nu van een gebruiker aangeven of hij wel of niet lid is van een groep (Competitiespelers).
Hierbij wil ik de waarde "Competitiespelers" die ik uit de database haal koppelen zodat ik de radiobutton aan of uit kan vinken.

De variabele die ik dan nodig heb is CompetitiespelersRadiobutton.Checked, deze wordt dan op True gezet als de gebruiker lid is van deze groep.

Ik heb het volgende al geprobeerd.

Visual Basic .NET:
1
2
groepsnaam = objSelectGroepsledenReader.GetString(0)
groepsnaam & "RadioButton.Checked" = True


Visual Basic .NET:
1
2
groepsnaam = objSelectGroepsledenReader.GetString(0)
groepsnaam + "RadioButton.Checked" = True


Visual Basic .NET:
1
2
radiobutton = objSelectGroepsledenReader.GetString(0) + "Radiobutton.Checked"
radiobutton = True


Iemand een idee wat ik fout doe?

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Probeer Evil Eval eens. ;)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 04-05 14:55

Janoz

Moderator Devschuur®

!litemod

Kun je geen dictionary object gebruiken? Op die manier hoef je geen ranzige enorm foutgevoelig en onveilige eval achtige codegeneratie te gebruiken.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 06-05 19:07

gorgi_19

Kruimeltjes zijn weer op :9

Eval werkt niet in VB.Net
En je oplossing ligt in de sfeer van dynamisch aanroepen van controls; iedere control heeft een ID, welke je kan opzoeken in de controlcollection dmv de Findcontrol method

[ Voor 78% gewijzigd door gorgi_19 op 04-05-2005 14:00 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
gorgi_19 schreef op woensdag 04 mei 2005 @ 13:59:
Eval werkt niet in VB.Net
En je oplossing ligt in de sfeer van dynamisch aanroepen van controls; iedere control heeft een ID, welke je kan opzoeken in de controlcollection dmv de Findcontrol method
De control ID is het probleem niet, maar meer het samenvoegen van een variabele met een string wat ik niet voor elkaar krijg

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 06-05 19:07

gorgi_19

Kruimeltjes zijn weer op :9

Visual Basic .NET:
1
Directcast(Me.findcontrol("melpje" & variabele), ListItem).Checked = True

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • stp_4
  • Registratie: Maart 2003
  • Laatst online: 30-04 19:47
Kun je niet dynamisch controls toevoegen aan een panel ofzoiets? Als de waardes in een datatable staan, kun je afhankelijk van het aantal en of ze lid zijn of niet een control RadioButton toevoegen met RadioButton.Checked = True of false;

[ Voor 4% gewijzigd door stp_4 op 04-05-2005 14:23 ]

stp - PSN ID: stp_4


Verwijderd

Topicstarter
stp_4 schreef op woensdag 04 mei 2005 @ 14:22:
Kun je niet dynamisch controls toevoegen aan een panel ofzoiets? Als de waardes in een datatable staan, kun je afhankelijk van het aantal en of ze lid zijn of niet een control RadioButton toevoegen met RadioButton.Checked = True of false;
Dat zou kunnen maar ik haal de groepen uit 1 databasetabel en vervolgens uit een andere tabel of gebruikers lid zijn van de groep.

Het is me ondertussen gelukt met deze code:
Visual Basic .NET:
1
Directcast(Me.findcontrol(variabele & "Radiobutton"), Radiobutton).Checked = True


Bedankt allemaal!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 06-05 19:07

gorgi_19

Kruimeltjes zijn weer op :9

stp_4 schreef op woensdag 04 mei 2005 @ 14:22:
Kun je niet dynamisch controls toevoegen aan een panel ofzoiets? Als de waardes in een datatable staan, kun je afhankelijk van het aantal en of ze lid zijn of niet een control RadioButton toevoegen met RadioButton.Checked = True of false;
Dat levert, zeker met postbacks, voor de meesten meer problemen op dan dat het oplost. Zeker omdat je zelf verantwoordelijk bent voor je controlcollection en deze zelf moet opbouwen bij iedere request (en dus ook na een postback).

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • stp_4
  • Registratie: Maart 2003
  • Laatst online: 30-04 19:47
gorgi_19 schreef op donderdag 05 mei 2005 @ 08:30:
[...]

Dat levert, zeker met postbacks, voor de meesten meer problemen op dan dat het oplost. Zeker omdat je zelf verantwoordelijk bent voor je controlcollection en deze zelf moet opbouwen bij iedere request (en dus ook na een postback).
Daar heb je inderdaad gelijk in :)

stp - PSN ID: stp_4


Verwijderd

Topicstarter
Dit probleem heb ik destijds kunnen oplossen voor radioButton.Checked met bovenstaande tips.
Ik wil nu hetzelfde voor een ListItem in een DropDownList.
Visual Basic:
1
Directcast(Me.findcontrol(variabele & "ListItem"), ListItem).Selected = True
Hiermee lukt het niet, ik krijg de foutmelding:
De objectverwijzing is niet op een exemplaar van een object ingesteld.

Alle mogelijke waardes voor de variabele met "ListItem" heb ik als id van een ListItem ingesteld.
vb. als de variabele "Soep" is, dan bestaat er een SoepListItem. Ik wil dat deze SoepListItem geselecteerd wordt in de DropDownList.

Iemand suggesties wat ik fout doe?

  • Delphi32
  • Registratie: Juli 2001
  • Laatst online: 23:47

Delphi32

Heading for the gates of Eden

Ik vermoed zo dat een ListItem geen control is an sich, en dus niet gevonden wordt door me.findControl. Een ListItem is immers een onderdeeltje van het control waar ie in zit, de DropDownList. Dus zoek de DropDownList, daarin zitten de ListItems, en DropDownList heeft vast wel een methode om een ListItem te selecteren.
Ik weet niet zeker of VB anders werkt op dit punt dan Delphi (ik vermoed van niet), maar het lijkt me toch het controleren waard.

Verwijderd

Topicstarter
Delphi32 schreef op zaterdag 21 mei 2005 @ 00:55:
Ik vermoed zo dat een ListItem geen control is an sich, en dus niet gevonden wordt door me.findControl. Een ListItem is immers een onderdeeltje van het control waar ie in zit, de DropDownList. Dus zoek de DropDownList, daarin zitten de ListItems, en DropDownList heeft vast wel een methode om een ListItem te selecteren.
Ik weet niet zeker of VB anders werkt op dit punt dan Delphi (ik vermoed van niet), maar het lijkt me toch het controleren waard.
Ik heb het redelijk simpel kunnen oplossen volgens mij
Visual Basic:
1
2
3
4
5
For i = 0 To GebruikersDropDownList.Items.Count - 1
    If GebruikersDropDownList.Items(i).Value = objSelectCompetitieSpelerReader.getInt32(1) Then
      GebruikersDropDownList.Items(i).Selected = true
    End If
Next


Hier wordt de waarde uit de database (objSelectCompetitieSpelerReader.getInt32(1)) vergeleken met alle waardes in de dropdownlist (GebruikersDropDownList.Items(i).Value). Als deze gelijk is dan wordt de betreffende listitem geselecteerd (GebruikersDropDownList.Items(i).Selected = true)

Verwijderd

Topicstarter
Is het ook mogelijk om hetzelfde te doen bij een variabele die alleen in de code gebruikt wordt, dus geen Webcontrol?

Ik ben bezig met een competitie webpagina waarbij aan de hand van uitslagen uit de database de stand berekend wordt.

Er zijn 6 teams met elk een eigen code (A, B, C, D, E en F)
het totaal aantal punten van elk team wordt berekend en bijgehouden in totaalA, totaalB etc.

Ik wil nu alle totalen van totaalA t/m totaalF vergelijken en zo sorteren zodat van elk team de positie bepaald wordt. Ik kom er alleen niet uit hoe ik de varibelen totaal A etc. dynamisch aan kan roepen.

Ik heb de volgende code.
Visual Basic:
1
2
3
4
5
6
7
dim TeamCodes() as String = {"A", "B", "C", "D", "E", "F"}

dim i as Integer

for i = 0 to 5
    Response.write(Directcast(Me.findcontrol("totaal" & TeamCodes(i)), Integer))
next
Ik krijg hierbij de foutmelding:
De objectverwijzing is niet op een exemplaar van een object ingesteld

Ik weet ik hiermee niet kan sorteren, maar heb gaat mij er even om dat ik de totaalA t/m totaalF variabelen kan gebruiken om met elkaar te vergelijken.

Iemand een idee of dit mogelijk is en hoe ik dit het best kan aanpakken?

[ Voor 10% gewijzigd door Verwijderd op 15-06-2005 02:27 ]


  • D4Skunk
  • Registratie: Juni 2003
  • Laatst online: 20-10-2025

D4Skunk

Kind of Blue

wat jij nodig hebt is een stringdictionary (klik):
C#:
1
2
3
4
5
  StringDictionary sd=New StringDictionary();
  sd["TotaalA"]=5;
  sd["TotaalB"]=240;
  System.Windows.Forms.MessageBox.Show(
       String.Format("Het totaal voor A is {0:0.00} €",sd["TotaalA"]) );

  • Glorix Jim
  • Registratie: Februari 2000
  • Laatst online: 04-05 16:29
Is het ook niet gewoon handiger om die totalen in SQL op te vragen?

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Waarom maak je niet gewoon een Array ( Of andere Collection ) van teams. Dus ongeveer zo

C#:
1
2
3
4
5
Team[] teams = new Team[ 6 ];
for( int i=0; i < teams.Length; i++ )
{
    teams[ i ] = new Team( ..... );
}

En dan kan je later in je code er gewoon weer doorheen lopen
C#:
1
2
3
4
foreach( Team team in teams )
{
    Response.Write( "Team " + team.TeamCode + " heeft een totaal van " + team.TotaalScore.ToString() );
}

[ Voor 11% gewijzigd door Woy op 15-06-2005 10:43 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Topicstarter
D4Skunk schreef op woensdag 15 juni 2005 @ 08:45:
wat jij nodig hebt is een stringdictionary (klik):
C#:
1
2
3
4
5
  StringDictionary sd=New StringDictionary();
  sd["TotaalA"]=5;
  sd["TotaalB"]=240;
  System.Windows.Forms.MessageBox.Show(
       String.Format("Het totaal voor A is {0:0.00} €",sd["TotaalA"]) );
Ik begrijp dit niet helemaal, maar ik zie ook niet hoe ik hiermee dynamische variabelen kan maken. Ik wil de variabele totaal(i) met i = A t/m F met elkaar vergelijken. Ik kan hetzelfde bereiken met een ingewikkelde if met tientallen niveaus bijv:
Visual Basic:
1
2
3
4
5
6
7
8
if (totaalA > totaalB)
    if (totaalA > totaalC)
        ....
            if (totaalA > totaalF)
                '' team A staat eerste
            elseif (totaal A < totaalF)
                '' team A staat tweede
            etc...

Volgens mij kan ik hetzelfde gebruiken door dus "totaal" + code (met A t/m F) als variabele te gebruiken om te vergelijken.
Glorix Jim schreef op woensdag 15 juni 2005 @ 09:57:
Is het ook niet gewoon handiger om die totalen in SQL op te vragen?
Zou idd kunnen, het probleem is dat ik voor alle uitslagen gebruik maak van een aparte tabel waar alle wedstrijden (met uitslagen) ieder in een aparte record staan. Elk team heeft dus 10 records in deze tabel staan. Alle wedstrijden met uitslagen worden 1 voor 1 uit de database gelezen en in het wedstrijdschema gezet, de volgorde is hierbij heel belangrijk zodat ik geen "ORDER BY team" kan gebruiken. Tijdens het 1 voor 1 opvragen tel ik gelijk per team alle uitslagen op zodat ik per team een totaal krijg.

Als ik hiervoor een aparte query zou aanmaken dan zou ik alle uitslagen opnieuw moeten opvragen uit de database. Per pagina zou dit 2x 30 wedstrijden betekenen die elk 1 voor 1 opgevraagd zou worden.
rwb schreef op woensdag 15 juni 2005 @ 10:42:
Waarom maak je niet gewoon een Array ( Of andere Collection ) van teams. Dus ongeveer zo

C#:
1
2
3
4
5
Team[] teams = new Team[ 6 ];
for( int i=0; i < teams.Length; i++ )
{
    teams[ i ] = new Team( ..... );
}

En dan kan je later in je code er gewoon weer doorheen lopen
C#:
1
2
3
4
foreach( Team team in teams )
{
    Response.Write( "Team " + team.TeamCode + " heeft een totaal van " + team.TotaalScore.ToString() );
}
Bedoel je dat alle totalen in een array geplaatst worden waarbij de array doorlopen wordt om te sorteren? Dit is idd een goede oplossing, alleen moet ik de waarde kunnen koppelen aan het goede team. Is het mogelijk om i.p.v. een string aan een array te koppelen, bv: team("string") = 10. <- Op deze manier lukt het niet.

Ik had in eerste instantie per team een array in gedachten met de team naam (String) samen met alle scores (Integers), maar bleek dat je geen Array van zowel Strings als Integers kon maken (of vergis ik me?).

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Nee ik bedoel dat je alle gegevens van een team in een Team object ( Die je zelf natuurlijk moet maken ) zet. Deze zet je dan in een array.

Ik heb je post niet helemaal duidelijk gelezen maar ik denk dat je Database model totaal niet goed in elkaar steekt.

Edit:

En nee er bestaat niet zoiets als variabele variabele namen. Een variabelenaam is er alleen om het voor jou makkelijker te maken om geheugen adressen ( objecten ) aan te spreken. Bij het uitvoeren van de code is het gewoon een stukje geheugen wat op de stack is vrijgemaakt wat naar een ander stukje geheugen wijst waar het object staat. Dus je kan niet variabele namen aan elkaar plakken om zo naar een object te verwijzen want die namen bestaan bij het uitvoeren van de code niet meer. Als je door middel van een string een object wilt verkrijgen zul je gebruik moeten maken van collecties die hier faciliteiten voor bieden. Dus zoals hierboven al gezegd word bijvoorbeeld een StringDictionary of een HashTable ( parent object van StringDictionary ).

[ Voor 63% gewijzigd door Woy op 15-06-2005 12:26 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Topicstarter
rwb schreef op woensdag 15 juni 2005 @ 12:18:
Nee ik bedoel dat je alle gegevens van een team in een Team object ( Die je zelf natuurlijk moet maken ) zet. Deze zet je dan in een array.

Ik heb je post niet helemaal duidelijk gelezen maar ik denk dat je Database model totaal niet goed in elkaar steekt.
Ik heb 2 tabellen hiervoor:
- teams met de teamgegevens, o.a naam
- wedstrijden met o.a thuisteamID, uitteamID, thuisScore, uitScore

Ik kan de uitslagen niet in de teams tabel zetten zoals jij volgens mij bedoeld:
vb.
teamnaam - score1 - score2 - ... - score10

Dat zou alles wel makkelijker maken, maar dit is niet mogelijk aangezien de structuur van het wedstrijdschema vaststaat en ik op deze manier hier geen controle over heb.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Nee zoals je het nu hebt is veel makkelijker dan alles in 1 tabel zetten. Zoals je het nu hebt ziet je database er wel redelijk uit.

Maar wat wil je nou eigenlijk bereiken? Want volgens mij loop je gewoon ontzettend moeilijk te doen. Je moet helemaal niet eens gebruik willen maken van Variabele Variabelen. Meestal is het totaal niet nodig en ook erg fout gevoelig.

Als je perse in je code je totaalscore uit wilt rekenen waarom maak je dan niet een class Team die er ongeveer als volgt uitziet

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class Team
{
    private Wedstrijd[] _wedstrijden;
    
    public Team(){ ... }

    public Wedstrijd[] Wedstrijden
    {
        get
        {
            return _wedstrijden;
        }
    }

    public int TotaalScore
    {
        get
        {
            int score = 0;
            foreach( Wedstrijd wedstrijd in Wedstrijden )
            {
                score += wedstrijd.GetScore( this );
            }
            return score;
        }
    }
}

[ Voor 42% gewijzigd door Woy op 15-06-2005 12:49 ]

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Verwijderd

Topicstarter
rwb schreef op woensdag 15 juni 2005 @ 12:39:
Nee zoals je het nu hebt is veel makkelijker dan alles in 1 tabel zetten. Zoals je het nu hebt ziet je database er wel redelijk uit.

Maar wat wil je nou eigenlijk bereiken? Want volgens mij loop je gewoon ontzettend moeilijk te doen. Je moet helemaal niet eens gebruik willen maken van Variabele Variabelen. Meestal is het totaal niet nodig en ook erg fout gevoelig.

Als je perse in je code je totaalscore uit wilt rekenen waarom maak je dan niet een class Team die er ongeveer als volgt uitziet

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class Team
{
    private Wedstrijd[] _wedstrijden;
    
    public Team(){ ... }

    public Wedstrijd[] Wedstrijden
    {
        get
        {
            return _wedstrijden;
        }
    }

    public int TotaalScore
    {
        get
        {
            int score = 0;
            foreach( Wedstrijd wedstrijd in Wedstrijden )
            {
                score += wedstrijd.GetScore( this );
            }
            return score;
        }
    }
}
Nee nee nee, ik wil niet de totaalscore berekenen, maar aan de hand van alle totaalscores de stand berekenen, dus welk team op nr. 1 staat welk team op nr. 2 etc..

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Dan sorteer je dus op de TotaalScore

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Verwijderd schreef op woensdag 15 juni 2005 @ 13:03:
Nee nee nee, ik wil niet de totaalscore berekenen, maar aan de hand van alle totaalscores de stand berekenen, dus welk team op nr. 1 staat welk team op nr. 2 etc..
Dus? Moet rwb dat nou voor je gaan schrijven ofzo? Dat is hier niet de bedoeling, we hebben met zijn allen wel meer te doen. ;) rwb geeft alleen aan hoe je je code zou kunnen/moeten structureren om goed bezig te zijn. Ga asjeblieft eens wat lezen over arrays en andere manieren om collecties bij te houden. Variabele variabelen zijn in principe in elke taal mogelijk maar ze zijn altijd even foutgevoelig en lastig om te gebruiken. Arrays en dergelijke zijn dat niet. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
-NMe- schreef op woensdag 15 juni 2005 @ 14:20:
[...]

Dus? Moet rwb dat nou voor je gaan schrijven ofzo? Dat is hier niet de bedoeling, we hebben met zijn allen wel meer te doen. ;) rwb geeft alleen aan hoe je je code zou kunnen/moeten structureren om goed bezig te zijn. Ga asjeblieft eens wat lezen over arrays en andere manieren om collecties bij te houden. Variabele variabelen zijn in principe in elke taal mogelijk maar ze zijn altijd even foutgevoelig en lastig om te gebruiken. Arrays en dergelijke zijn dat niet. :)
Waar vraag ik dat dan?? Hij vraagt wat ik wil bereiken dus daar geef ik antwoord op. Maar maakt niet uit, ik probeer er wel uit te komen met bovenstaande tips. Grr wat is programmeren lastig :P

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Als je dan dus een Array van Teams hebt kun je sorteren met

C#:
1
Array.Sort( MyTeamArray, MyComparerDieOpTotaalScoreVergelijkt );

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”

Pagina: 1