17. december 2006 - 15:57Der er
9 kommentarer og 1 løsning
Slette en bestemt række i en accessdatabase
Hej,
Nu har jeg forsøgt med alt muligt de sidste par timer, uden det er lykkes.... Jeg har en Repeater, hvor jeg lister navne fra en tabel. Udfor navnene lister jeg en linkbutton, som jeg så vil have, når jeg trykker på den, skal den slette det pågældende navn i databasen....
protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e) { if (e.Item.ItemType == ListItemType.Item) { if (e.CommandName.Equals("DeleteUser")) { // Response.Write(e.CommandArgument.ToString()); // Slet brugeren her. Du har hans ID gennem CommandArgument. } } }
Lige en ting omkring CommandArgument på din LinkButton, der er det nok ikke så smart at bruge brugerens fornavn, hvad nu hvis der er flere der har det samme fornavn, så sletter du jo alle dem som hedder Mads f.eks. Så er det bedre hvis du bruger deres unikke ID fra db'en.
Der fandtes ikke nogen ItemCommand, så jeg brugte istedet OnItemCommand. Det går også nogenlunde godt....... I min database har jeg 3 rækker med navne, Hans Hansen, Jens Jensen og Lars Larsen.
Når jeg trykker på slet udfor Hans Hansen og Lars Larsen, udskriver den fint fornavnene, men der sker intet, når jeg trkker på slet udfor Jens Jensen. Forsøger jeg at debugge med en "run to curser", kan jeg se, at den slet ikke går ind i første if statement. Altså det er åbenbart ikke en ListItemType.Item??????
Min kode ser ud som følgende nu: Source: asp:Repeater runat="server" id="repeaterVisAlle" OnItemCommand="Repeater1_ItemCommand"> <HeaderTemplate> <!-- bliver udskrevet en gang, før "listen" --> <table width="100%" border="0" style="width: 240px"> </HeaderTemplate> <itemTemplate> <tr> <td style="width: 100px; text-align: left; vertical-align: top;"> <i><%# DataBinder.Eval(Container.DataItem, "fornavn")%> <%# DataBinder.Eval(Container.DataItem, "efternavn")%></i> </td> <td style="width: 150px; text-align: left;; vertical-align: top;"> <asp:LinkButton ID="lbtnDeleteUser" CausesValidation="true" CommandName="DeleteUser" CommandArgument='<%# DataBinder.Eval(Container.DataItem, "fornavn")%>' runat="server" EnableViewState="true">Slet</asp:LinkButton> </td> </tr> </itemTemplate> <FooterTemplate> <!-- Bliver udskrevet til sidst--> </table> </FooterTemplate> </asp:Repeater>
Codebehind: protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e) { if (e.Item.ItemType == ListItemType.Item) { if (e.CommandName.Equals("DeleteUser")) { // Response.Write(e.CommandArgument.ToString()); // Slet brugeren her. Du har hans ID gennem CommandArgument. string name = e.CommandArgument.ToString();
Mht. CommandArgument er fornavn, så ved jeg godt, det ikke er smart. Nu er jeg bare igang med at omskrive min hjemmeside fra asp til asp.net, hvor jeg viser et eksempel på at slette fra en tabel. Så jeg ved, der altid kun er 3 navne i tabellen, og at der ikke er redundanter i de navne.
Nu har jeg forsøgt at lave en slet funktion til den:
//sletter i tabellen SletData public void SletBruger(string fornavn) { command.CommandText = "DELETE fornavn, efternavn FROM SletData WHERE fornavn = @fornavn";
protected void Repeater1_ItemCommand(object source, RepeaterCommandEventArgs e) { if (e.Item.ItemType == ListItemType.Item) { if (e.CommandName.Equals("DeleteUser")) { // Response.Write(e.CommandArgument.ToString()); // Slet brugeren her. Du har hans ID gennem CommandArgument. string name = e.CommandArgument.ToString();
eksempler.SletBruger(name); //Opretter ny instans af GetHentDataAlt fra Eksempler DataTable visalle = eksempler.VisSletData();
Jeg trykker så på Slet buttonlinket udfor det første navn, og den sletter pænt og genopfrisker også - så der kun står de sidste to navne......Forsøger jeg så at bruge en F5 altså Refresh siden, så sletter den den næste på listen?
Kan ikke lave en Response.Redirect, da den så ikke opdaterer indholdet i min Repeater... og laver jeg det uden Response.Redirect, fremkommer samme fejl
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.