Avatar billede mikkel251 Seniormester
15. juli 2016 - 18:08 Der er 60 kommentarer og
1 løsning

Et objekt af typen 'System.String' kan ikke konverteres til typen 'System.Data.DataTable'.

hvad betyder
Et objekt af typen 'System.String' kan ikke konverteres til typen 'System.Data.DataTable'.

og hvordan finder jeg en løsning på det.
fejlen ser sådan her ud
Serverfejl i programmet '/'.

Et objekt af typen 'System.String' kan ikke konverteres til typen 'System.Data.DataTable'.

Beskrivelse: Der opstod en undtagelse, der ikke blev behandlet, under udførelse af den aktuelle webanmodning. Se staksporingen for at få flere oplysninger om fejlen, og hvor den kom fra i koden.

Detaljer om undtagelse: System.InvalidCastException: Et objekt af typen 'System.String' kan ikke konverteres til typen 'System.Data.DataTable'.

Kildefejl:


Linje 31:        //det her er en fiktiv tabel ligesom i DataBasen - Den lever kun i hukkommelsen så længe Session["kurv"] findes
Linje 32:        //her opretter jeg de felter der kræves for at vise indholdet i indkøbskurven
Linje 33:        dtKurv = (DataTable)Session["kurv"];
Linje 34:
Linje 35:        //Hvis der ikke er noget i kurven, så skal datatabellen have noget indhold..     

Kildefil: c:\Users\Mikkel\Dropbox\Hovedforløbet webintegrator\webshoppen-boger\kurv.aspx.cs    Linje: 33

Staksporing:


[InvalidCastException: Et objekt af typen 'System.String' kan ikke konverteres til typen 'System.Data.DataTable'.]
  kurv.Page_Load(Object sender, EventArgs e) in c:\Users\Mikkel\Dropbox\Hovedforløbet webintegrator\webshoppen-boger\kurv.aspx.cs:33
  System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +51
  System.Web.UI.Control.OnLoad(EventArgs e) +95
  System.Web.UI.Control.LoadRecursive() +59
  System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2952

Versionsoplysninger: Microsoft .NET Framework version:4.0.30319; ASP.NET version:4.6.1073.0
Avatar billede arne_v Ekspert
15. juli 2016 - 18:21 #1
Session["kurv"]  indeholder tilsyneladende en String og ikke en DataTable.

Hvor bliver den sat henne?
Avatar billede mikkel251 Seniormester
16. juli 2016 - 13:17 #2
det er på flere sider med samme navn, men det ved jeg ikke om gør noget?
den side den fejler på, som den først fejler på når man har lagt varen i kurven og har trykke bestil, hvis man så vil tilbage til forsiden så sker fejlen..
jeg kommer til at tænke på man skal da have en mulighed for at vende tilbage til shoppen før man betaler hvis nu man vil købe mere, vil du ikke også sige det??

codebehind på kurv.aspx det er her den siger fejlen er på linie 33
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class kurv : System.Web.UI.Page
{
    menuFac objMenu = new menuFac();
    vareFac objVare = new vareFac();
    DataTable dt = new DataTable();

    //Der oprettes forbindelse til DataTable dtKurv
    private DataTable dtKurv = new DataTable();

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            //SIDENS STANDARD INDHOLD (overskrift + tekst)
            dt = objMenu.HentSideUdfraID(3);
            DataRow dr = dt.Rows[0];

            //her skriver jeg side overskriften ud
            litOverskrift.Text = dr["fldSideoverskrift"].ToString();
        }

        //KURV
        //det her er en fiktiv tabel ligesom i DataBasen - Den lever kun i hukkommelsen så længe Session["kurv"] findes
        //her opretter jeg de felter der kræves for at vise indholdet i indkøbskurven
        dtKurv = (DataTable)Session["kurv"];

        //Hvis der ikke er noget i kurven, så skal datatabellen have noget indhold..     
        if (dtKurv == null)
        {
            //Her erklæres den - her fortæller jeg dtkurv at den er en DataTable
            dtKurv = new DataTable();

            //Her fortæller jeg den DataTable jeg lige har oprettet at den slkal hedde tblKurv
            dtKurv.TableName = "tblKurv";

            //her laver jeg kollonnerne som ellers normalt ligger i databasen...
            dtKurv.Columns.Add("fldID", typeof(int));
            dtKurv.Columns.Add("fldVareID_dt", typeof(int));
            dtKurv.Columns.Add("fldAntal_dt", typeof(int));
            dtKurv.Columns.Add("fldPris_dt", typeof(float));

            //ID feltet skal selv styre tallene. Derfor sættes autoincrement til true..
            dtKurv.Columns["fldID"].AutoIncrement = true;

            //Her fortæller jeg at Session["kurv"] er den DataTable jeg lige har lavet - dtKurv
            Session["Kurv"] = dtKurv;
        }


        //Nu skal der lægges data i datatabellen.
        //den data henter jeg fra querystringen - vareID
        if (!string.IsNullOrEmpty(Request.QueryString["vareID"]))
        {
            //hvis querystring ikke er tom så skal den hente vare efter vare ID...
            DataRow dr = objVare.hentVareUdFraId(Convert.ToInt32(Request.QueryString["vareID"])).Rows[0];

            //Variablen intVareId oprettes og tildeles værdien fra querystringen - vareID
            int intVareID = Int32.Parse(Request.QueryString["vareID"]);

            //variabel _pris oprettes med værdien fra - dr["fldPris"] som hentes fra databasen i tblVare
            decimal _pris = Convert.ToDecimal(dr["fldPris"]);

            //variabel _Rabat oprettes med værdien fra - dr["fldPris"] som hentes fra databasen i tblVare
            decimal _rabat = Convert.ToInt32(dr["fldRabat"]);

            //så ganges _pris med _rabat og divideres med 100 for at få procenten af det produkt der er i kurven - hvis den har en rabat
            decimal _totalRabat = _pris * _rabat / 100;

            //den totale pris regnes ud ved at trække - _pris - _totalRabat - fra hinanden.
            decimal _total = _pris - _totalRabat;

            //Hvis ikke der er nogen rabat på produktet så skal _total være _pris
            if (Convert.ToInt32(dr["fldRabat"]) == 0)
            {
                _total = _pris;
            }

            //DataRow[] drVareRow = et array
            //DataRowen får værdien fra den vareID, der er med i querystringen og som ligges i den fiktive database - fldVareID_dt
            DataRow[] drVareRow = dtKurv.Select("fldVareID_dt=" + intVareID);

            //Hvis man ikke kan finde en fldVareID, som er lig med den medbragte, så skal der oprettes en ny række
            //hvor fldVareID er lig med det medbragte vareID og antal sættes lig 1. DataRowen tilføjes til datatabellen dtKurv
            //HER KØRER ARRYET
            if (drVareRow.Length == 0)
            {
                //her laver jeg en ny række hvis det er første gang man køber har man købt flere er det ikke denne her kode..
                //Det her er de fiktive database felter der er oprettet kun for at indeholde den vare der nu er i kurven - Session["kurv"]
                DataRow drVare = dtKurv.NewRow();
                drVare["fldVareID_dt"] = intVareID;
                drVare["fldAntal_dt"] = 1;
                drVare["fldPris_dt"] = _total;
                dtKurv.Rows.Add(drVare);
            }
            //Men findes der en vareID allerrede i datatabellen så skal der lægges 1 til den som allerrede findes
            else
            {
                drVareRow[0]["fldAntal_dt"] = Int32.Parse(drVareRow[0]["fldAntal_dt"].ToString()) + 1; //+1 betyder der lægges plus en til den række som der findes allerrede
            }
            //HER SLUTTER ARRYET

            //Hele datatabellen lægges over i Session["Kurv"]
            //det vil sige at alt vises fordi Session["kurv"] lever, når browser lukkes slettes indholdet i denne kurv
            Session["Kurv"] = dtKurv;

            //her opdateres siden efter køb...
            Response.Redirect("kurv.aspx");
        }
        //Hvis der er noget i kurven, så skal det vises. Her vises det i en tabel
        if (dtKurv.Rows.Count > 0)
        {
            //Der laves en variabel floatTotal af typen float.
            //Den tildeles værdien 0 som udgangspunkt.
            //float kan indeholde flere decimaler.. man kunne også godt bruge decimal
            float floatTotal = 0;

            //her udskrives indholdet af kurven ligesom jeg plejer at gøre når indholdet kommer fra databasen
            litIndhold.Text += "<th>Vare nr</th>";
            litIndhold.Text += "<th>Varenavn</th>";
            litIndhold.Text += "<th>Antal vare</th>";
            litIndhold.Text += "<th>Pris</th>";
            foreach (DataRow Row in dtKurv.Rows)
            {
                //parse tager værdien og aver den om til en interger kan samlignes med convert dog sætter de tallene ind på hver deres måde
                //string.format =  betyder at den formatere teskt med også tal her er det tallene der formateres i denne streng {0:#.00}...
                int intID = Int32.Parse(Row["fldVareID_dt"].ToString());

                //her laver jeg min datarow med indholdet fra Databasen tblVare
                DataRow dr = objVare.hentVareUdFraId(intID).Rows[0];

                //her regnes prisen ialt ud
                float intPrisIAlt = float.Parse(Row["fldAntal_dt"].ToString()) * float.Parse(Row["fldPris_dt"].ToString());
                floatTotal += intPrisIAlt;

                litIndhold.Text += "<tr>";
                litIndhold.Text += "<td>";
                litIndhold.Text += dr["fldId"].ToString();
                litIndhold.Text += "</td>";

                litIndhold.Text += "<td>";
                litIndhold.Text += dr["fldTitel"].ToString();
                litIndhold.Text += "</td>";

                litIndhold.Text += "<td>";
                litIndhold.Text += Row["fldAntal_dt"];
                litIndhold.Text += "</td>";

                litIndhold.Text += "<td>";
                litIndhold.Text += String.Format("{0:#.00}", Row["fldPris_dt"]) + " kr.";
                litIndhold.Text += "</td>";
            }
            litIndhold.Text += "<tr>";
            litIndhold.Text += "<td colspan='3'>";
            litIndhold.Text += "<b>Total:</b>";
            litIndhold.Text += "</td>";
            litIndhold.Text += "<td style='text-align:left;'>";
            litIndhold.Text += "<b><u>" + String.Format("{0:#.00}", floatTotal) + " kr.</u></b>";
            litIndhold.Text += "</td>";
            litIndhold.Text += "</tr>";

        }
        //Har man endnu ikke lagt vare i kurven, så skal man som kunde have det at vide.
        else
        {
            litIndhold.Text = "<br /><span class='Overskrift'>Kurven er tom</span>";
        }

    }

    protected void btnGaaTilKassen_Click(object sender, EventArgs e)
    {
        Response.Redirect("admin/Default.aspx");
    }

    protected void btnHandleVidere_Click(object sender, EventArgs e)
    {
        Response.Redirect("Default.aspx");
    }

    protected void btnSletkurv_Click(object sender, EventArgs e)
    {
        Session.Remove("kurv");
        Response.Redirect("kurv.aspx");


    }
}
Avatar billede mikkel251 Seniormester
17. juli 2016 - 12:38 #3
jeg har fundet ud af at hun tømmer kurven på Defaultsiden når man trykker bestil vare så sletter knappen kurven Session["kurv"] = ""; og man bliver sendt til siden test-tak.aspx og der har man så mulighed for at printe en kvitering ud, men når man så vil gå tilbage til siden med ens oplysninger så er kurven tom og derfor kommer fejlen - Et objekt af typen 'System.String' kan ikke konverteres til typen 'System.Data.DataTable' -  i den her - dtKurv = (DataTable)Session["kurv"]; for der er jo ingen vare i kurven mere, hvad gør jeg der for at undgå den fejl??


koden på i knappen send på admin/Default.aspx
  //i kurven ligger vores oplysninger om kundens køb.
        //De ligger i - Session["kurv"] -
        dtKurv = (DataTable)Session["kurv"];

        //Vi  opretter en generisk liste, som skal indeholde vores kundes produkter og det antal,
        //som kunden har bestilt.
        //list<vareFac> - er en generisk liste som skal bruges til at samle de vare der er bestilt og loope dem igennem en foreach løkke.
        //I vareFac der skal være de rigtige probertyes ellers virker det ikke...
        //proberty fra - vareFac - bruges i - list<vareFac> -
        List<vareFac> samletOrdre = new List<vareFac>();

        //listen løbes igennem.
        //Disse oplysninger indsættes sammen med kundens generelle oplysninger
        //i de relevante tabeller ved hjælp af metoden SaveOrder()
        objordre.Ordre = samletOrdre;
        objordre._brugernavn = txtNavn.Text;
        objordre._Adresse = txtAdresse.Text;
        objordre._Postnr = txtPostNr.Text;
        objordre._By = txtBy.Text;
        objordre._Tlf = txtTlf.Text;
        objordre._Email = txtEmail.Text;
        objordre.GemOrder(Convert.ToInt32(Session["id"].ToString()));
        //Man ken eventuel sende en mail til kunden om hans bestilling.

        //Kurven tømmes for indhold når data er laget i databasen
        Session["kurv"] = "";

        //man bliver sendt til siden tak når man har trykket på bestil
        Response.Redirect("test-tak.aspx");
Avatar billede arne_v Ekspert
17. juli 2016 - 14:36 #4
Hmmmm.

Session["kurv"] = "";

er en katastrofe. Det er en invitation til en type cast exception.

Session["kurv"] = null;

er lidt bedre.

Session.Remove("kurv");

er meget bedre.
Avatar billede arne_v Ekspert
17. juli 2016 - 14:38 #5
Saa kan du altid bruge konstruktionen:

X kurv = Session["kurv"];
if(kurv == null)
{
    kurv = new X();
    Session["kurv"] = kurv;
}

hvor X saa indtil videre er DataTable, men som vel paa et tidspunkt bliver List<OrderLine>.
Avatar billede mikkel251 Seniormester
17. juli 2016 - 15:11 #6
Mener du i stil med den her
//Her tjekker jeg om Session["kurv"] er tom og hvis den er det skal der oprettes en ny kurv som viser at den er tom, hvis man vender tilbage til siden
            kurv = (DataTable)Session["kurv"];
            if (kurv == null)
            {
                kurv = new List<odreFac>;
                Session["kurv"] = dtKurv;
            }

og så er Session["kurv"] = "" ændret til Session.Remove("kurv");
Avatar billede mikkel251 Seniormester
17. juli 2016 - 15:22 #7
jeg tror jeg fandt ud af den den skal ikke være en list>vareFac> men en DataTable()
nu ser den ud til at virke, med den her kode, var det ikke sådan du mente ??

            kurv = (DataTable)Session["kurv"];
            if (kurv == null)
            {
                kurv = new DataTable();
                Session["kurv"] = dtKurv;
            }
Avatar billede arne_v Ekspert
17. juli 2016 - 15:42 #8
Ja.

Med:

Session.Remove("kurv");

naar kurv skal vaek.
Avatar billede arne_v Ekspert
17. juli 2016 - 15:43 #9
Du skal lige have stuyr paa prefix.

kurv = (DataTable)Session["kurv"]; // uden dt
            if (kurv == null) // uden dt
            {
                kurv = new DataTable(); // uden dt
                Session["kurv"] = dtKurv; // med dt
            }

:-)
Avatar billede arne_v Ekspert
17. juli 2016 - 15:44 #10
Den dag du dropper DataTable, saa bliver det:

            kurv = (List<OrderLine>)Session["kurv"];
            if (kurv == null)
            {
                kurv = new List<OrderLine>();
                Session["kurv"] = kurv;
            }
Avatar billede mikkel251 Seniormester
17. juli 2016 - 15:51 #11
Done med præfix :D

er det ikke mere avanceret at bruge List<OrderLine>??

nu har jeg så fået en anden fejl, den opgave er jo fyldt med fejl :(
løses det skal den :D

Fejlen
Serverfejl i programmet '/'.

Kolonnen [fldVareID_dt] blev ikke fundet.

Beskrivelse: Der opstod en undtagelse, der ikke blev behandlet, under udførelse af den aktuelle webanmodning. Se staksporingen for at få flere oplysninger om fejlen, og hvor den kom fra i koden.

Detaljer om undtagelse: System.Data.EvaluateException: Kolonnen [fldVareID_dt] blev ikke fundet.

Kildefejl:


Linje 85:            //DataRow[] drVareRow = et array
Linje 86:            //DataRowen får værdien fra den vareID, der er med i querystringen og som ligges i den fiktive database - fldVareID_dt       
Linje 87:            DataRow[] drVareRow = dtKurv.Select("fldVareID_dt=" + intVareID);         
Linje 88:            //Hvis man ikke kan finde en fldVareID, som er lig med den medbragte, så skal der oprettes en ny række
Linje 89:            //hvor fldVareID er lig med det medbragte vareID og antal sættes lig 1. DataRowen tilføjes til datatabellen dtKurv

Kildefil: c:\Users\Mikkel\Dropbox\Hovedforløbet webintegrator\webshoppen-boger\kurv.aspx.cs    Linje: 87

Staksporing:


[EvaluateException: Kolonnen [fldVareID_dt] blev ikke fundet.]
  System.Data.NameNode.Bind(DataTable table, List`1 list) +2054897
  System.Data.BinaryNode.Bind(DataTable table, List`1 list) +34
  System.Data.DataExpression.Bind(DataTable table) +84
  System.Data.DataExpression..ctor(DataTable table, String expression, Type type) +162
  System.Data.DataTable.Select(String filterExpression) +107
  kurv.Page_Load(Object sender, EventArgs e) in c:\Users\Mikkel\Dropbox\Hovedforløbet webintegrator\webshoppen-boger\kurv.aspx.cs:87
  System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +51
  System.Web.UI.Control.OnLoad(EventArgs e) +95
  System.Web.UI.Control.LoadRecursive() +59
  System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2952

Versionsoplysninger: Microsoft .NET Framework version:4.0.30319; ASP.NET version:4.6.1073.0

når det felt den ikke kan findes er i codebehind og ikke i Databasen hvordan løser jeg den, for den er i koden så jeg forstår ikke at den ikke kan se feltet.

Min kode hvor felterne oprettes
DataRow[] drVareRow = dtKurv.Select("fldVareID_dt=" + intVareID);         
            //Hvis man ikke kan finde en fldVareID, som er lig med den medbragte, så skal der oprettes en ny række
            //hvor fldVareID er lig med det medbragte vareID og antal sættes lig 1. DataRowen tilføjes til datatabellen dtKurv
            //HER KØRER ARRYET
            if (drVareRow.Length == 0)
            {
             


                //her laver jeg en ny række hvis det er første gang man køber har man købt flere er det ikke denne her kode..
                //Det her er de fiktive database felter der er oprettet kun for at indeholde den vare der nu er i kurven - Session["kurv"]
                DataRow drVare = dtKurv.NewRow();
                drVare["fldVareID_dt"] = intVareID;
                drVare["fldAntal_dt"] = 1;
                drVare["fldPris_dt"] = _total;
                dtKurv.Rows.Add(drVare);
            }
            //Men findes der en vareID allerrede i datatabellen så skal der lægges 1 til den som allerrede findes
            else
            {
                drVareRow[0]["fldAntal_dt"] = Int32.Parse(drVareRow[0]["fldAntal_dt"].ToString()) + 1; //+1 betyder der lægges plus en til den række som der findes allerrede
            }
Avatar billede arne_v Ekspert
17. juli 2016 - 16:05 #12
Kolonnen [fldVareID_dt] blev ikke fundet.

maa betyde at din DataTable ikke har den kolonne.

Hvilket formentligt betyder at udover:

kurv = new DataTable();

skal du ogsaa definere alle kolonnerne.
Avatar billede arne_v Ekspert
17. juli 2016 - 16:21 #13
Og det er et problem du ikke ville have med List<OrderLine>.

:-)
Avatar billede mikkel251 Seniormester
17. juli 2016 - 16:26 #14
List<OdrerLine> var en generisk liste ?? og der skal man i sin factory fil have en
  private List<vareFac> _Ordre;   
    public List<vareFac> Ordre
    {
        get { return _Ordre; }
        set { _Ordre = value; }
    }

får at få den til at virke, det er ret nyt for mig med den måde at lave kode på :D

jeg fik det til at virke med den her og nu kan jeg hoppe rundt lige så tosset jeg vil på siden :D
tak for hjælpen med det :D

#region KurvenEfterKøbAfVare
        //Her tjekker jeg om Session["kurv"] er tom og hvis den er det skal der oprettes en ny kurv som viser at den er tom, hvis man vender tilbage til siden
        kurv = (DataTable)Session["kurv"];
        if (kurv == null)
        {
            kurv = new DataTable();
            Session["kurv"] = Kurv;

            kurv.TableName = "tblKurven";

            //her laver jeg kollonnerne som ellers normalt ligger i databasen...
            kurv.Columns.Add("fldID", typeof(int));
            kurv.Columns.Add("fldVareID_dt", typeof(int));
            kurv.Columns.Add("fldAntal_dt", typeof(int));
            kurv.Columns.Add("fldPris_dt", typeof(float));

            //ID feltet skal selv styre tallene. Derfor sættes autoincrement til true..
            kurv.Columns["fldID"].AutoIncrement = true;

            //Her fortæller jeg at Session["kurv"] er den DataTable jeg lige har lavet - kurv
            Session["Kurv"] = kurv;


            //Nu skal der lægges data i datatabellen.
            //den data henter jeg fra querystringen - vareID
            if (!string.IsNullOrEmpty(Request.QueryString["vareID"]))
            {
                //hvis querystring ikke er tom så skal den hente vare efter vare ID...
                DataRow dr = objVare.hentVareUdFraId(Convert.ToInt32(Request.QueryString["vareID"])).Rows[0];

                //Variablen intVareId oprettes og tildeles værdien fra querystringen - vareID
                int intVareID = Convert.ToInt32(Request.QueryString["vareID"]);

                //variabel _pris oprettes med værdien fra - dr["fldPris"] som hentes fra databasen i tblVare
                decimal _pris = Convert.ToDecimal(dr["fldPris"]);

                //variabel _Rabat oprettes med værdien fra - dr["fldPris"] som hentes fra databasen i tblVare
                decimal _rabat = Convert.ToInt32(dr["fldRabat"]);

                //så ganges _pris med _rabat og divideres med 100 for at få procenten af det produkt der er i kurven - hvis den har en rabat
                decimal _totalRabat = _pris * _rabat / 100;

                //den totale pris regnes ud ved at trække - _pris - _totalRabat - fra hinanden.
                decimal _total = _pris - _totalRabat;

                //Hvis ikke der er nogen rabat på produktet så skal _total være _pris
                if (Convert.ToInt32(dr["fldRabat"]) == 0)
                {
                    _total = _pris;
                }

                //DataRow[] drVareRow = et array
                //DataRowen får værdien fra den vareID, der er med i querystringen og som ligges i den fiktive database - fldVareID_dt       
                DataRow[] drVareRow = kurv.Select("fldVareID_dt=" + intVareID);
                //Hvis man ikke kan finde en fldVareID, som er lig med den medbragte, så skal der oprettes en ny række
                //hvor fldVareID er lig med det medbragte vareID og antal sættes lig 1. DataRowen tilføjes til datatabellen kurv
                //HER KØRER ARRYET
                if (drVareRow.Length == 0)
                {
                    //her laver jeg en ny række hvis det er første gang man køber har man købt flere er det ikke denne her kode..
                    //Det her er de fiktive database felter der er oprettet kun for at indeholde den vare der nu er i kurven - Session["kurv"]
                    DataRow drVare = kurv.NewRow();
                    drVare["fldVareID_dt"] = intVareID;
                    drVare["fldAntal_dt"] = 1;
                    drVare["fldPris_dt"] = _total;
                    kurv.Rows.Add(drVare);
                }
                Session["Kurv"] = kurv;

                //her opdateres siden efter køb...
                Response.Redirect("kurv.aspx");
            }
        }
        #endregion
Avatar billede arne_v Ekspert
17. juli 2016 - 16:33 #15
Jeg taenker:

public class OrderLIne
{
    public int Id { get; set; }
    public int Count { get; set; }
    // +flere felter
}

List<OrderLine> kurv = new List<OrderLine>();
Avatar billede mikkel251 Seniormester
17. juli 2016 - 16:40 #16
Den tror jeg godt jeg forstå, den må jeg lige prøve mig lidt frem med :D

at kode på den måde du lige har skrevet med
public class OrderLIne
{
    public int Id { get; set; }
    public int Count { get; set; }
    // +flere felter
}

List<OrderLine> kurv = new List<OrderLine>();

er det en mere avanceret måde at kode på ? :D
Avatar billede arne_v Ekspert
17. juli 2016 - 20:04 #18
Jeg vil mene at det er mere moderne end DataTable.
Avatar billede mikkel251 Seniormester
18. juli 2016 - 15:40 #19
Vi har ikke lært så meget endnu med de list<> men det er da helt sikkert noget jeg vil når jeg bliver færdig på skolen, det lyder til at når jeg får styr på dem vil det være nemmere end DataTable's :D

jeg har et nyt problem med min side når jeg trykker på Send i indkøbskurven bliver jeg sendt til en side der hedder lige nu test-tak.aspx og der skal jeg kunne se min egen data om mig selv samt mit køb, men jeg kan kun se mit eget navn, adress osv, den data om mit køb vil ikke vise sig??

Det er meningen at ordre skal gemmes i databasen med ordre id osv men der sker ingen ting??

min Codebehind knap funktionen
  protected void btnBestilOrdre_Click(object sender, EventArgs e)
    {
        //i kurven ligger vores oplysninger om kundens køb.
        //De ligger i - Session["kurv"] -
        dtKurv = (DataTable)Session["kurv"];

        //Vi  opretter en generisk liste, som skal indeholde vores kundes produkter og det antal,
        //som kunden har bestilt.
        //list<vareFac> - er en generisk liste som skal bruges til at samle de vare der er bestilt og loope dem igennem en foreach løkke.
        //I vareFac der skal være de rigtige probertyes ellers virker det ikke...
        //proberty fra - vareFac - bruges i - list<vareFac> -
        List<vareFac> samletOrdre = new List<vareFac>();

        //Listen løbes igennem.
        //For hver vare i kurven lægges varens ID over i
        //propertien _intVareID og antallet lægges i propertien _intVareAntal
        foreach (DataRow row in dtKurv.Rows)
        {
            //her henter jeg probertys fra VareFac         
            objVare._intVareID = Int32.Parse(row["fldVareID_dt"].ToString());
            objVare._intVareAntal = Int32.Parse(row["fldAntal_dt"].ToString());
            objVare._Pris = decimal.Parse(row["fldPris_dt"].ToString());
            samletOrdre.Add(objVare);
        }


        //listen løbes igennem.
        //Disse oplysninger indsættes sammen med kundens generelle oplysninger
        //i de relevante tabeller ved hjælp af metoden SaveOrder()
        objordre.Ordre = samletOrdre;
        objordre._brugernavn = txtNavn.Text;
        objordre._Adresse = txtAdresse.Text;
        objordre._Postnr = txtPostNr.Text;
        objordre._By = txtBy.Text;
        objordre._Tlf = txtTlf.Text;
        objordre._Email = txtEmail.Text;
        objordre.SaveOrder(Convert.ToInt32(Session["id"].ToString()));
        //Man ken eventuel sende en mail til kunden om hans bestilling.

        //Kurven tømmes for indhold når data er laget i databasen
        Session.Remove("kurv");

        //man bliver sendt til siden tak når man har trykket på bestil
        Response.Redirect("test-tak.aspx");
    }


Metoden SaveOrder:
    public void SaveOrder(int ID)
    {
        cmd = new SqlCommand(@"UPDATE tblBruger
                              SET fldBrugernavn=@brugernavn, fldAdresse=@Adresse, fldPostnr=@Postnr, fldBy=@By, fldTlf=@Tlf, fldEmail=@Email
                              WHERE fldId=@ID");
        cmd.Parameters.AddWithValue("@brugernavn", _brugernavn);
        cmd.Parameters.AddWithValue("@Adresse", _Adresse);
        cmd.Parameters.AddWithValue("@Postnr", _Postnr);
        cmd.Parameters.AddWithValue("@By", _By);
        cmd.Parameters.AddWithValue("@Email", _Email);
        cmd.Parameters.AddWithValue("@Tlf", _Tlf);
        cmd.Parameters.AddWithValue("@ID", ID);
        DA.ModifyData(cmd);

        //Henter id'et på den nye bruger/kunde
        cmd = new SqlCommand(@"SELECT fldId
                                FROM tblBruger
                                WHERE fldBrugernavn=@brugernavn
                                AND fldAdresse=@Adresse
                                AND fldPostnr=@PostNr
                                AND fldBy=@By
                                AND fldTlf=@Tlf
                                AND fldemail=@Email
                                AND fldId=@ID");
        //Parameters
        cmd.Parameters.AddWithValue("@brugernavn", _brugernavn);
        cmd.Parameters.AddWithValue("@Adresse", _Adresse);
        cmd.Parameters.AddWithValue("@PostNr", _Postnr);
        cmd.Parameters.AddWithValue("@By", _By);
        cmd.Parameters.AddWithValue("@Email", _Email);
        cmd.Parameters.AddWithValue("@Tlf", _Tlf);
        cmd.Parameters.AddWithValue("@ID", ID);



        //int32.parse er skiftet ud med convert.Into32()
        int intKundeID = Convert.ToInt32(DA.GetData(cmd).Rows[0]["fldId"].ToString());

        //Indsætter ordren i ORDRETABELLEN...
        cmd = new SqlCommand(@"INSERT INTO tblOrdrer(fldBrugerId_fk, fldDato, fldStatus) VALUES(@KundeID, @Dato, @Status)");

        cmd.Parameters.AddWithValue("@KundeID", intKundeID);
        cmd.Parameters.AddWithValue("@Dato", DateTime.Now);

        //her udskriver jeg til kunden at ordren pakkes...
        cmd.Parameters.AddWithValue("@Status", "Pakkes");
        DA.ModifyData(cmd);


        //Henter ID'et fra ordretabellen ud fra kunde ID'et....
        //MAX er også et reseverede ord...
        cmd = new SqlCommand(@"SELECT MAX(fldOrdreID) as MaxID FROM tblOrdrer WHERE fldBrugerId_fk=@KundeID");
        cmd.Parameters.AddWithValue("@KundeID", intKundeID);


        //Lægger ID'et i variablen intOrderID
        int intOrderID = Int32.Parse(DA.GetData(cmd).Rows[0]["MaxID"].ToString());

        //Her indsætter jeg ordre detaljerne i tabellen..
        foreach (vareFac Vare in Ordre)
        {
            cmd = new SqlCommand(@"INSERT INTO tblOrdreDetaljer(fldOrdreID, fldVareID, fldAntalKoebt, fldStatus, fldTilbudspris)
                                  VALUES(@OrderID, @VareID, @VareAntal, 'Pakkes', @pris)");//'pakkes' er udskrivning til kunden om at ordren pakkes

            cmd.Parameters.AddWithValue("@OrderID", intOrderID);
            cmd.Parameters.AddWithValue("@VareID", Vare._intVareID);
            cmd.Parameters.AddWithValue("@VareAntal", Vare._intVareAntal);
            cmd.Parameters.AddWithValue("@pris", Vare._Pris);
            DA.ModifyData(cmd);
        }
    }
Avatar billede mikkel251 Seniormester
18. juli 2016 - 15:48 #20
Jeg beklager den sender det fint ind i databasen, det er når jeg skal hente det at jeg ikke kan få det ud,
min fejl :D
Avatar billede mikkel251 Seniormester
18. juli 2016 - 16:17 #21
jeg har fået det til at virke, men jeg forstå ikke måden hun har lavet metoderne på, hvis der er en der kan hjælpe mig med at forstå hvad der foregår i de her 2 metoder :D

metode 1
    public DataTable getUdvOrdre()
    {
        cmd = new SqlCommand("SELECT MAX(fldOrdreID) AS MAXID FROM tblOrdrer");

        int intOrdreID = Int32.Parse(DA.GetData(cmd).Rows[0]["MAXID"].ToString());

        cmd = new SqlCommand(@"SELECT DISTINCT tblBruger.fldBrugernavn,
                                tblOrdreDetaljer.fldOrdreID,
                                tblOrdreDetaljer.fldVareID,
                                tblOrdreDetaljer.fldAntalKoebt,
                                tblOrdreDetaljer.fldTilbudspris,
                                tblVare.fldTitel,
                                tblVare.fldPris 
                                FROM tblBruger
                                LEFT JOIN tblOrdrer ON tblBruger.fldId = tblOrdrer.fldBrugerId_fk
                                LEFT JOIN tblOrdreDetaljer ON tblOrdrer.fldOrdreID = tblOrdreDetaljer.fldOrdreID
                                LEFT JOIN tblVare ON tblOrdreDetaljer.fldVareID = tblVare.fldId
                                WHERE tblOrdrer.fldOrdreID=@intOrdreID");
        cmd.Parameters.AddWithValue("@intOrdreID", intOrdreID);
        return DA.GetData(cmd);
    }

Metode 2
    public void SaveOrder(int ID)
    {
        cmd = new SqlCommand(@"UPDATE tblBruger
                              SET fldBrugernavn=@brugernavn, fldAdresse=@Adresse, fldPostnr=@Postnr, fldBy=@By, fldTlf=@Tlf, fldEmail=@Email
                              WHERE fldId=@ID");
        cmd.Parameters.AddWithValue("@brugernavn", _brugernavn);
        cmd.Parameters.AddWithValue("@Adresse", _Adresse);
        cmd.Parameters.AddWithValue("@Postnr", _Postnr);
        cmd.Parameters.AddWithValue("@By", _By);
        cmd.Parameters.AddWithValue("@Email", _Email);
        cmd.Parameters.AddWithValue("@Tlf", _Tlf);
        cmd.Parameters.AddWithValue("@ID", ID);
        DA.ModifyData(cmd);

        //Henter id'et på den nye bruger/kunde
        cmd = new SqlCommand(@"SELECT fldId
                                FROM tblBruger
                                WHERE fldBrugernavn=@brugernavn
                                AND fldAdresse=@Adresse
                                AND fldPostnr=@PostNr
                                AND fldBy=@By
                                AND fldTlf=@Tlf
                                AND fldemail=@Email
                                AND fldId=@ID");
        //Parameters
        cmd.Parameters.AddWithValue("@brugernavn", _brugernavn);
        cmd.Parameters.AddWithValue("@Adresse", _Adresse);
        cmd.Parameters.AddWithValue("@PostNr", _Postnr);
        cmd.Parameters.AddWithValue("@By", _By);
        cmd.Parameters.AddWithValue("@Email", _Email);
        cmd.Parameters.AddWithValue("@Tlf", _Tlf);
        cmd.Parameters.AddWithValue("@ID", ID);



        //int32.parse er skiftet ud med convert.Into32()
        int intKundeID = Convert.ToInt32(DA.GetData(cmd).Rows[0]["fldId"].ToString());

        //Indsætter ordren i ORDRETABELLEN...
        cmd = new SqlCommand(@"INSERT INTO tblOrdrer(fldBrugerId_fk, fldDato, fldStatus) VALUES(@KundeID, @Dato, @Status)");

        cmd.Parameters.AddWithValue("@KundeID", intKundeID);
        cmd.Parameters.AddWithValue("@Dato", DateTime.Now);

        //her udskriver jeg til kunden at ordren pakkes...
        cmd.Parameters.AddWithValue("@Status", "Pakkes");
        DA.ModifyData(cmd);


        //Henter ID'et fra ordretabellen ud fra kunde ID'et....
        //MAX er også et reseverede ord...
        cmd = new SqlCommand(@"SELECT MAX(fldOrdreID) as MaxID FROM tblOrdrer WHERE fldBrugerId_fk=@KundeID");
        cmd.Parameters.AddWithValue("@KundeID", intKundeID);


        //Lægger ID'et i variablen intOrderID
        int intOrderID = Int32.Parse(DA.GetData(cmd).Rows[0]["MaxID"].ToString());

        //Her indsætter jeg ordre detaljerne i tabellen..
        foreach (vareFac Vare in Ordre)
        {
            cmd = new SqlCommand(@"INSERT INTO tblOrdreDetaljer(fldOrdreID, fldVareID, fldAntalKoebt, fldStatus, fldTilbudspris)
                                  VALUES(@OrderID, @VareID, @VareAntal, 'Pakkes', @pris)");//'pakkes' er udskrivning til kunden om at ordren pakkes

            cmd.Parameters.AddWithValue("@OrderID", intOrderID);
            cmd.Parameters.AddWithValue("@VareID", Vare._intVareID);
            cmd.Parameters.AddWithValue("@VareAntal", Vare._intVareAntal);
            cmd.Parameters.AddWithValue("@pris", Vare._Pris);
            DA.ModifyData(cmd);
        }
    }
Avatar billede arne_v Ekspert
18. juli 2016 - 16:30 #22
Det er noget gyseligt skod kode.

Der er de saedvanelige int.Parse(noget.ToString() som kan erstattes as (int)noget.

Jeg tror at koden vil blive meget simplere af at udfoere Command direkte uden brug af DataAdapter.

Og saa er SELECT MAX ikke sikker i en fler-bruger kontekst. Der skal findes en anden loesning. Formentligt baseret paa SCOPE_IDENTITY().
Avatar billede mikkel251 Seniormester
18. juli 2016 - 16:39 #23
hjælp, det lyder ikke godt :D
det er som sagt min læres kode, hun er en ældre dame og vi er flere der har brokket os over hendes kodning for den er meget svær at forstå.

Du siger at der hvor der står int.parse skal jeg erstatte det med Convert.ToInt32 måske ??

Det med data adabter der har vi ikke lært at bruge andet lige nu, men det kunne da være et forsøg værd at prøve det andet.

SELECT MAX jeg aner ikke hvad den gør og hvorfor hun bruger den men jeg må google mig lidt frem ang SCOPE_IDENTITY() :D
Avatar billede arne_v Ekspert
18. juli 2016 - 16:49 #24
Convert.ToInt32 er endnu vaerre end int.Parse.

Jeg formoder at DA er en DataAdapter - er det ikke??
Avatar billede mikkel251 Seniormester
18. juli 2016 - 16:56 #25
Så vil jeg ikke bruge convert.ToInt32 eller parse :D
jo DA er en data adabter,
jeg tror vores lære har ville gøre det så simpel som muligt da vi stadig er på begynder niveau og jeg tror de mener at når vi kommer ud og arbejder med det så lære vi mere, ( det er bare en tanke ) :D
Avatar billede arne_v Ekspert
18. juli 2016 - 17:00 #26
int intOrdreID = (int)DA.GetData(cmd).Rows[0]["MAXID"];

maa vaere nemmere end:

int intOrdreID = Int32.Parse(DA.GetData(cmd).Rows[0]["MAXID"].ToString());
Avatar billede mikkel251 Seniormester
18. juli 2016 - 17:02 #27
den ser også mere overskuelig ud
Avatar billede arne_v Ekspert
18. juli 2016 - 17:03 #28
Medmindre der er nogle side effekter, saa maa:

//Henter id'et på den nye bruger/kunde
        cmd = new SqlCommand(@"SELECT fldId
                                FROM tblBruger
                                WHERE fldBrugernavn=@brugernavn
                                AND fldAdresse=@Adresse
                                AND fldPostnr=@PostNr
                                AND fldBy=@By
                                AND fldTlf=@Tlf
                                AND fldemail=@Email
                                AND fldId=@ID");
        //Parameters
        cmd.Parameters.AddWithValue("@brugernavn", _brugernavn);
        cmd.Parameters.AddWithValue("@Adresse", _Adresse);
        cmd.Parameters.AddWithValue("@PostNr", _Postnr);
        cmd.Parameters.AddWithValue("@By", _By);
        cmd.Parameters.AddWithValue("@Email", _Email);
        cmd.Parameters.AddWithValue("@Tlf", _Tlf);
        cmd.Parameters.AddWithValue("@ID", ID);



        //int32.parse er skiftet ud med convert.Into32()
        int intKundeID = Convert.ToInt32(DA.GetData(cmd).Rows[0]["fldId"].ToString());

kunne erstattes med:

int intKundeID = ID;
Avatar billede mikkel251 Seniormester
18. juli 2016 - 17:15 #29
Det prøver jeg lige
Avatar billede mikkel251 Seniormester
18. juli 2016 - 17:21 #30
Det er rimlig godt set af dig :), det virkede fint og mindre kode når man skriver den på den måde det må vel næsten være det samme med den her:
//Lægger ID'et i variablen intOrderID
int intOrderID = Int32.Parse(DA.GetData(cmd).Rows[0]["MaxID"].ToString());
Avatar billede arne_v Ekspert
18. juli 2016 - 18:00 #31
Nej - den kan ikke elimineres paa samme maade.

Men der  skal findes en loesning paa samtidighedsproblemet for den.
Avatar billede mikkel251 Seniormester
18. juli 2016 - 19:42 #32
enig jeg må se om jeg kan finde ud af den :D
Avatar billede arne_v Ekspert
18. juli 2016 - 20:17 #33
cmd = new SqlCommand(@"SELECT MAX(fldOrdreID) as MaxID FROM tblOrdrer WHERE fldBrugerId_fk=@KundeID");
        cmd.Parameters.AddWithValue("@KundeID", intKundeID);


        //Lægger ID'et i variablen intOrderID
        int intOrderID = Int32.Parse(DA.GetData(cmd).Rows[0]["MaxID"].ToString());

skal nok laves som:

cmd = new SqlCommand(@"SELECT SCOPE_IDENTITY() as NewID");
int intOrderID = (int)(decimal)DA.GetData(cmd).Rows[0]["NewID"];
Avatar billede arne_v Ekspert
18. juli 2016 - 20:18 #34
Eller maaske endnu bedre:

cmd = new SqlCommand(@"SELECT SCOPE_IDENTITY()");
int intOrderID = (int)(decimal)cmd.ExecuteScalar();
Avatar billede arne_v Ekspert
18. juli 2016 - 20:19 #35
NB: alt dette her er utestet, saa du skal lige checke om det nu ogsaa virker som det skal.
Avatar billede mikkel251 Seniormester
18. juli 2016 - 21:29 #36
Det skal jeg nok teste og det er en stor hjælp at du bruger tid på det :D
Avatar billede arne_v Ekspert
19. juli 2016 - 04:43 #37
Hvad laeser du til?
Avatar billede mikkel251 Seniormester
19. juli 2016 - 09:45 #38
Jeg læser til webintegrator, jeg har et par andre uddannelser men det blev en hoppy at lave hjemmesider men det var mest wordpress og det program der hedder artisteer og det var ikke altid så optimal at arbejde i, så faldt jeg over den her uddannelse som er ren programmering af hjemmesider, men der er åbentbart forskel på hvad man bliver undervist alt efter hvor i landet man går :D
og vi bliver undervist i asp.net webforms og så har vi haft en lille smule jQuery det er på hovedforløbet på grundforløbet der har vi kun html og css

du kan læse lidt om det her
https://www.ug.dk/uddannelser/erhvervsuddannelser/web-integrator
Avatar billede mikkel251 Seniormester
19. juli 2016 - 09:57 #39
Nope den vil ikke makke ret :)


jeg får den her fejl
Serverfejl i programmet '/'.

Den angivne ændring er ugyldig.

Beskrivelse: Der opstod en undtagelse, der ikke blev behandlet, under udførelse af den aktuelle webanmodning. Se staksporingen for at få flere oplysninger om fejlen, og hvor den kom fra i koden.

Detaljer om undtagelse: System.InvalidCastException: Den angivne ændring er ugyldig.

Kildefejl:


Linje 171:      //  cmd = new SqlCommand("SELECT SCOPE_IDENTITY() AS MAXID FROM tblOrdrer");
Linje 172:        cmd = new SqlCommand(@"SELECT SCOPE_IDENTITY() as NewID FROM tblOrdrer");
Linje 173:        int intOrderID = (int)(decimal)DA.GetData(cmd).Rows[0]["NewID"];
Linje 174:
Linje 175:

Kildefil: c:\Users\Mikkel\Dropbox\Hovedforløbet webintegrator\webshoppen-boger\App_Code\odreFac.cs    Linje: 173

Staksporing:


[InvalidCastException: Den angivne ændring er ugyldig.]
  odreFac.getUdvOrdre() in c:\Users\Mikkel\Dropbox\Hovedforløbet webintegrator\webshoppen-boger\App_Code\odreFac.cs:173
  admin_test_tak.Page_Load(Object sender, EventArgs e) in c:\Users\Mikkel\Dropbox\Hovedforløbet webintegrator\webshoppen-boger\admin\test-tak.aspx.cs:27
  System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +51
  System.Web.UI.Control.OnLoad(EventArgs e) +95
  System.Web.UI.Control.LoadRecursive() +59
  System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2952

Versionsoplysninger: Microsoft .NET Framework version:4.0.30319; ASP.NET version:4.6.1073.0
Avatar billede arne_v Ekspert
19. juli 2016 - 15:05 #40
cmd = new SqlCommand(@"SELECT SCOPE_IDENTITY() as NewID FROM tblOrdrer");
int intOrderID = (int)(decimal)DA.GetData(cmd).Rows[0]["NewID"];

skal nok bare vaere:

cmd = new SqlCommand(@"SELECT SCOPE_IDENTITY() as NewID FROM tblOrdrer");
int intOrderID = (int)DA.GetData(cmd).Rows[0]["NewID"];
Avatar billede arne_v Ekspert
19. juli 2016 - 17:15 #41
ups

cmd = new SqlCommand(@"SELECT SCOPE_IDENTITY() as NewID");
int intOrderID = (int)DA.GetData(cmd).Rows[0]["NewID"];

da SCOPE_IDENTITY() ikke er for en specifik tabel - det er bare sidste auto genererede id for connection (og scope).
Avatar billede mikkel251 Seniormester
20. juli 2016 - 13:17 #42
jeg sad lige og så en video  med det her idag og er det ikke forstået rigtig at den henter den sidste række der lige er oprettet ud fra dens id og det gør den kun den ene gang?

men man kan også bruge Select @@IDENTITY as NewID, men er det ikke det samme bare skrevet på en anden måde ?
Avatar billede arne_v Ekspert
20. juli 2016 - 14:02 #43
Den henter sidste genererede id paa connection. Det sidste er hvad der goer at det virker for flere brugere.

SCOPE_IDENTITY() og @@IDENTITY goer naesten det samme. Men du boer bruge den foerste.
Avatar billede arne_v Ekspert
20. juli 2016 - 14:03 #44
Forskellen er hvis du laver en INSERT og den resulterer i at databasen koerer en TRIGGER som laver en ny INSERT, saa vil SCOPE_IDENTITY()  returnere det id har lavet, mens @@IDENTITY vil returnere det sidste genererede id aka det fra triggeren.

Men et er et sjaeldent set special tilfaelde.
Avatar billede mikkel251 Seniormester
20. juli 2016 - 14:14 #45
Det skal jeg helt sikkert lige sidde og rode med når jeg kommer hjem :D så jeg kan se forskellen, hvis det er muligt at se forskel på det :D
Avatar billede arne_v Ekspert
21. juli 2016 - 04:51 #46
Det ville jeg ikke bruge tid paa. Bare altid brug SCOPE_IDENTITY() og ikke @@IDENTITY.

Sandsynligvis vil du aldrig opleve et tilfaelde hvor der er forskel.

Men hvis du skulle goere det saa er det med 99.9% sandsynlighed SCOPE_IDENTITY() som goer det du oensker.
Avatar billede mikkel251 Seniormester
21. juli 2016 - 20:40 #47
Det giver ikke mening at prøve det efter det du siger men nu ved jeg den findes og så skal jeg bare bruge den når det er den skal bruges :D
Avatar billede arne_v Ekspert
22. juli 2016 - 18:53 #48
Jep.

Den eneste grund til at @@IDENTITY eksisterer er at den kom foerst.

Du skal ogsaa vaere pmaerksom paa at det er en SQLServer (og Sybase) specifik syntax.

I MySQL hedder det LAST_INSERT_ID().

Og Oracle og PostgreSQL bruger et helt andet koncept kaldet sequences.
Avatar billede arne_v Ekspert
22. juli 2016 - 18:56 #49
Jeg kender godt web integrator uddannelsen af omtale.

Den er berygtet for det lave niveau.

Hvis du vil op paa et rimeligt niveau saa skal du selv soerge for det.

Men det ser da ud til at du arbejder paa sagen.

:-)

C# er et fint sprog. Med PHP og C# viden i bagagen er du godt koerende.

Jeg ville nok have foreslaaet ASP.NET MVC fremfor ASP.NET web forms, men det gaar nok.
Avatar billede mikkel251 Seniormester
22. juli 2016 - 20:05 #50
Det var også det jeg frygtede men hvis bare jeg kan få grund tingene så må jeg give en den gas med selv at komme videre, men jeg synes det er meget svært at finde gode og forståelige guides på nettet til asp.net webforms så jeg håber at når jeg kommer ud i job at jeg så kan lære mere ?
Avatar billede arne_v Ekspert
22. juli 2016 - 20:55 #51
Jeg synes nu nok at der er en del omkring ASP.NET web forms.

Men jeg tror at du vil finde det nemmere at finde hjaelpen hvis du strukturerer din applikation bedre.

F.eks. den helt traditionelle:

Presentation Layer
Business Logic Layer
Data Access Layer

Fordi det er jo kun PL som er ASP.NET web forms specifik. For BLL og DAL kan du bruge al slags C# kode inkl. ASP.NET MVC, win forms, WPF, console etc..
Avatar billede mikkel251 Seniormester
22. juli 2016 - 21:44 #52
Jeg syntes det er svært at finde nogen gange,  når jeg ikke helt ved præcis hvad jeg skal søge efter
Avatar billede arne_v Ekspert
24. juli 2016 - 03:34 #53
Det kommer med erfaring.
Avatar billede mikkel251 Seniormester
24. juli 2016 - 10:54 #54
Jeg er gået i gang med den bog michell cronberg har skrevet bogen om asp.net 4.0 webforms der står da lidt forskelligt ??
Avatar billede arne_v Ekspert
25. juli 2016 - 03:50 #55
Jeg kender ikke bogen.

Generelt er udenlandske boeger bedre end danske.

Men ASP.NET web forms er saa almindelig at den sikkert nok skal vaere OK.
Avatar billede mikkel251 Seniormester
26. juli 2016 - 12:36 #56
jeg ved jo ikke meget om de bøger men jeg synes den har lidt jeg kan bruge så indtil videre så går det :D
Avatar billede mikkel251 Seniormester
26. juli 2016 - 12:41 #57
hvis jeg gerne vil hente min navigation fra databasen så skal jeg lave en tabel til min navigation men jeg forstå ikke helt hvad jeg gør,

jeg har lavet et felt til

-navn på linket
-url på linket
-sideorden til linket så man kan order dem senere, hvis det bliver nødvendigt
-sideId så man kan hente den ene side der høre til linket

og tabellen med siden der har jeg
-sidens overskrift
-sidens indhold

burde det ikke være nok og så skal indholdet på siderne jo bare ligges ind i tabellen sider??
Avatar billede arne_v Ekspert
31. juli 2016 - 01:05 #58
Det foerste forstaar jeg, men det andet med sider forstaar jeg ikke.
Avatar billede mikkel251 Seniormester
14. august 2016 - 12:45 #59
Det kan jeg godt forstå du ikke gør, jeg fik lavet det om så nu virker det,
og undskyld mit sene svar ferien er slut og jeg er igang igen på skolen så jeg blev lidt hængt op :)
Avatar billede arne_v Ekspert
14. august 2016 - 14:10 #60
Hvis det virker nu, saa skulle spoergsmaalet maaske afsluttet!?!?
Avatar billede mikkel251 Seniormester
14. august 2016 - 14:41 #61
selvfølgelig den havde jeg lige glemt i farten, det skulle være blevet gjort nu :D
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

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