Als nächstes gestalten wir unser Grid editierbar. Dabei gibt es eine Menge zu beachten.
Edit und nicht Edit Spalten
Editfelder mit besonderen Werten (zb Checkbox)
Buttons zum bearbeiten und speichern
Design im Edit Mode
Das einbauen der Edit Funktion wird über das Attribut oneditclick aktiviert. Dort wird die Funktion angegeben, die sich um das editieren kümmert.
<asp:DataGrid id=DataGrid1 runat="server" ForeColor="Black" oneditcommand="editClick"> |
Die Funktion muss zwei Paramter enthalten, der zweite muss vom Typ DataGridCommandEventArgs sein.
public sub editClick(Source as Object, E as DataGridCommandEventArgs) end sub |
Um Einfluss auf das Design zu haben, muss das komplette Grid neu gestaltet werden. Als erstes muss das Automatische erstellen der Spalten abgeschaltet werden. Dies passiert über autogeneratecolumns. Dann muss jede Spalte einzeln erstellt werden. Eine Spalte die nicht editierbar sein soll, muss auf Readonly gesetzt werden. Das erweist sich zb für eine ID Spalte als nützlich.
Um jedesmal beim Reload die Daten neu einzulesen, wurde die Funktion newBind geschaffen. Diese kapselt die den Datenzugriff. Es soll ja nach jedem Button Click auch wieder Daten zur Verfügung stehen.
Für jede Funktion wie Update, Edit oder Cancel muss eine eigene Behandlung programmiert werden. So muss zb beim Editieren die Spalte ausgewählt werden. Dies geschieht über den Index. Wenn Sie den Index auf -1 setzen verlassen Sie den Edit Mode wieder.
<%@ Page Language="vb" %> <%@ Import Namespace="System.Data"%> <%@ Import Namespace="System.Data.SQL"%> <html><head></head> <body> <script runat=server> public sub Page_Load(Source as Object, E as EventArgs) if not Page.IsPostBack then newBind() end if end sub public sub newBind() dim DS as new DataSet dim cmd as SQLDataSetCommand cmd= new SQLDataSetCommand("select * from authors","server=localhost;database=pubs;uid=sa;pwd=") cmd.FillDataSet(DS,"autoren") DataGrid1.DataSource=DS.Tables(0)DefaultView DataGrid1.Databind() end sub public sub editClick(Source as Object, E as DataGridCommandEventArgs) DataGrid1.EditItemIndex=E.Item.ItemIndex newBind() end sub public sub UpdateClick(Source as Object, E as DataGridCommandEventArgs) DataGrid1.EditItemIndex=E.Item.ItemIndex newBind() end sub public sub CancelClick(Source as Object, E as DataGridCommandEventArgs) DataGrid1.EditItemIndex=-1 newBind() end sub </script> <form id="grid1" method="post" runat="server"> <asp:DataGrid id=DataGrid1 runat="server" ForeColor="Black" oneditcommand="editClick" onupdatecommand="updateclick" oncancelcommand="CancelClick" autogeneratecolumns="False"> <property name="Columns"> <asp:EditCommandColumn buttontype="PushButton" canceltext="Abbruch" edittext="Edit" updatetext="Update" /> <asp:boundcolumn datafield="au_id" headertext="ID" readonly="True" /> <asp:boundcolumn datafield="au_fname" headertext="Name" readonly="false" /> <asp:boundcolumn datafield="au_lname" headertext="Name" readonly="false" /> </property> </asp:DataGrid> </form> </body></html>
|