Avatar billede spurn Nybegynder
20. maj 2004 - 14:43 Der er 15 kommentarer og
1 løsning

Instans mangler

Hej Kyndige.

Jeg har nu bøvler med dette problem i 6 timer, så nu vil jeg gerne videre, så håber i kan hjælpe mig.
Situation er den at jeg har en side hvorpå der er 6 listboxe hvor man kan vælge ting, når man så trykker ok så er det meningen at tingene fra listboxene skal gemmes i et datagrid.
Når man vælger nye ting, bliver det så også smidt i datagrided i en ny række.
Dette er ententionen men det virker ikke, enten så kan jeg ikke arbejde på referencen(den mangler) ellers så initialiserer jeg den datatable som jeg arbejder på hver gang, sådan at jeg overskriver den første række hver gang.
Her er et udsnit af noget kode for at gøre det nemmere at overskue

public abstract class CP_GetGamingtypeAndSubtype : System.Web.UI.UserControl
{
        public DataTable dt;
               
        protected System.Web.UI.WebControls.DropDownList Gamingtype;
        protected System.Web.UI.WebControls.Button Button1;
        protected System.Web.UI.WebControls.DataGrid dg;
       
        private void Page_Load(object sender, System.EventArgs e)
        {       
           
            if (!IsPostBack)
            {
                // HER HAR JEG LAGT INITALISERINGEN DA JEG SÅ VILLE MENE
                // AT DEN KUN BLIVER OPRETTET 1. GANG MAN BESØGER SIDEN
                dt = new DataTable();
            }

        }


        private void Button1_Click(object sender, System.EventArgs e)
        {
            // HER PRØVER JEG SÅ AT ARBEJDE PÅ OBJECTET MEN FÅR SÅ
            // FEJLEN NEDERST I DOKUMENTET
            DataRow dtRow;
            dtRow = dt.NewRow();
        }
       

        #region Web Form Designer generated code
        override protected void OnInit(EventArgs e)
        {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            InitializeComponent();
            base.OnInit(e);
        }
       
        ///        Required method for Designer support - do not modify
        ///        the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.Button1.Click += new System.EventHandler(this.Button1_Click);
            this.Load += new System.EventHandler(this.Page_Load);
        }
        #endregion
    }

/////////////// FEJLEN ////////////////////
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error:
Line 131:        {
Line 132:            DataRow dtRow;
Line 133:            dtRow = dt.NewRow();
Avatar billede burningice Nybegynder
20. maj 2004 - 16:29 #1
hvis du gerne vil have at din DataTable skal blive oprettet automatisk igen skal du gemme den i viewstate og loade den igen når siden indlæses på serveren
Avatar billede spurn Nybegynder
20. maj 2004 - 16:42 #2
Den er jeg nok til at have uddybet, da jeg aldrig har arbejdet med viewstate før.

Det jeg gerne vil have er at jeg første gange controllen loades, bliver der oprettet en datatable, som jeg kan kan tilføje rækker til indtil brugeren er færdig med at vælge det antal elementer som ønskes. Dette sker i flere omgange. Når brugeren har valgt første gang, så skal der laves en ny række i datatable, denne bindes så til datagriden som brugeren kan se. Derefter kan brugeren igen vælge, og en ny række bliver lavet.
Avatar billede nielsbrinch Nybegynder
20. maj 2004 - 16:48 #3
Sæt EnableViewState = True på DataTable hvis du ikke allerede har gjort det.
Avatar billede spurn Nybegynder
20. maj 2004 - 16:56 #4
hvis jeg skriver dt.  har jeg ingen muligheder der hedder viewstate eller lignende, er også i tvivl om hvordan det hjælper min situation med ikke at kunne arbejde på objectet ?
Avatar billede nielsbrinch Nybegynder
20. maj 2004 - 17:00 #5
Hvis du ser kilden på din ASP.NET-side når den vises i browseren, kan du se nær toppen et område der hedder "ViewState" som indeholder nogle spøjse tegn. Ved at sætte EnableViewState = True gemmer du din DataTable inde i de spøjse tegn, om man så må sige :) alternativet er at du skal re-initialisere den ved hvert pageload.
Avatar billede nielsbrinch Nybegynder
20. maj 2004 - 17:02 #6
EnableViewState er vist ikke direkte på DataTable da det er en property der kun er på objekter beslægtet med System.Web.UI.Control el. lign.

Prøv at sætte det på dit datagrid i stedet.
Avatar billede spurn Nybegynder
20. maj 2004 - 17:04 #7
dette er hermed gjort, men det gør intet forskel, da det er arbejdet på min datatable som er problemet. Er det det rigtige sted jeg opretter den. Jeg kan godt bruge den hvis jeg smider den udenfor if (!IsPostBack), men så opretter den bare en ny hver gang siden loades(tror jeg) og derfor bliver datatable ved med kun at have en række.
Avatar billede nielsbrinch Nybegynder
20. maj 2004 - 17:10 #8
Ja det er rigtigt. Som cyberfessor siger, du skal have den lagt i ViewState ... det kan jeg ikke helt se hvordan man umiddelbart kan gøre, uden at skulle lave en masse krumspring.

Hvis jeg sad i situationen ville jeg nok gøre noget i den retning i stedet:

if (!IsPostBack)
{
  Session["dt"] = null;
  dt = new DataTable();
  Session["dt"] = dt;
}
else
{
  dt = (DataTable)Session["dt"];
}
Avatar billede spurn Nybegynder
20. maj 2004 - 17:17 #9
Det vil jeg prøve.

HVad er årsagen til jeg ikke kan få fat i en public variabel fra en button_klik når man kan fra andre funktioner ?
Avatar billede spurn Nybegynder
20. maj 2004 - 17:23 #10
lav et svar og du får pointene.

ville helst have undgået session, men når det virker så sig jeg tak :)

undrer mig dog stadig over, hvorfor jeg ikke bare kan gøre det som jeg gjorde før.
Avatar billede nielsbrinch Nybegynder
20. maj 2004 - 17:27 #11
Det kan du ikke fordi klienten ikke kan gemme på et objekt. Websider er stateless, hvilket vil sige at en webside principielt ikke kan huske en døjt om hvad den lavede lige før.

Det er ret upraktisk, hvilket er grunden til at Microsoft har fundet på ViewState.

I øvrigt skal du ikke være så ked af at bruge Session. Det er selvfølgelig bedst at undgå, men performancemæssigt er det såmænd helt acceptabelt.
Avatar billede spurn Nybegynder
20. maj 2004 - 17:33 #12
1000 tak
Avatar billede nielsbrinch Nybegynder
20. maj 2004 - 17:34 #13
Session er i øvrigt langt bedre end at putte store mængder informationer i ViewState. Nu ved jeg ikke hvor meget du har tænkt dig at putte i din DataTable, men du skal ikke putte særligt meget i, før det bliver tungt med ViewState.
Avatar billede spurn Nybegynder
20. maj 2004 - 17:55 #14
Det er det ikke, det er til et system hvor en bruger har en oddsetkupon og så kan tilføje kampe dertil.

hmmm nu har jeg trykket accepter 10 gange. gad vide hvad jeg gør galt her.
Avatar billede nielsbrinch Nybegynder
20. maj 2004 - 18:26 #15
Tak for pts.
Avatar billede nielsbrinch Nybegynder
20. maj 2004 - 19:13 #16
Ahaaa

Man kan åbenbart sætte ViewState på præcis samme måde som man sætter Session.

ViewState["dt"] = dt;
osv.

Jeg tror dog ikke du kan vinde noget specielt på det.
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