Hejsan alla "Pellesoftare" ! Hi, Tack för era svar, jag har nu en ungefärlig hum om hur jag ska gå tillväga. Dessvärre så förstår jag inte varför jag får fel i följande kod: Hej, Tack för tipset, tog mig en titt på alla de filerna som följde med och alla de felmeddelanden som jag fick så om jag ska vara ärlig så känns det inte som någon vidare bra idé att använda kod som jag inte förstår något av.Skapa dynamiska kontroller
Undrar om detta är möjligt och isåfall hur i helsike jag ska gå tillväga för att göra det.
Har 2 tabeller i en databas. Ex:
Tabell1 Tabell2
-------- --------
ProduktID ProduktID
Namn FunktionID
Mer info AntalTextboxar
Mer info InterntNamn
ExterntNamn
När jag har tagit fram den nödvändiga informationen från tabell1 för tex produktID 1 så ska jag för varje post i tabell2 som innehåller 1 i ProduktID ska sidan dynamiskt skapa:
CheckBox (som gör det möjligt att öppna/stänga nedanstående panel)
Panel
TextBox
TextBox
(Antalet textboxar som ska skrivas ut kommer från fältet AntalTextboxar i databasen, det kan med andra ord vara 1 textbox som ska ut, men det kan lika väl vara 100, det ska inte spela någon roll)
Så om vi säger att det finns 2 poster i tabell2 som har produktID 1.
Fältet AntalTextboxar i den första posten har värdet 3 och
fältet AntalTextboxar i den andra posten har värdet 1 så ska sidan se ut som följer:
|X|
Panel
TextBox
TextBox
TextBox
/Panel
|X|
Panel
TextBox
/Panel
Hoppas att någon kan hjälpa mig med detta för jag kommer just nu ingenstans.
/MikaelSv: Skapa dynamiska kontroller
this is actually very simple to do and there are many ways to do it, depending on which way do you wish to present your data. If you haven't found the solution to your problem yet, maybe this will help:
You can add controls programmatically to a Control collection of a page, or panel, just like you would do to any other collection. In this case I have added manually one Panel control to the page which is called 'pnlControls' and to which we will be adding all other controls to.
I'm not sure how do you access and present your data, so I will just assume that both tables are in some DataSet called 'ds' and that you have created a relation between them, similar to this:
ds.Relations.Add( new DataRelation( "produktRelation", new DataColumn [] { ds.Tables[ "Tabell1" ].Columns["ProduktID"] }, new DataColumn[] { ds.Tables[ "Tabell2" ].Columns["ProduktID"] }, true ) );
Now, for each row in Tabell1 we can access his child rows in Tabell2 (rows with the same ProduktID in this case) and we can programmatically add controls to the page for both rows from Tabell1 and rows from Tabell2:
foreach( DataRow parentRow in ds.Tables ["Tabell1"].Rows )
{
DataRow [] childRows = parentRow.GetChildRows( "produktRelation" );
if( childRows.Length > 0 )
{
for( int i = 0; i < childRows.Length; i ++ )
{
// Adding checkbox for each row from Tabell2
CheckBox chk = new CheckBox ();
chk.Text = "Details";
pnlControls.Controls.Add ( chk );
// Adding panel to host all TextBox controls
Panel pnl = new Panel ();
pnlControls.Controls.Add( pnl );
// Getting number of required TextBox controls and displaying them
int antalTextboxar = (int) childRows [i] [ "AntalTextboxar" ];
for( int antal = 0; antal < antalTextboxar; antal ++ )
{
TextBox txt = new TextBox ();
pnl.Controls.Add( txt );
}
}
}
}
Hope it helps
/smajkySv:Skapa dynamiska kontroller
<code>
<script runat="server">
Sub Page_Load(Sender As Object, e As EventArgs)
Dim myCheckBox As Checkbox = New Checkbox ()
myCheckBox.AutoPostback = True
plhCheck.controls.Add(myCheckBox)
AddHandler myCheckBox.CheckedChanged, AddressOf myCheckBox_OnChange
Dim myPanel As Panel = New Panel()
plcTextFields.controls.Add(myPanel)
End Sub
Sub myCheckBox_OnChange(sender As Object, e As System.EventArgs)
myPanel.Visible = False
End Sub
</script>
<html>
<body>
<form runat="Server">
<asp:PlaceHolder id="plhCheck"
runat="server"/>
<asp:PlaceHolder id="plcTextFields"
runat="server"/>
</form>
</body>
</html>
</code>
Felet som jag får är i subrutinen myCheckBox_OnChange och tyder på att namnet myPanel inte är deklarerat. Hur löser man en sådan sak? Tacksam för en vettig förklaring.
/MikaelSv: Skapa dynamiska kontroller
Felet beror med all sannolikhet på att dina dynamiskt laddade kontroller (som du lagt till i dina placeholders) inte har lagts till i sidans ViewState och därmed inte återskapas när sidan postas tillbaka till servern.
Det finns flera sätt att lösa detta, ett bra och självklart sätt är att använda en panel-kontroll som lägger till dynamiska kontroller i sidans ViewState. Det finns flera sådana kontroller, här är länken till en :
http://www.denisbauer.com/ASPNETControls/DynamicControlsPlaceholder.aspx
mvh
HerbjörnSv:Skapa dynamiska kontroller
Får väl i värsta fall försöka att knåpa ihop en egen panel-kontroll med viewstate.
Wish me luck :-(
/Mikael