webForumDet fria alternativet

Förslag på hur jag skall göra?

.NET

8 svar · 379 visningar · startad av MizzK

Medlem sedan juni 2003410 inlägg
Frågan#1

Ä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 ;)

Medlem sedan jan. 20012 204 inlägg
#2

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

Medlem sedan juni 2003410 inlägg
#3

i en datagrid eller liknande? ska testa det...

fler förslag?!?

Medlem sedan sep. 20011 914 inlägg
#4

Lek lite med denna kod.

.aspx

   <form runat="server">
        <asp:repeater id="repProduct" runat="server">
            <headertemplate>
                <table>
                <tr bgcolor="orange">
                    <td>&nbsp;</td>
                    <td>Name</td>
                    <td>Price</td>
                    <td>Quantity</td>
                    <td>&nbsp;</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>&nbsp;</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;}
        }
    }
Medlem sedan juni 2003410 inlägg
#5

du råkar inte ha den i vb kod =)

Medlem sedan juni 2003410 inlägg
#6

fler förslag e välkommna! =D

Medlem sedan jan. 20012 204 inlägg
Medlem sedan juni 2003410 inlägg
#8

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?!??

Medlem sedan juni 2003410 inlägg
#9

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
259 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)