webForumDet fria alternativet

Första värdet visas inte

.NET

6 svar · 487 visningar · startad av silfver

Medlem sedan apr. 200312 679 inlägg
Frågan#1

Jag använder den här koden för att lista alla spel som finns i databasen.

<asp:DropDownList ID="gameNameDropDown" runat="server" DataSourceID="games" DataTextField="gameName" DataValueField="gameID" OnSelectedIndexChanged="gameNameDropDown_SelectedIndexChanged" AutoPostBack="True">
      
</asp:DropDownList>

<asp:AccessDataSource ID="games" runat="server" DataFile="~/game.mdb" SelectCommand="SELECT [gameID], [gameName] FROM [gameInfo]"></asp:AccessDataSource>

När man valt ett spel så visas de i en gridView. Inga problem.

Saken är den att jag inte kan visa det översta spelet. Kolla min sida så är det enklare att förstå. Spelet tetris får inget värde.

Hur kan jag lösa det?

Medlem sedan jan. 2007152 inlägg
#2

Vad gör du i gameNameDropDown_SelectedIndexChanged? Verkar som att du binder om din droppis varje gång du väljer ett värde i den? Gör en funktion där du hämtar de data som ska in i din droppis första gången besökaren exekverar sidan och utnyttja sedan viewstaten (den kommer ihåg sina egna värden).

Du måste också lägga till ett item "Välj" i din droppis högst upp, annars kan du ju inte välja det första alternativet första gången du kliver in på sidan om du använder autopostback.

gameNameDropDown.DataSource = ...;
gameNameDropDown.DataTextField = "gameName";
gameNameDropDown.DataValueField = "gameID";
gameNameDropDown.DataBind();

// Lägg till "Välj" högst upp
gameNameDropDown.Items.Insert(0, new ListItem("Välj", "-1"));
Medlem sedan apr. 200312 679 inlägg
#3

butiko skrev:

Vad gör du i gameNameDropDown_SelectedIndexChanged? Verkar som att du binder om din droppis varje gång du väljer ett värde i den? Gör en funktion där du hämtar de data som ska in i din droppis första gången besökaren exekverar sidan och utnyttja sedan viewstaten (den kommer ihåg sina egna värden).

Du måste också lägga till ett item "Välj" i din droppis högst upp, annars kan du ju inte välja det första alternativet första gången du kliver in på sidan om du använder autopostback.

Tack för ditt svar!

Ja, jag använder autoPostback. Och att lägga till ett "Välj"-värde är precis vad jag vill göra! Så här ser koden ut i cs-filen:

protected void gameNameDropDown_SelectedIndexChanged(object sender, EventArgs e)
{
	Response.Redirect("highScores.aspx?gameID="+gameNameDropDown.SelectedValue);
}

Men jag förstod inte riktigt hur jag skulle applicera din kod för att få den att fungera. :)

r\ Jag har response.Redirect för att jag ska kunna hämta ut sql-data med en querystring. :)

Medlem sedan jan. 2007152 inlägg
#4

Ta bort redirecten (du ska aldrig redirecta tillbaka till sidan du redan befinner dig på). Skippa AccessDataSource-kontrollen och gör kopplingen i koden (lägg gärna ned en stund på att göra ett enkelt dal istället som hanterar dina databasanrop). Skippa querystrings, gameid når du överallt med gameNameDropDown.SelectedValue. I gameNameDropDown_SelectedIndexChanged anropar du istället en funktion som fyller din gridview med dina data.

Medlem sedan apr. 200312 679 inlägg
#5

butiko skrev:

Ta bort redirecten (du ska aldrig redirecta tillbaka till sidan du redan befinner dig på). Skippa AccessDataSource-kontrollen och gör kopplingen i koden (lägg gärna ned en stund på att göra ett enkelt dal istället som hanterar dina databasanrop). Skippa querystrings, gameid når du överallt med gameNameDropDown.SelectedValue. I gameNameDropDown_SelectedIndexChanged anropar du istället en funktion som fyller din gridview med dina data.

Okay. :) Hur skall denna raden se ut?

gameNameDropDown.DataSource = ;

Vet inte hur man gör en koppling i koden.

Medlem sedan jan. 2007152 inlägg
#6

Som datakälla ska du ha en collection av något slag. En array, en datatable eller liknande. Du gör en koppling till din db, fyller en datatable med resultatet och använder den som datakälla.

Jag föreslår att du byter ut din accessdatabas mot en riktig databas, sql server 2005 express (http://msdn.microsoft.com/vstudio/express/sql/) och pluggar ado.net 2.0. Visual web developer 2005 express förutsätter jag att du redan arbetar med, annars hänmtar du även hem den omedelbums (http://msdn.microsoft.com/vstudio/express/vwd/default.aspx). Allt är licensfritt och gratis!

En bra start på dagen för både nya och gamla .net-utvecklare är naturligtvis http://www.asp.net. Själv gillar jag film. :) http://www.asp.net/learn/videos/

Här kan du läsa allt om hur man utnyttrar datakontrollerna:
http://quickstarts.asp.net/QuickStartv20/aspnet/doc/data/databases.aspx
Men som sagt, jag föreslår att du också försöker lära dig att göra dina egna kopplingar i koden, förr eller senare kommer du behöva det. Personligen tycker jag inte att databaskopplingarna hör hemma i presentationslagret.

Medlem sedan nov. 2002302 inlägg
#7

Ok, nu kan jag visserligen inte alls ASP.NET men innebär inte OnSelectedIndexChanged="gameNameDropDown_SelectedIndexChanged" att indexet måste ändras för att funktionen ska anropas? Och står det jämt valt tetris som standard så går det ju inte att ändra till tetris eller hur? Borde väl finnas något annat du kan använda istället typ OnSelectClick eller så.

295 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
160 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
161 ms — ändringar (db)