Avatar billede simsen Mester
02. marts 2007 - 08:33 Der er 5 kommentarer og
1 løsning

Confirmation på slet i datagridview

Hejsa,

Jeg har et datagridview med en ButtonField som sletter rækker i en tabel. Dette fungerer perfekt. Mit problem ligger i, jeg vil så gerne, når de trykker på knappen, at den kommer frem et lille confirmation skærmbillede.

Min ButtonField:

<asp:ButtonField ButtonType="Image" CommandName="DeleteProduct" ImageUrl="~/Images/Delete.gif"
                                                    Text="Slet" >
                                                    <HeaderStyle Width="80px" />
                                                    <ItemStyle HorizontalAlign="Center" />
                                                </asp:ButtonField>

Koden til denne ser sådan her ud:

        if (e.CommandName == "DeleteProduct")
        {
            try
            {
                if (api.DeleteProduct(VareNr) == FaktureringApi.FStatus.Success)
                {
                    lblDeleteProductSuccess.Text = "Produktet " + VareNr +  " er blevet slettet";
                    lblDeleteProductSuccess.Visible = true;
                    ShowProductList();
                }
                else
                {
                    lblDeleteProductError.Text = "Produktet " + VareNr + " er ikke blevet slettet";
                    lblDeleteProductError.Visible = true;
                }
            }
            catch
            { }
        }

Normalt ville jeg til en knap bruge nedenviste funktion - men jeg aner jo ikke hvad knappen kaldes (altså eksempelvis id), så hvordan får jeg en confirmation box frem i et datagridview på en knap?

btnDelete.Attributes.Add("onclick", "return confirm('Er du sikker på, du vil slette?')");

mvh
simsen :-)
Avatar billede flashit Nybegynder
02. marts 2007 - 10:46 #1
Avatar billede snepnet Nybegynder
02. marts 2007 - 10:46 #2
Det er nok det nemmeste hvis du bare laver en template kolonne hvor du sætter knappen ind.

<asp:TemplateField>
    <ItemTemplate>
        <asp:Button ID="btn" runat="server" OnClientClick="return confirm('er du sikker?');" CommandName="DeleteProduct"></asp:Button>
    </ItemTemplate>
</asp:TemplateField>

Mvh
Avatar billede simsen Mester
02. marts 2007 - 13:59 #3
Hejsa snepnet

Nu har jeg forsøgt mig med dit foreslag, men får nu fejl i koden (jeg har dog istedet brugt en ImageButton - det skulle vel ikke være noget problem);

Input string was not in a correct format.

Min kode:

<asp:TemplateField>
                                                    <ItemTemplate>
                                                        <asp:ImageButton ID="btn" runat="server" ImageUrl="~/Images/Delete.gif" OnClientClick="return confirm('er du sikker?');" CommandName="DeleteProduct"></asp:ImageButton>
                                                    </ItemTemplate>
                                                    <HeaderStyle Width="80px" />
                                                    <ItemStyle HorizontalAlign="Center" />
                                                </asp:TemplateField>


Codebehind:
protected void grdProductList_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        clearMessages();

        FaktureringApi api = new FaktureringApi();
        int user_id = Convert.ToInt32(Session[FaktureringApi.SessionUserId]);
       
        int index = Convert.ToInt32(e.CommandArgument);
        string VareNr = Convert.ToString(((GridView)sender).DataKeys[index].Values[0].ToString());

        if (e.CommandName == "DeleteProduct")
        {
            try
            {
                if (api.DeleteProduct(VareNr) == FaktureringApi.FStatus.Success)
                {
                    lblDeleteProductSuccess.Text = "Produktet " + VareNr +  " er blevet slettet";
                    lblDeleteProductSuccess.Visible = true;
                    ShowProductList();
                }
                else
                {
                    lblDeleteProductError.Text = "Produktet " + VareNr + " er ikke blevet slettet";
                    lblDeleteProductError.Visible = true;
                }
            }
            catch
            { }
        }
  api.Dispose();
}

Den fejler ved:

        int index = Convert.ToInt32(e.CommandArgument);

Men jeg kan ikke se hvorfor? - den har ikke fejlet før ved denne - først da jeg ændrede den til en TemplateField

Kan du hjælpe mig med det?

mvh
simsen :-)
Avatar billede snepnet Nybegynder
02. marts 2007 - 14:31 #4
Jeps - du skal sørge for at sætte dit commandargument på knappen med et databindingsudtryk. Du kan passende sørge for at dit varenummer står i commandargument:

<asp:TemplateField>
    <ItemTemplate>
        <asp:Button ID="btn" runat="server" OnClientClick="return confirm('er du sikker?');" CommandName="DeleteProduct" CommandArgument='<%# Eval("VareNr") '></asp:Button>
    </ItemTemplate>
</asp:TemplateField>

Hvis det ikke hedder VareNr i din datakilde, må du lige rette til så det passer.

Men anyway ... Du kan så trække varenummeret direkt - istedet for at finde rækkeindex'et og hente det i keys via det.

Mvh
Avatar billede simsen Mester
02. marts 2007 - 18:17 #5
snepnet

Takker endnu engang for din hjælp. Smid et svar og du får dine velfortjente points....

mvh
simsen :-)
Avatar billede snepnet Nybegynder
02. marts 2007 - 22:48 #6
Kommer her :o)
Mvh
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester