Avatar billede ihtezaz Praktikant
11. januar 2006 - 02:17 Der er 10 kommentarer

Opdatering af dynamisk tabel

Hej,

Jeg har en panel control, hvor i jeg har to dynamiske tabeller.
tabellerne bliver oprettet i en CreateTables metode, og metoden bliver kørt i page load_eventet. I min dynamiske tabeller har jeg også checkboxes. Når der en checkbox checkes og derefter OK knappen klikkes skal den valgte række fjernes, hvilket den også gøre. problemmet er, at når handleren til OK knappen er udført køre jeg CreateTables metoden igen for at opdatere tabellerne, men dette medføre at der til de rækker der føre fandtes adderes de tilbageværende række. Selve handleren fungere som den skal, men det er opdatering af tabellen jeg har problemmer med.



CreateTables metode:


        private void CreateTables()
        {
            if(!txtUserID.Text.Equals(string.Empty))
            {

                int userID = int.Parse(txtUserID.Text);
                pnl.Controls.Remove(tblSoldItems);
                pnl.Controls.Remove(tblBuyedItems);
                tblSoldItems = new Table();
                tblBuyedItems = new Table();
                CreateUsermarkItemsSold(userID);
                CreateUsermarkItemsbuyed(userID);

                if((tblSoldItems.Rows.Count < 1)&& (tblBuyedItems.Rows.Count <1))
                {
                    lblIngenHandler.Visible = true;       
                    ChangeToMainPageButton();
                }
            }
        }





evenethandler til knappen, der tilføjer den valgte række i en bestemt tabel i DB'en, hvorefter jeg fra min datakilde ikke længere modtager den valgte række ved oprettelse af dynamiske tabeller:


private void btnOK_Click(object sender, System.EventArgs e)
        {
           
           
                bool UserNotSelected = false;
               
                bool changesToTable = false;
                string strHistID = string.Empty;
                string comment = txtComment.Text;
                int markType = Convert.ToInt32(rbListMarkType.SelectedValue);
                Usermark userMark = null;
                auctionInteract = new AuctionInteraction();
                //Items buyed
                foreach(TableRow tblRow in tblBuyedItems.Rows)
                {
                    if(tblRow.Cells[0].Controls[0].GetType().Equals(typeof(CheckBox)))
                    {
                       
                        CheckBox cb = (CheckBox)tblRow.Cells[0].Controls[0];
                        if(cb != null && (cb.Checked == true))
                        {   
                           
                            strHistID = cb.Attributes["auctionResultID"];
                            int userID = Convert.ToInt32(cb.Attributes["userID"]);
                            int auctionResultID = Convert.ToInt32(strHistID);
                            userMark = new Usermark(auctionResultID,markType,comment,userID);

                            auctionInteract.InsertSellerUserMark(userMark);
                       
                            changesToTable = true;
                       
                            // if success, then insert mark
                        }
                        else
                        {
                            UserNotSelected = true;
                       
                        }
                   
                    }
                }

                string strHistSoldID = string.Empty;
           
                //Items sold
                foreach(TableRow tblRow in tblSoldItems.Rows)
                {
                   
                    if(tblRow.Cells[0].Controls[0].GetType().Equals(typeof(CheckBox)))
                    {
                        CheckBox cb = (CheckBox)tblRow.Cells[0].Controls[0];

                        if(cb != null && (cb.Checked == true))
                        {   

                            strHistSoldID = cb.Attributes["auctionResultID"];
                            int userID = Convert.ToInt32(cb.Attributes["userID"]);
                            int auctionResultID = Convert.ToInt32(strHistSoldID);
                            userMark = new Usermark(auctionResultID,markType,comment,userID);
                           
                           
                            auctionInteract.InsertBuyerUserMark(userMark);
                            changesToTable = true;
                        }
                        else if(UserNotSelected)
                        {
                            UserNotSelected = true;
                        }
                       
                    }

                }
                   
            if(UserNotSelected)
            {
                cvNoUserSelected.IsValid = false;
            }   

       
            CreateTables();
           
        }
Avatar billede snepnet Nybegynder
11. januar 2006 - 02:30 #1
det lyder som om du skal slette rækkerne i tabellen inden du opretter dem igen (lyder som om du først indsætter dem i page_load, og derefter igen, hvis der er trykket på btnOK...
slet rækkerne i tabellen inden du lægger dem iht. data.
mvh
Avatar billede snepnet Nybegynder
11. januar 2006 - 02:33 #2
altså...

// i den metode der lægger rækkerne på tabellen
1) Rows.Clear();
2) Indsæt rækkerne i tabellen som du nu engang gør

mvh
Avatar billede ihtezaz Praktikant
11. januar 2006 - 12:09 #3
Hej snepnet, det har jeg prøvet nu og det fungere fint føreste gang jeg vælger en række, så fjernes den valgte række, men når jeg vælger en række en anden gang så fanges den checkede checkbox ikke.
Avatar billede snepnet Nybegynder
11. januar 2006 - 12:49 #4
så kommer den formegentlig ikke med når du bygger din tabel af den ene eller anden årsag...
du regenerer tabellen på severen i forbindelse med et postback, og hvis du ikke sørger for at tabellen kommer til at se ud som den så ud da du sendte den til klienten - går der kage i det.
hvordan ser den metode du bygger din tabel i ud?
mvh
Avatar billede ihtezaz Praktikant
11. januar 2006 - 12:55 #5
Ok, det giver meningen:

her er koden hvor jeg opretter min tabel:

public void CreateUsermarkItemsSold(int userID)
        {
            auctionInteract = new AuctionInteraction();
            userInteract = new UserInteraction();
            User user = null;
            Business.Auction auction = null;
       
            ArrayList alMarks = auctionInteract.ReturnBuyerToGiveMarks(userID);
               
            if(alMarks.Count>0)
            {
                tblSoldItems.Rows.Clear();
                Literal litText;   
                CheckBox cbItemsSold;
               
                tblSoldItems.BorderWidth = 1;
                tblSoldItems.BackColor = Color.White;
                tblSoldItems.Width= 680;
                tblSoldItems.Height = 50;
                tblSoldItems.CellSpacing = 5;
                tblSoldItems.Caption = "Vare du har solgt";
           

                #region colm caption

                userListSettings = TableListSettingsSingeltonInteraction.CreateInstance;

                string colm1 = userListSettings.getValue("giveUsermarkUserListColm5Caption");

                string colm2 = userListSettings.getValue("giveUsermarkUserListColm1Caption");

                string colm3 = userListSettings.getValue("giveUsermarkUserListColm2Caption");

                string colm4 = userListSettings.getValue("giveUsermarkUserListColm3Caption");
               
                string colm5 = userListSettings.getValue("giveUsermarkUserListColm4Caption");


                tblRow = new TableRow();


                tblCell = new TableCell();
                tblCell.VerticalAlign = VerticalAlign.Middle;
                tblCell.Width = 150;
                tblCell.CssClass = "tekst";
                litText = new Literal();
                litText.Text = "<b>"+colm1+"</b>";
                tblCell.Controls.Add(litText);
                tblRow.Cells.Add(tblCell);

                tblCell = new TableCell();
                tblCell.VerticalAlign = VerticalAlign.Middle;
                tblCell.CssClass = "tekst";
                tblCell.Width = 250;
                litText = new Literal();
                litText.Text = "<b>"+colm2+"</b>";
                tblCell.Controls.Add(litText);
                tblRow.Cells.Add(tblCell);

                tblCell = new TableCell();
                tblCell.VerticalAlign = VerticalAlign.Middle;
                tblCell.CssClass = "tekst";
                tblCell.Width = 250;
                litText = new Literal();
                litText.Text = "<b>"+colm3+"</b>";
                tblCell.Controls.Add(litText);
                tblRow.Cells.Add(tblCell);


                tblCell = new TableCell();
                tblCell.VerticalAlign = VerticalAlign.Middle;
                tblCell.CssClass = "tekst";
                tblCell.Width = 150;
                litText = new Literal();
                litText.Text = "<b>"+colm4+"</b>";
                tblCell.Controls.Add(litText);
                tblRow.Cells.Add(tblCell);


                tblCell = new TableCell();
                tblCell.VerticalAlign = VerticalAlign.Middle;
                tblCell.Width = 150;
                tblCell.CssClass = "tekst";
                litText = new Literal();
                litText.Text = "<b>"+colm5+"</b>";
                tblCell.Controls.Add(litText);
                tblRow.Cells.Add(tblCell);


                tblSoldItems.Rows.Add(tblRow);
                #endregion

                foreach(AuctionIDUserIDObj mark in alMarks)
                {
                    user = userInteract.getUserById(mark.UserID);
                    auction = auctionInteract.CollectAuction(mark.AuctionID);

                    tblRow = new TableRow();
                    tblCell = new TableCell();
                    tblCell.VerticalAlign = VerticalAlign.Middle;
                    tblCell.Width = 150;
                   

                    #region choose checkbox
                   
                    cbItemsSold = new CheckBox();
                    cbItemsSold.Attributes.Add("userID",mark.UserID.ToString());
                    cbItemsSold.Attributes.Add("auctionResultID",mark.AuctionResultID.ToString());
                    cbItemsSold.EnableViewState = true;
                    tblCell = new TableCell();
                    tblCell.Width = 350;
                    tblCell.Controls.Add(cbItemsSold);
                    tblRow.Cells.Add(tblCell);
                   

                    #endregion


                    #region Username
                    litText = new Literal();
                    tblCell = new TableCell();
                    tblCell.Width = 350;
                    tblCell.CssClass = "tekst";
                    litText.Text =user.getSetLogin.UserName;
                    tblCell.Controls.Add(litText);
                    tblRow.Cells.Add(tblCell);
                    #endregion


                    #region user fullname
                    tblCell = new TableCell();
                    tblCell.CssClass = "tekst";
                    tblCell.Width = 350;
                    litText = new Literal();
                    litText.Text = user.Name;
                    tblCell.Controls.Add(litText);
                    tblRow.Cells.Add(tblCell);
                    #endregion
           

                    #region quantity
                    litText = new Literal();
                    tblCell = new TableCell();
                    tblCell.CssClass = "tekst";
                    tblCell.Width = 350;
                    litText.Text = mark.ItemQuantity.ToString();
                    tblCell.Controls.Add(litText);
                    tblRow.Cells.Add(tblCell);
                    #endregion


                    #region price
                    litText = new Literal();
                    tblCell = new TableCell();
                    tblCell.CssClass = "tekst";
                    tblCell.Width = 350;
                    litText.Text = mark.Price.ToString();
                    tblCell.Controls.Add(litText);
                    tblRow.Cells.Add(tblCell);
                    #endregion

                    tblSoldItems.Rows.Add(tblRow);

                    #region auction decription

                    tblRow3 = new TableRow();
                    tblCell = new TableCell();
                    litText = new Literal();
                    tblCell.Width = 630;
                    tblCell.CssClass = "tekst";
                    litText.Text = auction.Title;
                    //                    litText.ID = mark.AuctionResultID.ToString();
                    tblCell.Controls.Add(litText);
                    tblRow3.Cells.Add(tblCell);

                    tblSoldItems.Rows.Add(tblRow3);
                    #endregion

                }
                pnl.Controls.Add(tblSoldItems);
            }   
        }
Avatar billede snepnet Nybegynder
11. januar 2006 - 21:54 #6
hmmmm.... bombommelom ..... synes ikke lige der er noget der springer i øjnene....
jeg bliver nok nødt til at se det hele - altså init/load etc.

hvis du har mulighed for at koge det ned til det væsentligste ville det være en stor fordel.

mvh
Avatar billede ihtezaz Praktikant
12. januar 2006 - 00:39 #7
Hejsa snepnet

Her har du resten af væsentlighed:

init eventet:


    private void InitializeComponent()
        {   
            this.btnOK.Click += new System.EventHandler(this.btnOK_Click);
            this.btnAnnuller.Click += new System.EventHandler(this.btnAnnuller_Click);
            this.btnMainPage.Click += new System.EventHandler(this.btnMainPage_Click);
            this.btnChange.Click += new System.EventHandler(this.btnChange_Click);
            this.Load += new System.EventHandler(this.Page_Load);

        }


Load eventet:


userInterac = new UserInteraction();
            txtUserID.Text = userInterac.GetUserIDFromUserName(User.Identity.Name).ToString();
            CreateTables();   



CreateTables() har jeg ændret til følgende:



private void CreateTables()
        {
            if(!txtUserID.Text.Equals(string.Empty))
            {

                int userID = int.Parse(txtUserID.Text);
                CreateUsermarkItemsSold(userID);
                CreateUsermarkItemsbuyed(userID);

                if((tblSoldItems.Rows.Count < 1)&& (tblBuyedItems.Rows.Count <1))
                {
                    lblIngenHandler.Visible = true;       
                    ChangeToMainPageButton();
                }
            }
        }
Avatar billede ihtezaz Praktikant
12. januar 2006 - 00:44 #8
Hvis jeg istedet for at kalde createTables() metoden, sidste i eventethandleren til OK kanppen,  redirecter til samme side så fungere det, men det er jo ikke en helt køn løsning :)
Avatar billede snepnet Nybegynder
12. januar 2006 - 14:07 #9
nej den er self. ikke så nydelig - på den anden side er den jo rimelig sikker :o)
har du checket med debuggeren at koden rent faktisk eksekverer som du forventer?
mvh
Avatar billede ihtezaz Praktikant
14. januar 2006 - 13:40 #10
Ok snepnet, jeg tjekker det og vender tilbage.
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