Jag misslyckas med att visa data i en listbox (åtminstone tror jag det är där felet ligger). Det här borde ju vara busenkelt, jag får ursäkta mig med att jag är nybörjare. Jag lägger in kod för hela funktionen, men jag tror felet ligger i else-satsen på slutet. Vet inte om jag missar det men i sql5 använder du medlemsnummer[j] som parameter. Du har satt j=0 och den räknas aldrig upp. Då kan det vara att den får ett värde på en post där ingen information finns. Även om informationen finns så kommer du få max 1 person i listan. Prova att ta bort dr5.Read(); innan whileloopen oc se vad som händer. Du anger att datareadern skall läsa två ggr. En gång före whileloopen och en gång i loopen. Hans: Tack för svar! Ok, fast då borde jag åtminstone få upp 1 person i listan, eller? Jag ändrar till 10000 så blir det en ordentlig marginal. Peter: Tack för svar! Jag har tagit bort den, samt två andra dr.Read(); som låg dubbelt, men resultatet blir fortfarande som tidigare. Det är ett par saker som gör mig fundersam. Hans: Tack igen! Blir denna någonsin true? Körs for-loopen? Peter: Jag såg inte ditt meddelande förrän nu, men jag har fått det att funka! ett litet knep jag brukar göra för att se att SQLn skapa rätt är att skapa en temp string. Sen lägger du en breakpoint på raden efter. Det gör att du kan föra muspekaren över stringen och kopiera SQL-strängen och provköra eller analysera den och sen vad du får för värden. listBox.Items.Add - vad har jag missat?
Jag får inga felmeddelanden, så jag har svårt att hitta vad som är fel.
Jag vore mycket tacksam för lite hjälp att hitta felet, och ber om ursäkt om koden är ostädad. Tack på förhand!
//klickad checkbox visar vilka som anmält sig till en tävling
protected void CheckDeltagare_Clicked(Object sender, EventArgs e)
{
ListBoxDeltagare.Items.Clear();
int[] medlemsnummer = new int[10000];
int m = 0;
int j = 0;
StringBuilder str = new StringBuilder();
int TävlID;
string status;
int deltagare;
//kontrollerar vilken checkbox som klickats
for (int i = 0; i < GridViewTävling.Rows.Count; i++)
{
GridViewRow row = GridViewTävling.Rows[i];
bool isChecked = ((CheckBox)row.FindControl("VisaDeltagare")).Checked;
if (isChecked)
{
NpgsqlConnection conn = new NpgsqlConnection(config);
conn.Open();
//tävlingens status kontrolleras
TävlID = Convert.ToInt32(GridViewTävling.Rows[i].Cells[3].Text);
status = GridViewTävling.Rows[i].Cells[1].Text;
deltagare = Convert.ToInt32(GridViewTävling.Rows[i].Cells[6].Text);
string sql = "SELECT tstatus FROM tavling WHERE tavlingsid =" + TävlID;
NpgsqlCommand comm = new NpgsqlCommand(sql, conn);
NpgsqlDataReader dr = comm.ExecuteReader();
dr.Read();
dr[0].ToString();
if (status.Equals("Planerad"))//om tävlingen befinner sig i planeringsstadiet
{
Response.Write("<script> alert('Tävlingen har inga anmälda deltagare, den är inte öppen för anmälningar än.');</script>");
return;
}
if (status.Equals("Öppen")) //om tävlingen är öppen för anmälningar
{
TävlID = Convert.ToInt32(str.Append(GridViewTävling.Rows[i].Cells[3].Text));
//tar fram anmälda deltagare till vald tävling
string sql2 = "SELECT medlemsnummer FROM deltagare WHERE deltagare.tavlingsid VALUES =" + TävlID;
NpgsqlConnection conn2 = new NpgsqlConnection(config);
conn.Open();
NpgsqlCommand comm2 = new NpgsqlCommand(sql2, conn2);
NpgsqlDataReader dr2 = comm.ExecuteReader();
dr2.Read();
medlemsnummer[m] = Convert.ToInt16(dr[0]);
m++;
dr[0].ToString();
if (deltagare.Equals(" ")) //om tävlingen inte har några anmälda deltagare
{
Response.Write("<script> alert('Tävlingen har inga anmälda deltagare än.');</script>");
return;
}
else
{
//tar fram uppgifter om ovan framtagna medlemmar
string sql5 = "SELECT fornamn, efternamn, handikapp FROM medlemmar WHERE medlemmar.medlemsnummer = " + medlemsnummer[j];
NpgsqlCommand comm5 = new NpgsqlCommand(sql5, conn);
NpgsqlDataReader dr5 = comm5.ExecuteReader();
dr5.Read();
ListBoxDeltagare.Items.Add("Deltagare"); //lägger texten "Deltagare" först i listan
while (dr5.Read())
{
ListBoxDeltagare.Items.Add(dr5[0] + " " + dr5[1] + " " + dr5[2]);
}
comm.ExecuteNonQuery();
dr.Close();
dr5.Close();
}
}
}
}
Sv: listBox.Items.Add - vad har jag missat?
Kan vara något annat jag missar med.Sv: listBox.Items.Add - vad har jag missat?
Sv:listBox.Items.Add - vad har jag missat?
Sv:listBox.Items.Add - vad har jag missat?
Sv: listBox.Items.Add - vad har jag missat?
Dels när du läser från DB använder du dr.Read();. Du borde använda
<code>
while(dr.Read())
{
//Himla massa kod
}
</code>
Sen som jag skrev innan, jag ser inte att du uppdaterar j. I else borde du ha liknande:
<code>
for(int j = 0; j < 10000; j++)
{
string sql5 = "SELECT fornamn, efternamn, handikapp FROM medlemmar WHERE medlemmar.medlemsnummer = " + medlemsnummer[j];
....
}
</code>
Sen har du ListBoxDeltagare.Items.Add("Deltagare");. Får du upp "Deltagare" i listboxen?
Mitt råd är att dela upp all kod i flera object. Blir mer överskådligt och lättläst. Har du debuggat koden? Får du några fel då? Får du ut värden från db?Sv:listBox.Items.Add - vad har jag missat?
Jag har följt dina tips, men får fortfarande inte ut något i listboxen, inte ens "Deltagare". Det är därför jag tror det är fel på kontakten med listboxen. Debuggingen funkar utan felmeddelanden. Apropå att få ut värden så vet jag inte hur man kollar det i Visual Web Developer som jag använder. Sv: listBox.Items.Add - vad har jag missat?
bool isChecked = ((CheckBox)row.FindControl("VisaDeltagare")).Checked;Sv:listBox.Items.Add - vad har jag missat?
Jag har just nu begränsat det till en del av koden - att få ut något i listboxen. Jag kollar även om det finns något att skriva ut överhuvudtaget. Så här ser det ut om någon är nyfiken.
protected void CheckDeltagare_Clicked(Object sender, EventArgs e)
{
ListBoxDeltagare.Items.Clear();
StringBuilder str = new StringBuilder();
int TävlID;
string status;
int deltagare;
GridViewRow row = null;
//kontrollerar vilken checkbox som klickats
for (int i = 0; i < GridViewTävling.Rows.Count; i++)
{
row = GridViewTävling.Rows[i];
bool isChecked = ((CheckBox)row.FindControl("VisaDeltagare")).Checked;
if (isChecked)
break;
}
NpgsqlConnection conn = new NpgsqlConnection(config);
conn.Open();
//tävlingens status kontrolleras
TävlID = Convert.ToInt32(row.Cells[3].Text);
status = row.Cells[1].Text;
deltagare = Convert.ToInt32(row.Cells[6].Text);
//tar fram anmälda deltagare till vald tävling
string sql2 = "SELECT deltagare.medlemsnummer, medlemmar.fornamn, medlemmar.efternamn, medlemmar.handikapp FROM deltagare, medlemmar WHERE deltagare.tavlingsid =" + TävlID + " AND medlemmar.medlemsnummer = deltagare.medlemsnummer";
NpgsqlConnection conn2 = new NpgsqlConnection(config);
conn2.Open();
NpgsqlCommand comm2 = new NpgsqlCommand(sql2, conn2);
NpgsqlDataReader dr2 = comm2.ExecuteReader();
ListBoxDeltagare.Items.Add("Deltagare"); //lägger texten "Deltagare" först i listan
while (dr2.Read())
{
if (dr2.IsDBNull(0)) //om tävlingen inte har några anmälda deltagare
{
Response.Write("<script> alert('Tävlingen har inga anmälda deltagare än.');</script>");
return;
}
ListBoxDeltagare.Items.Add(dr2[0] + " " + dr2[1] + " " + dr2[2]);
}
Tack för hjälpen! Nu ska jag ta tag i resten av koden, men jag återkommer säkert någon gång med fler frågor :)
Sv: listBox.Items.Add - vad har jag missat?
Då ser man om det är SQLn eller in-värdera som är fel.