Posts Tagged “visual studio”

Ibland vill man kunna ta bort poster i en databas från en gridview. Här följer ett litet exempel på hur man kan göra för att få fram databasradens primärnyckelvärde för att veta vad man ska ta bort (ändra/uppdatera eller vad du vill göra). I “gridview” kontrollen på din aspx sida (ej codebehind) behöver du ange property för “DataKeyNames” (primärnyckeln i din datasource som du anger för gridviewen), välja vilka boundfields du vill visa samt säga åt gridden att rita upp “ta bort”-knappen för varje rad.

<asp:GridView ID=”gridCategories” runat=”server”  DataKeyNames=”categoryId”>
<Columns>
<asp:BoundField DataField=”categoryName” HeaderText=”Kategori” />
<asp:BoundField DataField=”categoryDescr” HeaderText=”Beskrivning” />
<asp:CommandField ShowDeleteButton=”True”  />
</Columns>
</asp:GridView>

Eventet för att tex ta bort heter gridView_RowDeleting()
Du måste hantera det på något sätt, tex i codebehind-filen

protected void gridCategories_RowDeleting(Object sender, GridViewDeleteEventArgs e)
{
//Ta bort raden
string categoryToDelete = gridCategories.DataKeys[e.RowIndex]["categoryId"].ToString();
korSqlCmd(”DELETE FROM kdb_categories WHERE categoryId = ‘” + categoryToDelete + “‘”);
}

//Rita om all data från databasen
showCategories();
}

Det intressanta i koden ovan är [e.RowIndex] som talar om vilken rad i gridden vi håller på med och ["categoryId"] som är en DataKeyName för gridviewen. (primärnyckeln i databasen är ju lämpligt att använda)

Måste också koppla eventet till funktionen i codebehind-filen på aspx sidan:

<asp:GridView ID=”gridCategories” runat=”server”  DataKeyNames=”categoryId”
OnRowDeleting=”gridCategories_RowDeleting” >
<Columns>
<asp:BoundField DataField=”categoryName” HeaderText=”Kategori” />
<asp:BoundField DataField=”categoryDescr” HeaderText=”Beskrivning” />
<asp:CommandField ShowEditButton=”True”  />
<asp:CommandField ShowDeleteButton=”True”  />
</Columns>
</asp:GridView>

Enkelt och nästan identiskt för att redigera och uppdatera. Se alla gridview events man kan använda här.

Comments 1 Kommentar »

Det heter ju egentligen inte POST längre, request ska vara ett mer korrekt namn.

På din sida Default.aspx finns en Label och en Button. Sätt knappens postbackurl till sidan som ska ta emot variabeln;

//Sätt rätt pburl
btnSend.PostBackUrl = “Default2.aspx”;

//Sätt label till något
Label1.Text = “test”;

På Default2.aspx finns det inget mer än en Label, vars värde vi tilldelar i Page_Load() genom att fånga variabeln från förra sidan.

//Fånga upp variabeln
lblTest.Text = Request["Label1"];

Klart!

Comments Inga kommentarer »

Är superenkelt men samtidigt en av dom viktigare sakerna att hålla koll på om man ska göra en hyffsat interaktiv webbplats. Det finns två (enkla) sätt att göra detta på, GET och POST. Jag kommer att beskriva den första, GET.

Det hela bygger på klienten skickar något till servern och du tar hand om det och du gör något med det. Ett exempel; en webbutik. Du ser en meny med kategorier, klickar dig vidare och ser en lång lista av produkter. Det vore ju ganska dumt att göra en ny sida för varje produkt, därför skickar man med en variabel som bestämmer vad för något som ska visas.

http://www.enbrawebbutik.com/prod.aspx?id=89964

Här har du som användare klickat på något i en produktlista, prod.aspx är samma för alla produkter, men eftersom du också skickar med id=89964 så kan du bestämma vad för information du vill läsa upp ur databasen och fylla din sida med.

Men hur fångar jag den variabeln på min sida, prod.aspx, då?

Nästan enklare, något i den här stilen: string prodId = Request.QueryString["id"];
Request.QueryString’en hämtar fram det du väljer att skicka med när du ropar på sidan (prod.aspx?id=89964)
Oftast vill man lägga den här deklarationen i Page_Load() eller i en funktion som körs när sidan laddas, så inte användaren ska behöva klicka ytterligare för att fånga upp variabeln. Eftersom du frågar efter Request.Querystring så måste din variabel vara av typen string, om du inte konverterar först.

Vill du ha flera variabler till samma sida, kanske kategori också, går det lika bra;
prod.aspx?id=89964&category=2353

Du hämtar variablerna på precis samma sätt;
string prodId = Request.QueryString["id"];
string categoryId = Request.QueryString["category"];

Sen har du ju dina id’n, bara att göra något i stil med;
hamtaProdInfoSQL(”SELECT * FROM prod WHERE prodId = prodId AND category = categoryId”);

Värt att tänka på

Är att aldrig (läs ALDRIG) låta en GET vara en sql fråga, eller något annat som har för mycket inflytande på hur din kod fungerar. Tex; prod.aspx?id=select * from prod where prodId = 45342

Låt alltid variabeln vara skild från de funktionerna som ska använda den, och kontrollera din indata på något bra sätt så att användaren inte kan, av misstag eller avsiktligt, avslöja känsliga uppgifter eller radera poster i databasen.

Och varför inte då? Jo för då kan en användare lika gärna ändra i adressraden och göra något fult som tex prod.aspx?id=’ or select password from admin eller varför inte göra “drop” på hela din databas. Inte bra.

Exemplen ovan är anpassade för C# men fungerar lika bra i VB, fast du kanske behöver göra små modifikationer.

Comments Inga kommentarer »