webForumDet fria alternativet

Välja celler från en databastabell

.NET

6 svar · 363 visningar · startad av echoSwe

Medlem sedan nov. 20041 189 inlägg
Frågan#1

Tjena,

Undrar en grej om att loopa igenom tabellrader som kommer från en databas.

Jag har en sida med en repeater. I denna repeater ligger:

<asp:Repeater ID="dlClantable" runat="server">
	<headertemplate>
		<h3>The clan members are</h3>
	</headertemplate>
	<ItemTemplate>
		<div class="clan_member">...</div>
		<p>[b]<asp:Panel Visible="false" 
		runat="server" ID="panel<%# DataBinder.Eval(Container.DataItem, "MemberID") %>"[/b]>
			Mobilnummer/Self-phone: <%# DataBinder.Eval(Container.DataItem, "Mobilnummer") %><br />
			Hemnummer: <%# DataBinder.Eval(Container.DataItem, "Hemnummer") %><br />
			Adress:<br />
			<%# DataBinder.Eval(Container.DataItem, "Adress") %><br />
			<%# DataBinder.Eval(Container.DataItem, "Postnummer	") %> 
<%# DataBinder.Eval(Container.DataItem, "Land") %>
		</asp:Panel></p>
	</ItemTemplate>
</asp:Repeater>

Sedan så är det så att jag vill bestämma själv om den här mer personliga informationen ska visas - den som ligger i <p> alltså. Funderade på om man kunde ha en panel som visas (visible="true") om rätt lösenord är angett, och eftersom det ligger i en repeater så måste ju varje panel ha annorlunda id.

Tyvärr fungerar inte det sättet med att binda in memberID i panelen - hur ska jag göra?

Så jag har skrivit så här i min code-behind:

protected void checkLogin(DataSet dataSet)
{
	if (Request.Form["password"].Length > 0 && Request.Form["password"] == "thisPassword")
	{
		foreach ([b]TableRow tableRow in dataSet.Tables["NHGKlanen"][/b])
		{
			[b]string panelName = "panel" + dataSet.MemberID;[/b]
			Panel panelName;
			panelName.Visible = true;
		}
	}
}

Jag skickar då ett dataset till funktionen och vill att den ska kolla fältet (cellen) MemberID och namnge varje ny instans av Panel till panel + MemberID.

Jag får felmeddelandet att man inte kan ha ett antal TableRows (eller DataRows testade jag också med) i ett DataSet, utan att: "because 'System.Data.DataTable' does not contain a definition for 'GetEnumerator', or it is inaccessible".

Jag har redan skapat dataset-et och har hämtat information från det, spelar det någon roll?

Finns det någon bättre lösning till detta?

MVH Henke

Medlem sedan nov. 2003569 inlägg
#2
protected void checkLogin(DataSet dataSet)
{
	if (Request.Form["password"].Length > 0 && Request.Form["password"] == "thisPassword")
	{
		foreach (TableRow tableRow in dataSet.Tables["NHGKlanen"])
		{
			string panelName = "panel" + dataSet.MemberID;
			Panel panelName;
			panelName.Visible = true;
		}
	}
}

EchoSwe.. Det här är lite feltänkt :( Detta verkar vara en riktigt ASP-till-ASP.NET-klassiker-fel

1. Request.Form behöver du nästan aldrig använda.
2.

string panelName = "panel" + dataSet.MemberID;

Här skapar du en string som heter "panelName" och fyller den med ett värde från dataset:et

Panel panelName;

Här deklarerade du en oinstansierad panel som har samma namn som strängen ovan, här borde Visual.Studio.Net skrikit till.

panelName.Visible = true;

Här sätter du ett värde på den oinstansierade panelen. Detta är kod som inte kommar att fungera. Denna panel kommer aldrig att visas eftersom du inte binder den till något som finns på "Design filen"

<asp:Panel Visible="false" runat="server" ID="panel<%# DataBinder.Eval(Container.DataItem, "MemberID") %>">

Här ändrar du namnet på panelen för varje item som byggs på i Repeatern. Bäddat för trubbel :bire

foreach (TableRow tableRow in dataSet.Tables["NHGKlanen"])

Här drar du ur HTML tabellrader ur ett dataSet som innehåller DataRow:s.. Det är lite fel typ.

Jag tror det vore bättre om du helt gör om din lösning. Det är lätt att bli lite ivrig att göra applikationer innan man förstått riktigt hur ASP.NET fungerar. :) Jag tror det vore bra om du läser lite om Webcontrols. Och att gå från ASP/PHP till ASP.NET är svårare än om man inte har programmerat alls tidigare. Tyvärr är det så. Ett gott råd är att försöka glömma bort ALLT du lärt dig om ASP/PHP tidigare, då lär du dig snabbare. Det är ingen ide att försöka hitta likheter och mönster mellan de olika teknikerna, för det finns inga.

Medlem sedan nov. 20041 189 inlägg
#3

;) total massaker...

Nej, jag hade känslan att jag var ute och cyklade.

Om rätt lösenord har använts så ska panelerna (eller <div runat="server">....</div>) visas... och det är egentligen allt. Grejen är ju att allt ligger i en repeater.

Sen använder jag inte visual studio... Jag kodar allt för hand, eller om det är något kodintensivt, i SharpDevelop som är gratis.

Hur ska jag göra då? (ni behöver självklart inte skriva en hel lösning för mig, men ge mig några hints)

Medlem sedan nov. 2003569 inlägg
#4

Sen använder jag inte visual studio... Jag kodar allt för hand, eller om det är något kodintensivt, i SharpDevelop som är gratis.

Uuuh. Jag tror inte det är möjligt att koda ASP.NET för hand och komma ihåg alla händelser,egenskaper,metoder för klasserna i huvudet.. Man måste nästan ha Intellisense. Som beskriver klasserna samtidigt som du använder dem.

Hur ska jag göra då?

Du måste införskaffa dig Visual Studio.NET, att koda utan den är som att skotta snö med en tandpetare (allvarligt)

Medlem sedan nov. 20041 189 inlägg
#5

Nöff skrev:

Uuuh. Jag tror inte det är möjligt att koda ASP.NET för hand och komma ihåg alla händelser,egenskaper,metoder för klasserna i huvudet.. Man måste nästan ha Intellisense. Som beskriver klasserna samtidigt som du använder dem.

Du måste införskaffa dig Visual Studio.NET, att koda utan den är som att skotta snö med en tandpetare (allvarligt)

Hehe, jag är bra på att skotta snö med en tandpetare i så fall. Men jag förstår vart du vill komma. Det händer ibland att jag startar SharpDevelop bara för att kolla intellisense funktionen i den i något objekt jag använder.

Det är så att när jag kodade C++ så var allt i huvudet. (Men det är klart att jag inte kunde göra lika mycket då)

Jag kan sträcka mig så långt som till Web Developer 2005 Beta som är gratis eller WebMatrix trots att jag inte gillar att den skriver stunt i HTML koden - grejor som absolut inte är xhtml... =)

Men som sagt, hur ska jag göra i så fall? Jag kan gå med på att ladda hem WebMatrix ;)

Medlem sedan maj 20012 812 inlägg
#6

Men som sagt, hur ska jag göra i så fall? Jag kan gå med på att ladda hem WebMatrix

Om du är seriös i dina försök inom .NET världen så är ett försök utan VS.NET ganska meningslöst, och det är inte Intellisens som är den stora vinsten även om den finns där, den stora vinsten är VS.NET debug möjligheter (även om de inte är så bra som i 2005).

Möjligheterna att debugga kod som redan är kompilerad och körs (typ en ASP.NET applikation eller en windowsservice eller varför inte en COM+ applikation) är värt pengarna, vill du inte lägga ner pengarna så ut på DC och hämta hem en version, vet att man inte skall uppmana till kriminella handlingar men VS gör ditt liv som utvecklar så extremt mycket enklare. Att sitta kod .NET för hand i typ notepad och sedan kompilera koden i kommandprompten är så otroligt korkat så jag inte har ord för det, köp skiten eller kopiera den om inte så lägg ner .NET.

- M

Medlem sedan nov. 20041 189 inlägg
#7

Okej, jag fattar.

Kommer inte lägga ner .Net eftersom jag tycker om systemet. Får väl installera .bin filerna då...

Men är det ingen som kan berätta hur jag ska lösa problemet som jag frågar om då?

EDIT:

OleDbDataReader objRdr;
...

while(objRdr.Read()) {objRdr["cell"];}

249 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)