Andreas: Dynamisch erzeugtes Formular nach Submit auswerten

Hallo allerseits, ich habe eine Seite erstellt, mit der man in einem XML file ein paar werte editieren soll. Nun bin ich soweit gekommen, das mir die Werte in einer tabelle dargestellt werden (die tabelle befindet sich auf einem placeholder). in der linken spalte steht der name des attributs und in der rechten spalte der wert, entweder in einem dropdown oder in einer textbox. da es unterschiedlich viele attribute sein können, die auch unterschiedlich heissen, weiß ich nicht wie ich nach einem klick auf "save" die werte verarbeiten kann.

ich zeige euch einmal die funktion die das formular erstellt, ich hoffe ihr könnt mir helfen.

Sub make_formular(sender As Object, e As EventArgs)     'erstellt das Formular zum ändern von Einträgen
         Dim attribute As XmlAttribute              'Ein einzelnes Attribut
         Dim attributes As XmlAttributeCollection   'Eine Attributsliste
         Dim xNode As XmlNode                       'Ein Knoten
         Dim str_currpos As String                  'Die aktuelle Position in der XML Datei (XPath ausdruck)
         Dim i As Integer

Dim table As New Table()       'Neue Tabelle
         Dim lastrow As New TableRow()  'Neue Reihe

i=0
         str_currpos = lbl_currdomain.Text + lb_common.SelectedItem.ToString()
         lbl_currpos.Text = str_currpos

xNode = Dc.SelectSingleNode(str_currpos + "[@*]")  'Wählt die ausgeählte Kategorie an
         attributes = xNode.Attributes  'Alle Attribute der ausgewählten Kategorie auswählen

formular.Controls.Add(table)   'Tabelle auf PlaceHolder erstellen

For Each attribute in attributes       'Für jedes Attribut der Kategorie
             Dim name As New Label()            'Ein neues Label

if(attribute.Value.ToString()="True" OR attribute.Value.ToString()="False")THEN
                Dim value As New DropDownList()     'Wenn es ein Feld des Typs Boolean ist

Dim row As New TableRow()
                Dim cell As New TableCell()
                Dim cell2 As New TableCell()

name.id = "lbl_" + attribute.Name.ToString()    'Namen des Labels
                value.id = "ddl_" + attribute.Name.ToString()   'Namen der DDL

row.id = "row_" + i.ToString()
                cell.id = "cell_" + i.ToString()
                cell2.id = "cell2_" + i.ToString()

name.text = attribute.Name.ToString()
                value.Items.Add("True")                 'DDL füllen
                value.Items.Add("False")
                if(attribute.Value.ToString()="True")THEN
                    value.SelectedIndex = 0     'Wenn der Wert true ist wird true selektiert
                Else
                    value.SelectedIndex = 1     'wenn nicht false
                End If

table.Rows.Add(row)             'Tabellenreihe erstellen
                row.Cells.Add(cell)             'Zelle erstellen
                row.Cells.Add(cell2)
                cell.Controls.Add(name)         'Label in Spalte 1 einfügen
                cell2.Controls.Add(value)       'DDL in Spalte 2 einfügen
                formular.Controls.Add(name)
                formular.Controls.Add(value)
             else
                Dim value As New TextBox()          'Das selbe wie bei dem THEN zweig,
                                                    'nur anstatt DDL werden TextBoxen erstellt
                Dim row As New TableRow()
                Dim cell As New TableCell()
                Dim cell2 As New TableCell()

name.id = "lbl_" + attribute.Name.ToString()
                value.id = "txt_" + attribute.Name.ToString()

row.id = "row_" + i.ToString()
                cell.id = "cell_" + i.ToString()
                cell2.id = "cell2_" + i.ToString()

name.text = attribute.Name.ToString()
                value.text = attribute.Value.ToString()

table.Rows.Add(row)
                row.Cells.Add(cell)
                row.Cells.Add(cell2)
                cell.Controls.Add(name)
                cell2.Controls.Add(value)
                formular.Controls.Add(name)
                formular.Controls.Add(value)
             End If

i=i+1
         Next
         cancel.visible = "true"                'Der "Cancel" Knopf wird sichtbar gemacht
         save.visible = "true"                  'Der "Save" Knopf wird sichtbar gemacht
    End Sub

vielen dank,
gruß andreas

  1. Hallo,

    request.form ist eine Collection, durch die Du iterieren kannst, egal was drin ist. Du kannst "schauen", welche Elemente die konkret abgeschickte Form hat und je nachdem welche Elemente drin sind Aktionen anstellen. Da die Formularfeldnamen Deinen XLM-Attributen entsprechen dürften, sollte das kein Problem sein. Ein paar Codeschnippsel dazu gibt's z.B. auf http://docs.sun.com/source/817-2514-10/Ch9_ASPBuiltIn40.html

    Grüße,
    Utz

    --
    Mitglied im Ring Deutscher Mäkler
    1. Hallo utz, vielen Dank!!!! Du hast mir sehr geholfen, um nicht zu sagen du hast mir den hals gerettet :-)  !!!
      vielen vielen dank.

      grüße
      andreas