Skapa en panel under och sedan lägger du till kontrollerna som du skapar programatiskt.
for i = 0 to count
dim tb as textbox
panles.controls.add(tb)
...
Något i den stilen
8 svar · 379 visningar · startad av MizzK
Är det ngn som har förslag hur jag skall lösa mitt "lilla" problem.
Har en mängd produkter som skall hämtas från databasen och sedan skrivas ut på sidan. (testade med datagrid, fungerade utmärkt hit). När datan är presenterad skall användaren sedan kunna välja antalet av produkten, när kunden valt antal och klickat på "ändra" skall det komma nya rader med information, lika många rader som kunden valt antal. (Testade med For Next, men fick ej att fungera tillsamans med dg). Det rader som skall komma upp skall alla ser likadana ut.. Kunden skall här kunna välja tillbehör till produkten/na.
hur löser jag detta? ngn som har förslag på smidig lösning.
Eller om ngn vet av ngt smidigare upplägg där man kan anpassa tillbehör just efter en specifik produkt.?
öppen för alla förslag!
ps. menar rent teoretiskt, kod får ni komma med om ni vill ;)
Skapa en panel under och sedan lägger du till kontrollerna som du skapar programatiskt.
for i = 0 to count
dim tb as textbox
panles.controls.add(tb)
...
Något i den stilen
Lek lite med denna kod.
.aspx
<form runat="server">
<asp:repeater id="repProduct" runat="server">
<headertemplate>
<table>
<tr bgcolor="orange">
<td> </td>
<td>Name</td>
<td>Price</td>
<td>Quantity</td>
<td> </td>
</tr>
</headertemplate>
<itemtemplate>
<tr>
<td><asp:label id="lbRowID" runat="server" />.</td>
<td><asp:label id="lbPName" runat="server" /></td>
<td><asp:label id="lbPrice" runat="server" /></td>
<td><asp:textbox id="tbQuantity" width="25" runat="server" /></td>
<td><asp:button id="btGenerate" text="Generate" runat="server" /></td>
</tr>
<asp:panel id="pnlRows" visible="False" runat="server">
<tr>
<td> </td>
<td>
<asp:repeater id="repData" runat="server">
<headertemplate>
<table>
</headertemplate>
<itemtemplate>
<tr>
<td><asp:textbox id="tbGrr" runat="server" /></td>
</tr>
</itemtemplate>
<footertemplate>
</table>
</footertemplate>
</asp:repeater>
</td>
</tr>
</asp:panel>
</itemtemplate>
<footertemplate>
</table>
</footertemplate>
</asp:repeater>
</form>
.aspx.cs
public class ExpandableRepeaterRow : System.Web.UI.Page
{
protected Repeater repProduct;
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
Bind();
}
}
private void Bind()
{
ArrayList arr = new ArrayList();
arr.Add(new Product("Small lamp", "39.23"));
arr.Add(new Product("Large lamp", "69.23"));
arr.Add(new Product("Medium lamp", "49.23"));
arr.Add(new Product("Tiny lamp", "19.23"));
arr.Add(new Product("Huge lamp", "99.23"));
repProduct.DataSource = arr;
repProduct.DataBind();
}
private void repProduct_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Product p = (Product)e.Item.DataItem;
((Label)e.Item.FindControl("lbRowID")).Text = (e.Item.ItemIndex + 1).ToString();
((Label)e.Item.FindControl("lbPName")).Text = p.Name;
((Label)e.Item.FindControl("lbPrice")).Text = p.Price;
}
}
private void repProduct_ItemCommand(object source, System.Web.UI.WebControls.RepeaterCommandEventArgs e)
{
((Panel)e.Item.FindControl("pnlRows")).Visible = true;
Repeater rep = (Repeater)e.Item.FindControl("repData");
string[] s = new string[int.Parse(((TextBox)e.Item.FindControl("tbQuantity")).Text)];
rep.DataSource = s;
rep.DataBind();
}
}
public class Product
{
private string _name, _price;
public Product(string name, string price)
{
this._name = name;
this._price = price;
}
public string Name
{
get{return _name;}
set{_name = value;}
}
public string Price
{
get{return _price;}
set{_price = value;}
}
}
du råkar inte ha den i vb kod =)
fler förslag e välkommna! =D
Översätt c# koden med http://authors.aspalliance.com/aldotnet/examples/translate.aspx
tanx.. lyckas med hjälp av förslag1 och 2 skriva ut en label, men lyckas inte med checkbox.. vet inte riktigt vad felet e.
hur skriver man inne i for next?!??
så här gjorde jag men får inte min checkboxlist att repeteras så många gånger som jag vill
If (E.CommandName = "andra") Then
Dim counter As Integer
Dim nr As Integer = Integer.Parse(CType(E.Item.FindControl("pddAnt"), DropDownList).SelectedItem.Value)
'Dim text As CheckBoxList = E.Item.FindControl("ingr")
'text.Text = ""
For counter = 1 To nr
Dim text As CheckBoxList = E.Item.FindControl("ingr")
CType(E.Item.FindControl("panelExingr"), Panel).Visible = True
'E.Item.FindControl("panelExingr")
Next counter
End If