Dynamisch erzeugtes Formular nach Submit auswerten
Andreas
- asp.net
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
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
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