Posts
247
Comments
67
Trackbacks
4
Edit-Funktion bei DataList

Das DataList-Objekt kann man nicht nur zum Visualisieren von Daten verwenden, sondern die angezeigten Daten lassen sich auch veändern.

Hier ein kleines, vereinfachtes Beispiel aus der Warenkorb-Funktion eines Shop-Systems. Die ausgewählten Artikel werden im Warenkorb angezeigt und die Anzahl soll verändert werden können.

Beschreibung des Skriptes:

Per DataReader wird der Inhalt des Warenkorbes ausgelesen und mittels eines DataList-Objektes angezeigt.

Die Editmaske wird im <EditItemTemplate> Bereich definiert. Hier wird die Anzahl in einem HTML Server-Control zum ändern angezeigt. Damit wir für den Datenbank-Update die entsprechende ID haben, wird diese in einem Hidden-Field mitgeführt.

Im ASP:DataList -Tag definieren wir die Events die wir benötigen:

<ASP:DataList id="DataList" OnEditCommand="DataList_Edit" OnUpdateCommand="DataList_Update" OnCancelCommand="DataList_Cancel" runat="server">

In den Linkbuttons werden per CommandNames die Events, die ausgelöst werden sollen, festgelegt.

In der Warenkorbansicht wird über den Link "bearbeiten" der Editmodus dieser Zeile aufgerufen und die Anzahl kann geändert werden. Mit dem Link "speichern"  wird über das Event "Update" die Updare-Prozedur aufgerufen welche die Werte ID und Anzahl einliest und die Datenbank updated.

 

<%

@ Import Namespace="System.Data" %>
<%
@ Import Namespace="System.Data.SqlClient" %>

<

html>
<
script language="VB" runat="server">

Sub liste_erstellen()
   Dim strConnect, strSQL As String
   strConnect = System.Configuration.ConfigurationManager.AppSettings.Get("myConnection")
   strSQL =
"select id, kurztext, anzahl, preis , anzahl*preis as summe from kaufhaus_warenkorb"
   Dim DBConnection As New OleDbConnection
   DBConnection.ConnectionString = strConnect
   Dim ObjDbCommand As New OleDbCommand(strSQL, DBConnection)
   Dim daten As OleDbDataReader
   DBConnection.Open()
   daten = ObjDbCommand.ExecuteReader()
   DataList.DataSource = Daten
   DataList.DataBind()
   DBConnection.Close()
End Sub

Sub Page_Load(Sender As Object, E As EventArgs)
   If Not (Page.IsPostBack)
      liste_erstellen()
   End If
End Sub

Sub DataList_Edit(Sender As Object, E As DataListCommandEventArgs)
   DataList.EditItemIndex =
CInt(e.Item.ItemIndex)
   liste_erstellen()
End Sub

Sub DataList_Update(Sender As Object, E As DataListCommandEventArgs)
   Dim EditText As HtmlInputText
   Dim EditId As HtmlInputHidden  

   EditText = E.Item.FindControl("edit_anzahl")
   EditId = E.Item.FindControl(
"edit_id")
   Dim strConnect, strSQL As String
   strConnect = System.Configuration.ConfigurationManager.AppSettings.Get("myConnection")
   strSQL = "update kaufhaus_warenkorb set anzahl = " & EditText.Value & " where id=" & EditId.Value
   Dim DBConnection As New OleDbConnection
   DBConnection.ConnectionString = strConnect
   Dim ObjDbCommand As New OleDbCommand(strSQL, DBConnection)
   DBConnection.Open()
   ObjDbCommand.ExecuteNonQuery()
   DBConnection.Close()

   Nachricht.Text = "Anzahl ge„ndert auf: " & EditText.Value
   DataList.EditItemIndex = -1

   liste_erstellen()
End Sub

Sub DataList_Cancel(Sender As Object, E As DataListCommandEventArgs)
   
Nachricht.Text = "keine Žnderung"
   
DataList.EditItemIndex = -1
   liste_erstellen()
End Sub

Function formatEur(ByVal wert As String)
   formatEur =
String.Format("{0:c}", Decimal.Parse(wert))
End Function

</

script>

<

body topmargin="0" leftmargin="0" marginwidth="0" marginheight="0">
<form id="Form1" runat="server">

<ASP:DataList id="DataList" OnEditCommand="DataList_Edit" OnUpdateCommand="DataList_Update" OnCancelCommand="DataList_Cancel" runat="server">

<HeaderTemplate>
<table border="0">
<tr><td> </td><td>Anzahl</td><td>Artikel</td><td align="right">Preis/Stk.</td><td align="right">Summe</td></tr>
</HeaderTemplate>

<ItemTemplate>
<tr>
<td width="130px" height="30">
<asp:linkbutton ID="Linkbutton4" CommandName="Edit" runat="server">bearbeiten</asp:linkbutton>
</td>
<td align="right"><%#Eval("anzahl")%></td>
<td><%#Eval("kurztext")%>&nbsp;</td>
<td align="right"><%#formatEur(Eval("preis"))%></td>
<td align="right"><%#formatEur(Eval("summe"))%></td>
</tr>
</ItemTemplate>

<EditItemTemplate>
<tr>
<td width="130px" height="30">
<asp:linkbutton ID="Linkbutton1" CommandName="Update" runat="server">speichern</asp:linkbutton>
<asp:linkbutton ID="Linkbutton5" CommandName="Cancel" runat="server">abbrechen</asp:linkbutton>
</td>
<td>
<input id="edit_anzahl" style="width:40" type="text" value='<%#eval("anzahl")%>' runat="server"/>
<input id="edit_id" type="hidden" value='<%#eval("id")%>' runat="server"/>
</td>
<td><%#Eval("kurztext")%>&nbsp;</td>
<td align="right"><%#formatEur(Eval("preis"))%></td>
<td align="right"><%#formatEur(Eval("summe"))%></td>
<td></td>
</tr>
</EditItemTemplate>

<FooterTemplate>
</table>
</FooterTemplate>

</ASP:DataList>

</form>

<asp:Label ID="Nachricht" runat="server" Text="Label"></asp:Label>

</
body>
</
html>
posted on Monday, February 13, 2006 2:22 PM Print
Comments
No comments posted yet.

Post Comment

Title *
Name *
Email
Url
Comment *  
Please add 7 and 6 and type the answer here: