webForumDet fria alternativet

Problem med precent och progressbar.

4 svar · 304 visningar · startad av saw

sawMedlem sedan mars 20011 880 inlägg
#1

Jag försöker leka lite med webservice.
Jag plockar hem ett dataset som innehåller:
[kode]
myData.Tables[0].Rows["Ratt"].ToString() + " antal rätt:";

Resultat:
10 9 8 7 osv till 0
Därefter så tar jag ut hur många som har 10 rätt, 9 rätt osv
Jag lägger till dynamiskt labeller för "rätt" answerLabel.Text
och för "antalrätt" votesLabel.Text, likaså progressBar.
JAg visar inte all kod, det blir för mycket, men en del...

private Label[] answerControls;
private Label[] voteControls;
private ProgressBar[] voteBarControls;
int myCount = myData.Tables[0].Rows.Count;
int Totalt = 0;
for(int i=0;i<myCount;i++)
{
answerLabel.Text = myData.Tables[0].Rows[i]["Ratt"].ToString() + " antal rätt:";
//mera kod går här
}
int[] votes = new int[11];//Här har jag hårdkodat, men man borde
//väll kunna få in högsta siffran i myCount för att få denna dynamisk?
float highestVote=0;
//mera loop här
votes[i] = Convert.ToInt32(myData.Tables[0].Rows[i]["antalförRatt"]);
//denna if-sats är till för att få fram den omgång "antalrätt" som har högst värde.
if(votes[i] > highestVote)highestVote=votes[i];	
//här räknars det totalta "antalrätt" ihop
Totalt += Convert.ToInt32(myData.Tables[0].Rows[i]["antalförRatt"]);
//progressbar value
float voteValue = (votes[i] /(float)(Totalt)) * 100;
progressBar.Value = Convert.ToInt32(voteValue); 
//Om jag inte delar highestVote med 20, får jag knappast 
någonting som visas i progressbaren.
progressBar.Maximum = Convert.ToInt32(highestVote)/20;
//och skrivs ut på labelen
voteControls[i].Text=myData.Tables[0].Rows[i]["antalförRatt"].ToString() + "    " + "(" + Convert.ToInt32(voteValue) + "%)";

Om ni läser mina anmärkingar så finns där en del undringar.
Det som bekymrar mig är att jag får för mig att den inte räknar
rätt(jag gjort fel naturligtvis)
Bifogad bild visar hur det ser ut.
OBS bryr er inte om antal frågor inlagda, det är någonting annat.

webserver.jpg
UlfTMedlem sedan maj 20018 027 inlägg
#2

Vad är detta highestVote du räknar med? Och varför delar du det med just 20?

Jag antar att votes-arrayen innehåller alla tal som 162, 340, osv. I så fall är ju saken enkel. Du sätter:
progressBar.Maximum = 2397 'I detta fall för varje progressbar som förekommer
Därefter sätter du varje enskild progressBar.Value till sitt motsvarande votes*. Därmed har du fått rätt proportioner på alla dina progressbars.*

sawMedlem sedan mars 20011 880 inlägg
#3

Jo jag vet att det ser lustigt ut (jag har försökt att plocka det mesta ur "Börja med C#"), men highestVote är till för att den som har det, då borde progressbaren stå på 100%.
Att jag delade med 20, är enbart för att då "syns" det på
progressbarerna.
När jag gjorde som du föreslog, då fick jag error "att 162 var
godkänt för value"

Jag är medveten att det ser lustigt ut, men på något sätt så
borde det ju fungera.

UlfTMedlem sedan maj 20018 027 inlägg
#4

saw skrev:

När jag gjorde som du föreslog, då fick jag error "att 162 var
godkänt för value"

Att det var godkänt, eller inte godkänt? Om du har satt progressbar.Maximum till något större än 162, exempelvis 2397, då är 162 ett godkänt värde på progressbar.Value. Kan det ha varit så att du satte dessa i fel ordning?

saw skrev:

Att jag delade med 20, är enbart för att då "syns" det på
progressbarerna.

Men vad är det då tänkt att progressbaren ska visa? Låt oss säga att dess maximum är 2397. Nu delar du med tjugo, och får då ett maximum på 120. För att bibehålla proportionerna med maxvärdet och värdena i votes-arrayen, måste du dela även votes-värdena med 20. På vilket sätt skulle det göra värdena mer synliga? Ser man i din kod, har du istället gjort något annat. Du har räknat om votes-värdena till procent-siffror. Fast jag får inte ihop det heller. Det ser inte ut att stämma med dina progressbars.

Rent allmänt, det borde räcka att först sätta progressbar.Maximum till max-värdet (2397 i just detta fall). Först därefter sätter du progressbar.Value till 162. Vad som kommer hända, är att progressbaren fylls till 7%. Det var väl det du ville, antar jag?

sawMedlem sedan mars 20011 880 inlägg
#5

Jag tror att jag gör som så, att jag börjar om ifrån allra första
början, och se om jag kan komma bättre till

128 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)