Avatar billede rosteface Nybegynder
09. december 2010 - 13:07 Der er 10 kommentarer

asp.net C# | Webshop / Kurv system.

Hej alle.

Jeg sidder her midt i et skole projekt og er faldt lidt i et hul.

Under udviklingen af en fuld funktionsdygtig webshop er jeg stødt ind i problemer med selve kurven til systemet.

Jeg har via en literal trukket en textarea ud via min backend (kode kommer senere) - her får text areat en ID - som er samme ID some det produkt det blevet tilføjet.
Målet er at jeg kan skrive et antal i denne text boks (fx. 100 af denne vare) og opdatere, hvilket så vil vise ny pris for de 100 af denne vare og så vidrer.

Dog er problemet at "opsnappe" denne ID og derved når der opdateres, tilføje det nye indhold.

Fx.

Jeg tilføjer en Kop, denne har ID 1.

Tekstboksen som bliver generet får ID 1 ..

Men tekstboksen har nu ID 1 - her forsøger jeg at opsnappe dens ID via min "update" knap.

Dette forsøger jeg ved at tilføje indholdet i boksen ind i min session, og beder den tilføje indholdet fra min session ind i boksen når siden genloades (via min update).


Update knap:

    protected void btnUpdate_Click(object sender, EventArgs e)
    {
        VareFac Antal = new VareFac();

        foreach (DataRow Row in dtKurv.Rows)
        {

            Row["VareAntal"] = Int32.Parse(Row["VareAntal"].ToString()) + Antal2;

            Session["kurv"] = dtKurv;

            Response.Redirect("kurv.aspx");
      }
}


Text Area:

var Antal = "<input type='text' runat=\"server\" id=\"" + row["VareID"] + "\"  Value='" + row["VareAntal"] + "' Name=\"VareAntal\"></input>";

                    int intID = Int32.Parse(row["VareID"].ToString());


...


Jeg har stirret mig blind på dette i snart 3 dage - og har prøvet et utal af ting..

Spørg endelig hvis der er nogen tvivl om noget eller at jeg undlader noget, jeg har fattet mig meget kort her, og ikke særlig godt..

Tak på forhånd !
Avatar billede Syska Mester
09. december 2010 - 13:21 #1
Hvis du kan bruge 3 dage på selv at rode med det, så skylder du også os at lave en god forklaring :-).

Jeg har helt ærligt ikke lige helt forstået hvad dit problem er.

Udover det ser ud på siden som om du gør det hele mere besværligt end det er.

manuel html ville jeg undgå, bruger asp.net controls til det i stedet, så kan du referer dem fra din code behind.

mvh
Avatar billede platik Nybegynder
09. december 2010 - 13:28 #2
Hvor henter du data fra din Session?

Hvad er Antal2 som du forsøger at ligge til VareAntal?

Og så forstår jeg heller ikke lige ideen bag din foreach. Efter første row smider du personen videre til en ny side. Hvad med resten af de rows der er i din dtKurv?

Burde du ikke flytte din Session update og den redirect ud af det loop?
Avatar billede rosteface Nybegynder
09. december 2010 - 13:34 #3
Jeg har prøvet lidt frem og tilbage med nogen forskellige ting

Jeg kan ikke finde den input textbox jeg laver tidligere oppe i page_load

Jeg skal finde den textbox også mener jeg at jeg selv kan finde ud af resten
Avatar billede platik Nybegynder
09. december 2010 - 13:43 #4
Du kan ikke bare bruge FindControl("ditID"); til det?
Avatar billede Syska Mester
09. december 2010 - 13:48 #5
Kode siger mere end 1000 ord.

mvh
Avatar billede Syska Mester
09. december 2010 - 13:49 #6
Hvor er din Page_Load metode ?
Avatar billede rosteface Nybegynder
09. december 2010 - 13:51 #7
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;

public partial class kurv : System.Web.UI.Page
{
    private DataTable dtKurv = new DataTable();

    protected void Page_Load(object sender, EventArgs e)
    {

        string strColor = "black";

        if (!IsPostBack)
        {

            dtKurv = (DataTable)Session["kurv"];

            if (dtKurv == null)
            {
                dtKurv = new DataTable();
                dtKurv.TableName = "tblKurv";

                dtKurv.Columns.Add("ID", typeof(int));
                dtKurv.Columns.Add("VareID", typeof(int));
                dtKurv.Columns.Add("VareAntal", typeof(int));


                dtKurv.Columns["ID"].AutoIncrement = true;

                Session["Kurv"] = dtKurv;
            }

            if (!string.IsNullOrEmpty(Request.QueryString["VareID"]))
            {
                int intVareID = Int32.Parse(Request.QueryString["VareID"]);

                var drVareRow = dtKurv.Select("VareID = " + intVareID);
               
                if (drVareRow.Length == 0)
                {
                    DataRow drVare = dtKurv.NewRow();
                    drVare["VareID"] = intVareID;
                    drVare["VareAntal"] = 1;
                    dtKurv.Rows.Add(drVare);
                }
                else
                {
                    drVareRow[0]["VareAntal"] = Int32.Parse(drVareRow[0]["VareAntal"].ToString()) + 1;


                }

                Session["Kurv"] = dtKurv;

            }

           

            if (dtKurv.Rows.Count > 0)
            {

                litIndhold.Text += "<table width=735><tr><td class=\"vareTD\" style=\"text-align:left;\"><b>Varenavn:</b></td><td></td><td width=10></td>";
                litIndhold.Text += "<td class=\"VareTd\" width=10><b>Antal:</b></td><td width=10></td><td class=\"vareTd\" style=\"text-align:center;\">";
                litIndhold.Text += "<b>Enkel pris</b></td><td class=\"vareTd\"><b>Pris i Alt:</b></td></tr>";

 
                int intTotal = 0;

               
               
                foreach (DataRow row in dtKurv.Rows)
                {

                    int intID = Int32.Parse(row["VareID"].ToString());

                    var Antal = "<input type='text' runat=\"server\" id=\"" + row["VareID"] + "\" Value='" + row["VareAntal"] + "' Name=\"VareAntal\"></input>";

                   

                    VareFac ObjVare = new VareFac();
                    DataRow dr = ObjVare.GetVare(intID).Rows[0];
                    int intPrisIalt = Int32.Parse(row["VareAntal"].ToString()) * Int32.Parse(dr["VarePris"].ToString());
                    intTotal += intPrisIalt;

                    litIndhold.Text += "<tr bgcolor=\"" + strColor + "\">";
                    litIndhold.Text += "<td class=\"vareTd\" style=\"text-align:left;\" width=\"80\">P/N : " + dr["VareNummer"] + "</td>";
                    litIndhold.Text += "<td class=\"vareTd\">" + dr["VareNavn"] + "</td>";
                    litIndhold.Text += "<td class=\"vareTd\" style=\"text-align:right;\"><b><a href=EditKurv.aspx?Action=plus&VareID=" + intID + ">+</b></a></td>";
                    litIndhold.Text += "<td class=\"vareTd\">";
                    litIndhold.Text += Antal.ToString();
                    litIndhold.Text += "</td>";
                    litIndhold.Text += "<td class=\"vareTd\" style=\"text-align:left;\"><b><a href=EditKurv.aspx?Action=minus&VareID=" + intID + ">-</b></a></td>";
                    litIndhold.Text += "<td class=\"vareTd\" style=\"text-align:center;\">" + dr["VarePris"] + "</td>";
                    litIndhold.Text += "<td class=\"vareTd\">" + intPrisIalt + "kr.</td></tr><br />";

                }

                Litfinal.Text += "<br /><tr><td colspan=\"6\"class=\"vareTd\"><b>Total:</b></td><td class=\"vareTd\"><b><u>" + intTotal + " kr.</u></b></td></tr></table><br /><a href=saveOrdre.aspx><div id=\"checkout\"><img src=../img/icon-checkout.jpg/ /></div></a>";
            }

            else
            {
                litIndhold.Text = "<span class=\"Overskrift\"> Kurven er tom!</span>";
            }
        }
    }

    protected void btnUpdate_Click(object sender, EventArgs e)
    {
        VareFac Antal = new VareFac();

        foreach (DataRow Row in dtKurv.Rows)
        {
            int intID = Int32.Parse(Row["VareID"].ToString());

            this.Page.FindControl("intID");

            Row["VareAntal"] = Int32.Parse(Row["VareAntal"].ToString()) + "Tallet i tekstboxen";

        }

        Response.Redirect("kurv.aspx");
    }
  }

Dette er hele koden
Avatar billede Syska Mester
09. december 2010 - 14:08 #8
Virker som en blanding af asp, asp.net og html.

Hvad prøver du her:
this.Page.FindControl("intID");

Overstående linje giver ingen mening.



Row["VareAntal"] har du tidligere sagt var en int. Nu prøver du at smide en string ind i den:
Row["VareAntal"] = Int32.Parse(Row["VareAntal"].ToString()) + "Tallet i tekstboxen";

mvh
Avatar billede rosteface Nybegynder
09. december 2010 - 14:21 #9
Jeg prøver og finde den textbox der bliver lavet i page _load.
Den textbox for et id som er gemt i en session fra tidligere
Jeg vil så bruge det id der i session til at finde det specifike textbox jeg laver
Og updater vareantalet i session.
Avatar billede Syska Mester
09. december 2010 - 14:46 #10
Hvis det er den her du leder efter:
var Antal = "<input type='text' runat=\"server\" id=\"" + row["VareID"] + "\" Value='" + row["VareAntal"] + "' Name=\"VareAntal\"></input>";

Så finder du den aldrig.

Så skal du gøre det ala:

TextBox text = new TextBox();
text.ID = "somename";
text.Text = "some content";
this.Controls.Add(textbox);

Senere kan du så lede efter den med:

this.Page.FindControl("somename") as TextBox;

Problemer er lidt at du blander html og asp.net ... og den kender ikke til de ting.

mvh
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester