dynamisches Formular

psychomama

Mitglied
Alsoooo..
Ich erstelle jetzt einfach mal einen neuen Thread, der Übersicht halber(hat mit dem vorherigen Thread zu tun).
Ich soll ein dynamisches Formular erstellen, mit PlaceHoldern.
Dh. in den PlaceHolder wird eine Table dynamisch reingeschrieben.
In den Feldern der Table soll der entsprechende Text aus der Datenbank reingeschrieben werden.
Sinn: wenn ein einfacher Benutzer das Formular ändern will, muss er sich nicht extra an einen Programmierer wenden, sondern kann es selbst in der DB.

Ich hinterlege wieder mal einen Screenshot der Verständlichkeit halber.

Ein Code-Beispiel wäre lieb:)

Danke schonmal im Vorraus
 

Anhänge

  • Kopie von Radiobuttonlist.jpg
    Kopie von Radiobuttonlist.jpg
    78 KB · Aufrufe: 35
Tja... den Code darfst du selber schreiben, aber hier ein Vorschlag:

1. Nimm ein DataGridView, zwei Spalten für die Texte und dahinter die Spalten für CheckBoxen. Musste dich nur selbst darum kümmern, dass die Checkboxen wie Radiobuttons arbeiten.

2. Könnte schöner Aussehen: Loope über die aus der DataTable selektierten Datensätze, und erzeuge ein paar Labels für die Texte und entsprechende RadioButtons/Checkboxen. Eventuell muss du Radios in einem Container zusammenfassen, damit diese nur "zeilenweise" auf die Klicks reagieren.
Hier daran denken die Events manuell zu registrieren.

Wie man ein Control zur Laufzeit erzeugt kannst du in der MSDN nachlesen, oder du schaust dir mal die InitializeComponent Methode an. Dort werden die Controls ja auch zur Laufzeit erzeugt und auf dem Form platziert.
 
Wollte kein GridView verwenden, sondern in einen PlaceHolder eine Table einfügen und dann in die Zellen die Labels.
In den Labels stehen dann die Texte der DB..

Doch wie füge ich die Datensätze in die Table bzw. die entsprechende Table in den PlaceHolder?
 
Habe mal was codiert, wie es ungefähr aussehen soll.
Es ist noch lang nicht fertig und noch fehlerhaft, aber seht selbst!

Code:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim con As New System.Data.OleDb.OleDbConnection(cDBPath)
        con.Open()

        Dim com As New System.Data.OleDb.OleDbCommand("SELECT * from azgbewertungen ", con)
        Dim dr As System.Data.OleDb.OleDbDataReader
        Dim tabelle As New Table

        dr = com.ExecuteReader()
        Do While dr.Read()
            Dim tabellenrow As New TableRow
            Dim tabellencell1 As New TableCell
            Dim tabellencell2 As New TableCell
            Dim tabellencell3 As New TableCell
            Dim label1 As New Label
            Dim label2 As New Label
            Dim rbl As New RadioButtonList



            label1.Text = (dr("Kriterium"))
            tabellencell1.Controls.Add(label1)
            label2.Text = (dr("Beschreibung"))
            tabellencell2.Controls.Add(label2)


            tabellenrow.Controls.Add(tabellencell1)
            tabellenrow.Controls.Add(tabellencell2)
            tabelle.Controls.Add(tabellenrow)
        Loop
        dr.Close()

    End Sub
 
Habe nun eine Lösung erstellt, die funktioniert:
Code:
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim con As New System.Data.OleDb.OleDbConnection(cDBPath)
        con.Open()

        Dim com As New System.Data.OleDb.OleDbCommand("SELECT * FROM azgbewertungen ORDER BY Bereich", con)
        Dim dr As System.Data.OleDb.OleDbDataReader
        
        Dim tabelle1 As New Table
        tabelle1.Width = 850
        Dim bereich As String
        bereich = ""

        dr = com.ExecuteReader()
        Do While dr.Read()

            Dim label1 As New Label
            Dim tabellenrow0 As New TableRow
            Dim tabellencell0 As New TableCell
            Dim tabellenrow123 As New TableRow
            Dim tabellencell1 As New TableCell
            Dim tabellencell2 As New TableCell
            Dim tabellencell3 As New TableCell
            Dim label2 As New Label
            Dim label3 As New Label
            Dim rbl1 As New RadioButtonList

            If bereich <> (dr("Bereich")) Then

                label1.CssClass = "head2"
                label1.Text = (dr("Bereich"))
                bereich = (dr("Bereich"))
                tabellencell0.Controls.Add(label1)
                tabellenrow0.Controls.Add(tabellencell0)
                tabelle1.Controls.Add(tabellenrow0)
            End If



            rbl1.ID = "rlb" & dr("ID")

            rbl1.RepeatDirection = RepeatDirection.Horizontal
            rbl1.CssClass = "rbl"
            rbl1.Items.Add(New ListItem("B1"))
            rbl1.Items.Add(New ListItem("B2"))
            rbl1.Items.Add(New ListItem("B3"))
            rbl1.Items.Add(New ListItem("B4"))
            rbl1.Items.Add(New ListItem("B5"))

            tabellencell1.Width = 283
            tabellencell2.Width = 283
            label2.CssClass = "head3"
            label3.CssClass = "cbl"

            label2.Text = (dr("Kriterium"))
            label3.Text = (dr("Beschreibung"))

            tabellencell1.Controls.Add(label2)
            tabellencell2.Controls.Add(label3)
            tabellencell3.Controls.Add(rbl1)

            tabellenrow123.Controls.Add(tabellencell1)
            tabellenrow123.Controls.Add(tabellencell2)
            tabellenrow123.Controls.Add(tabellencell3)
            tabelle1.Controls.Add(tabellenrow123)

        Loop
        dr.Close()

        Me.Beurteilung.Controls.Add(tabelle1)

        
        con.Close()

    End Sub
 

Neue Beiträge

Zurück