Avatar billede burningice Nybegynder
06. december 2002 - 15:46 Der er 7 kommentarer og
1 løsning

Event til når indholdet i en DataList ændrer sig

Findes sådan en? jeg har søgt en del i sdk'et og i VS.Net, men halvdelen af de forskellige event til en datalist ved jeg ikke hvad bruges til, eller om det kan bruges...

Problemet er nemlig, at jeg har en thread der opdaterer indholdet i en datalist. Jeg vil dog gerne kunne styre det sådan, at når indholdet ændrer sig stopper threaden ved hjælp af en bool update = true/false. nogen der har ideer til hvordan det gøres nemmest?

Jeg kan da også godt sige hvorfor jeg har lavet sådan en thread.. det er så ene og alene af den grund at access er lidt sløv i optrækket. Jeg er ved at lave et program, hvor man skal kunne oprette brugere, som så igen bliver vist i en datalist. Problemet er, at når en bruger oprettes går der mellem 1-3 sekunder før access er helt færdig, så hvis jeg bare kalder min GetCustomers procedure lige efter at kunden er oprettet dukker han ikke op :(
Avatar billede mufoxe Nybegynder
06. december 2002 - 18:23 #1
Kan du ikke bare få tråden til at opdatere dit DataGrid?
Avatar billede burningice Nybegynder
06. december 2002 - 22:21 #2
mufoxe>> datagrid?? jeg bruger datalist, og jo.. som det er nu opdaterer den hele tiden... hvilket ikke er optimalt. Jeg vil gerne have den til kun at opdatere fra jeg tilføjer en ny kunde til at indholdet i datalisten rent faktisk ændrer sig :)
Avatar billede burningice Nybegynder
09. december 2002 - 14:06 #3
simoooon.... en eller anden... hjææælp... hehe... er der virkelig ikke nogen der har en ide til hvordan problemet nemmest bliver løst? Jeg er villig til at skrive koden om, hvis den måde det gøres på nu ikke er optimal.
Avatar billede simon.ulsnes Nybegynder
09. december 2002 - 14:33 #4
(hehe)
Smider du ikke lige noget kode op?
Umiddelbart ville jeg synes at det ville være smart at lave en ny klasse som arver fra DataList med en override af en Add/Edit-funktion (ved ikke lige helt hvordan DataList fungerer) som gør det samme + trigger en event.

// Simon
Avatar billede simon.ulsnes Nybegynder
09. december 2002 - 14:36 #5
Der er jo de indbyggede EditCommand, UpdateCommand, CancelCommand, DeleteCommand og ItemCommand events, som triggeres når man klikker på forskellige knapper.
Avatar billede burningice Nybegynder
09. december 2002 - 15:26 #6
det her er koden til min tråd...

        private void doGetCostumers(object state)
        {
            while (boolGetCostumers)
            {
                OleDbCommand objCommand = new OleDbCommand("SELECT tblKunder.id, tblKunder.bord, tblKunder.navn FROM tblKunder WHERE (tblKunder.tidBetalt = 'Nope')", objConn);
           
                OleDbDataReader objDataReader = objCommand.ExecuteReader();

                DataTable dt = new DataTable();
                DataRow dr;
       
                dt.Columns.Add(new DataColumn("id", typeof(int)));
                dt.Columns.Add(new DataColumn("kunde", typeof(string)));
       
                while (objDataReader.Read())
                {
                    dr = dt.NewRow();
                    dr[0] = objDataReader["id"].ToString();
                    if (objDataReader["navn"].ToString() != "")
                    {
                        dr[1] = objDataReader["bord"].ToString() +" ("+ objDataReader["navn"].ToString() +")";
                    }
                    else
                    {
                        dr[1] = objDataReader["bord"].ToString();
                    }
               
                    dt.Rows.Add(dr);
                }
           
                objDataReader.Close();

                DataView dv = new DataView(dt);
           
                lstCustomers.DataSource = dv;
                lstCustomers.DisplayMember = "kunde";
                lstCustomers.ValueMember = "id";

                Thread.Sleep(1000);
            }
            Thread.CurrentThread.Abort();
                  }

Som du kan se så kører den kun når boolGetCostumers er true, og det var så min tanke, at den er sat til false pr default. I det at man tilføjer en ny kunde bliver den sat til true, og så snart at indholdet af lstCustomers rent faktisk bliver ændres skal den sættes til false igen.
Avatar billede burningice Nybegynder
12. december 2002 - 15:59 #7
så fik jeg det sq til at virke.. det skal lige optimeres lidt, men det virker :)

Istedet for at lade min tråd køre hele tiden, starter jeg den først i det øjeblik en kunde bliver oprettet, og tråden stopper så igen når indholdet af listen ændrer sig

Start af tråd:

intCustomersCount = lstCustomers.Items.Count;
ThreadPool.QueueUserWorkItem(new WaitCallback(thrGetCostumers));

Selve tråden:

private void thrGetCostumers(object state)
{
    while (true)
    {
                doGetCustomers();
       
        if (lstCustomers.Items.Count != intCustomersCount)
        {   
              Thread.CurrentThread.Abort();
        }
        Thread.Sleep(1000);
        }
    Thread.CurrentThread.Abort();
}
Avatar billede burningice Nybegynder
12. december 2002 - 16:08 #8
når det ene problem er løst kommer der straks et nyt... det er typisk :(

http://www.eksperten.dk/spm/294060
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