DevTrain

Autor: Hannes Preishuber

Datensatz mit FormView einfügen

Das neue Formview Control von ASP.NET 2.0 erlaubt es Datensätze ohne eine Zeile Code in eine Daten Tabelle einzufügen. Bei der Verwendung stellen sich aber zwei Probleme: beim Anzeigen des leeren Formulares und beim speichern.

Wenn ein leeres Formular dargestellt wird sollen eventuell einige Felder bereits vorbelegt werden. Das könnte zb ein Bestelldatum sein, das automatisch mit dem Tagesdatum gefüllt werden soll. Der Benutzer soll das Datum aber eben auch ändern können. Dafür kann das Event Databound verwendet werden. Je nach Modus (zb Insert) wird dann das entsprechende Control mit Findcontrol gesucht, in den Textbox Typ gecastet und mit einem Wert belegt.
Protected Sub FormView1_DataBound(ByVal sender As Object, ByVal e As System.EventArgs)
        If FormView1.CurrentMode = DetailsViewMode.Insert Then
           
            CType(FormView1.FindControl("BSTDatumTextBox"), TextBox).Text = Date.Now.ToShortDateString
End Sub

Der zweite Teil befasst sich dann mit dem eigentlichen Speichern des Datensatzes. Die Tabelle erfordert oft Werte die nicht vom Benutzer kommen sondern aus der Programmlogik. So wird bei einem Bestelldatensatz in der Position die Bestellnummer eingefügt. Der Benutzer darf darauf natürlich keinen Einfluss haben. Dies lässt sich im INserting Event behandeln. Wenn es sich um Formularfelder handelt kann über die Values darauf zugegriffen werden.

Protected Sub FormView1_ItemInserting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.FormViewInsertEventArgs)
        e.Values(5) = Bestellnummer
        ' Bug workaround von formview mit Nullwerten
        If e.Values(8) = "" Then
            e.Values(8) = "0"
        End If
End Sub

Um direkt die Parameter des SQL Kommandos vorzubelegen lässt sich auf die Parameters Collection benutzen

SqlDataSource2.InsertParameters(0).DefaultValue = Guid.NewGuid.ToString

Aber auch im ItemInserting Event lassen sich die SQL Parameter setzen. In den Eventargs e findet sich das Command Objekt. Dieses kann die Parameter, auch benannt, ansprechen.
Protected Sub DSAdressen_Inserting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceCommandEventArgs)
        e.Command.Parameters("@Datum").Value = Date.Now
        e.Command.Parameters("@bearbeiter").Value = User.Identity.Name
End Sub

Ergänzung: Das Formview Control hat in der Beta 2 einen bekannten Bug mit NULL Werten.


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