DevTrain

Autor: Hannes Preishuber

Sind Sie sicher?Löschen im Datagrid!

Ein häufige Frage in den Newsgroups und DevTrain Foren ist, wie kann ich eine Alert oder Confirm Message hochpoppen zu lassen, wenn ich eine Zeile im Datagrid löschen will.

Das lässt sich lösen.

Website

Zunächst braucht man eine ASPX Seite. In einer Template Columns wird der Löschen Button abgebildet.

<html>
 <body>
    <asp:Label id="Label1" runat="Server" />
   
    <form runat=server>
       <asp:DataGrid id="myDataGrid"
           OnItemCreated="DataGrid_ItemCreated"
           DataKeyField="ID"
           AutoGenerateColumns="True"
           runat="server">
 <Columns>
 <asp:TemplateColumn HeaderText="Delete?">
   <ItemTemplate>
     <asp:button id="btnDelete"

OnClick="DataGrid_DeleteRow" runat="Server" Text="Löschen" />
   </ItemTemplate>
 </asp:TemplateColumn>
 </Columns>

       </asp:DataGrid>
       <p>
    </form>
 </body>
 </html>

Dann nutzen wir das Event ItemCreated. Dieses wird gefeuert für jedes Item (Control) das im Datagrid erzeugt wird. Dort hängen wir an den Button einfach ein JScript an.

Der Code

Als erstes erzeugen wir ein Dataset das die Daten hält.
Auf den Detailcode wird hier verzichtet. Dieser sollte in der

Funktion Datenirgendwoherholen stehen.

Sub Page_Load(Sender As Object, e As EventArgs)
   If Not IsPostBack Then
     dim ds as new Dataset=Datenirgendwoherholen()
            myDataGrid.DataSource = ds.tables(0).defaultview
            myDataGrid.DataBind()
  End If
End Sub


Nun wird an jeden Button das JavaScript angehängt, das im Browser dann ausgeführt wird. Dazu muss im Browser das OnClick Event des HTML Input Buttons belegt sein.

Zunächst müssen wir den Button finden in der aktuellen Zeile mit der Methode Findcontrol. Diese wird ausgeführt auf dem Objekt e, das aus der Funktion Itemcreated übergeben wird. FindControl wird der Name des Buttons übergeben. Um das Objekt Modell richtig zu bekommen muss die Rückgabe noch in den Typ Button gecastet werden.Dann steht die Methode Add in der Attribut Collection zu Verfügung. Dieser übergibt man im ersten Paramter den Attributnamen (onclick) und im zweiten Parmeter das JavaScript.

Das Case Statement ist schmückendes Beiwerk um auch bei Alternatng Items richtig zu reagieren.

Sub DataGrid_ItemCreated(Sender As Object, e As

DataGridItemEventArgs)
        Select Case e.Item.ItemType
     Case ListItemType.Item
  Dim myDeleteButton As Button
  myDeleteButton =

e.Item.FindControl("btnDelete")
   myDeleteButton.Attributes.Add("onclick",_
   "return confirm('Sind Sie

sicher?');")

     Case ListItemType.AlternatingItem
  Dim myDeleteButton As Button
  myDeleteButton =

e.Item.FindControl("btnDelete")
  myDeleteButton.Attributes.Add("onclick",_
   "return confirm('Sind Sie

Sicher?');")
        End Select
End Sub


Der Rest ist der freien Kunst überlassen. Man könnten eine Meldung ausgeben oder andere Aktionen ausführen je nachdem ob Confirm true oder false liefert.


Erfasst am: 22.05.2003 - Artikel-URL: http://www.devtrain.de/news.aspx?artnr=857
© Copyright 2003 ppedv AG - http://www.ppedv.de