Har inte riktigt förstått det här med att skapa textbox mm från codebehind sidan. Du måste för det första ha en container, t.ex. en asp:placeholder, en asp:label eller liknande som du placerar på sidan. Se till att du har en variabel som innehåller den, säg t.ex. "phContent" eller något sådant. Page har också en container :-) Ja gör det du! Jag har själv snott den... :-) Hur binder man en WebControls till en DataColumn? Jag har samma problem men försöker lösa det med usercontrols och hämtar hur sidan skall genereras från en databas... Jag kan ju säga att det är mycket klydd med usercontrolls och dynamiskt tillagda saker i aspx. Om jag får löst trådarna [Postback (tar bort usercontrols) vid dynamiskt tillagda usercontrols ] och [UserControl Object reference not set to an instance of an object.] så blir det nog en alternativ lösning till ditt våra problem.... Jag slängde samman ett litet exemple som du nog kan ha nytta av... inte snyggt men du kan nog fixa en snygg lösning utifrån den. Tackar så mycket! Men förstår inte hur man gör för att stoppa in ex textboxen i en datakolumn? I vissa fall verkar .Net vara helt värdelöst enligt min åsikt. Missförstå mig rätt nu!!! Jag har ju beskrivit exakt vad jag vill göra!!! Löste det på följande vis:Skapa texbox, dropdownlist mm från codebehind sidan
Mitt problem är att jag läser in en XML fil som ska generera olika typer av textbox dropdownlist mm.
Om värder "Formtype" = Textbox ska jag rita ut en textbox
Om värder "Formtype" = Dropdownlist ska jag rita ut en Dropdownlist osv
Därefter kommer jag att posta formuläret...
Hur går man tillväga för att rita ut dessa? Jag måste även namnge dom efter typen Name i XML för att kunna bearbeta formulären efter postning.
Hoppas någon förstår hur jag menar!
Resultatet ska bli ungefär som följer:
Namn: <asp:TextBox>
Adress: <asp:TextBox>
Land: <asp:dropdownlist> Listar olika land
osv osv
OBS! Dessa fält är ej givna då man skapar vilka fält man vill i vilken ordning man vill.Sv: Skapa texbox, dropdownlist mm från codebehind sidan
Sedan kör du med följande kod:
<code>
TextBox c; //deklarera din kontroll
c = new TextBox(); //skapa din kontroll
c.Id = min_id_variabel
phContent.Controls.Add(c); //lägg in din kontroll i din container
</code>
Nu antog jag att du har lyckats reda ut hur du läser xml-filen.Sv: Skapa texbox, dropdownlist mm från codebehind sidan
Till dig som startade inlägget: RIKTIGT kul lösning. Den ska jag sno :-)Sv: Skapa texbox, dropdownlist mm från codebehind sidan
Ok! Nu förstår jag hur man kan gå till väga! Skapar nog en PlaceHolder och bygger upp en tabell i den där jag lägger till formulären enligt ovan...Sv: Skapa texbox, dropdownlist mm från codebehind sidan
Försöker med följande:
Dim oTable As New DataTable("FormFields")
Dim oRow As DataRow
'Skapar två kolumner
oTable.Columns.Add()
oTable.Columns.Add()
Loop....
oRow = oTable.NewRow()
oRow(0) = Caption
Dim MyTextBox As New TextBox
MyTextBox.ID = GetAttribValue(oFieldNode, "caption", "")
MyTextBox.Text = oFieldNode.InnerText
MyTextBox.CssClass = "Button"
oRow(1) = MyTextBox
oTable.Rows.Add(oRow)
Slut på loop
DataGrid1.DataSource = oTable
DataGrid1.DataBind()
I detta fall så returneras texten "System.Web.UI.WebControls.TextBox" i oRow(1)Sv: Skapa texbox, dropdownlist mm från codebehind sidan
Sv: Skapa texbox, dropdownlist mm från codebehind sidan
Ta ett tomt form och släng in en knapp och lägg koden nedan i codebehind
<code>
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim j As Integer
Dim i As Integer
For i = 1 To 3
Dim aTest As Control
If i Mod 2 = 0 Then
aTest = New TextBox
Else
aTest = New DropDownList
End If
FindControl("form1").Controls.Add(aTest)
If Not Page.IsPostBack Then
If TypeOf aTest Is TextBox Then
CType(aTest, TextBox).Text = (CStr(i))
End If
If TypeOf aTest Is DropDownList Then
For j = 1 To 5
CType(aTest, DropDownList).Items.Add(CStr(i + j))
Next
End If
End If
Next
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim aCtrl As System.Web.UI.Control
Button1.Text = ""
For Each aCtrl In FindControl("form1").Controls
If TypeOf aCtrl Is TextBox Then
Button1.Text = Button1.Text & " : " & CType(aCtrl, TextBox).Text
End If
If TypeOf aCtrl Is DropDownList Then
Button1.Text = Button1.Text & " : " & CType(aCtrl, DropDownList).SelectedItem.Text
End If
Next
End Sub
</code>Sv: Skapa texbox, dropdownlist mm från codebehind sidan
Jag vill ju positionera ut fälten i en tabell enligt
Namn: <TextBox>
Adress: <TextBox>Sv: Skapa texbox, dropdownlist mm från codebehind sidan
Så fort man ska göra någonting dynamiskt så skiter det sig i .net. Det slutar alltid med att man får göra en blandning av gammal asp kod och inte som det är tänkt att man ska göra.
Jag kan inte hitta ett enda exempel där man kan lägga till en textbox i en cell i en datagrid dynamiskt. Allting verkar vara byggt på det sättet att man i förväg måste veta vilken webcontrol man ska använda och lägga in den i aspx sidan manuellt.
Jag vet att jag kan alldeles för lite om .net men det borde inte vara så svårt att lösa ett så enkelt problem som det ovan...Sv: Skapa texbox, dropdownlist mm från codebehind sidan
Ibland verkar folk tycka att bilar är rätt kassa. Jag vill att min bil skall bli snabbare, det fixar jag ju lätt. Jag monterar på 52" hjul, så blir den grymt snabb, för det gjorde jag med min traktor. (Den blev långsam med 13" hjul, så tvärtom borde funka)
Problemet är att det inte går på större hjul än 24" på min bil. Därför frågar jag på Pellesoft:
"Hur monterar jag 52" hjul på min bil" när den egentliga frågan är "Hur får jag min bil att bli snabbare"
Varningsklockan börjar ringa när du skriver att du måste göra en blandning av gammal och ny kod! Enligt mina begränsade erfarenheter behövs detta relativt sällan. Alltså borde det finnas ett smartare .NET sätt att utföra det du vill.
Fundera på vad du vill göra, beskriv beteendet, så får du säkert fler tips som visar hur du skall börja fundera på lösningen.
/mickeSv: Skapa texbox, dropdownlist mm från codebehind sidan
Och det är ju inte något avancerat problem, tvärtom ett väldigt enkelt problem som man i vanlig asp löser på väldigt kort tid.
Jag vet att jag har dåliga kunskaper och jag är övertygad om att det finns en bra lösning på detta i .net!
Förstår bara inte att det ska vara så svårt att hitta en lösning på det!
Och jag blir ju inte direkt klokare av att höra att det borde finnas ett bra sätt att lösa det på i .NetSv: Skapa texbox, dropdownlist mm från codebehind sidan
Har lagt ut en <asp:PlaceHolder id="PlHolder" runat="server"></asp:PlaceHolder> i aspx sidan
Dim MyLabel As Control
Dim MyTextBox As Control
MyLabel = New Label
CType(MyLabel, Label).Text = "<table>"
PlHolder.Controls.Add(MyLabel)
Loop...
MyLabel = New Label
CType(MyLabel, Label).Text = "<tr><td>" & Caption & "</td><td>"
PlHolder.Controls.Add(MyLabel)
Select Case FormType
Case "text"
MyTextBox = New TextBox
MyTextBox.ID = Namn
CType(MyTextBox, TextBox).CssClass = "Button"
CType(MyTextBox, TextBox).Text = InnerText
PlHolder.Controls.Add(MyTextBox)
End Select
MyLabel = New Label
CType(MyLabel, Label).Text = "</td></tr>"
PlHolder.Controls.Add(MyLabel)
Next....
MyLabel = New Label
CType(MyLabel, Label).Text = "</table>"
PlHolder.Controls.Add(MyLabel)
Kanske inte så snyggt kodmässigt men nu kan jag i alla fall placera ut mina textboxar , dropdownlister mm där jag vill ha dom.
Vill helst av allt ha dom i en datagrid så man slipper skriva ut <table><tr><td> elementen...
Kanske någon som vet hur det går till?