Avatar billede nzc Nybegynder
01. august 2004 - 19:12 Der er 21 kommentarer og
2 løsninger

Table.Rows.Clear() clearer ikke noget som helst nogen gange

Hej!

Jeg har en tabel som jeg læser data ind i fra db. dataene bliver trukket ud på baggrund af en selectedDate på en calendar jeg også har på min side. Min kode ser ud som følger (C#):

private void Page_Load...
if (!IsPostBack)
UdfyldTabel(DateTime.Now);

private void Calendar1_SelectionChanged...
UdfyldTabel(this.Calendar1.SelectedDate);

private void UdfyldTabel(DateTime dato)
{
  Tabel.Rows.Clear();
  //herunder vil koden til at udfylde tabellen befinde sig
}

Altså !IsPostBack så læses der fra db med dags dato og dataene fyldes i tabellen. Når SelectionChange sker så kaldes UdfyldTabel med den vaægte dag. Det ser bare så smart ud ik'?! Mit problem er bare at jeg hver gang jeg vil kalde UdfyldTabel gerne vil ha al den data der er i tabellen UD så jeg ka få noget nyt IND. Men dette kan simpelthen ikke lade sig gøre MED MINDRE jeg fjerne !IsPostBack ?!?!? Så virker det hele som det skal. Altså kaldes UdfyldTabel først for dags dato og så med den valgte dato og det er jo ikke smart. Nogen hints?!

NZC
Avatar billede nzc Nybegynder
01. august 2004 - 19:13 #1
jeg har det lidt varmt så det er ikke sikkert jeg skriver så forståeligt :P
Avatar billede snepnet Nybegynder
01. august 2004 - 21:02 #2
Hvordan tilføjer du tabellen til siden ?
Er den angivet i aspx-koden, eller indsætter du den programmatisk - og i givet fald hvor ?
Avatar billede nzc Nybegynder
01. august 2004 - 21:07 #3
den er angivet som en <asp:Tabel> på min aspx-side og den bliver fyldt i codebehind i metoden der hedder UdfyldTabel
Avatar billede nzc Nybegynder
01. august 2004 - 21:08 #4
jeg sætter ind programmatisk - hvis der er noget der hedder det :)
Avatar billede snepnet Nybegynder
01. august 2004 - 21:33 #5
Ok - kan du så ikke poste den komplette kode for UdfyldTabel(...) ?
Avatar billede nzc Nybegynder
01. august 2004 - 21:49 #6
private void UdfyldTabel(DateTime datoen)
        {
            TableKalender.Rows.Clear();
                       
            TableRow tr = new TableRow();
            tr.ID = "header";

            //en celle med blankt indhold skal stå først i tabellen.
            TableCell tc = new TableCell();
            tc.Text = "";
            tc.Width = 40;
            tr.Cells.Add(tc);
                           
            ArrayList ansatte = Controller.hentAnsatte(((Ansat)Session["ansat"]).Afdelingid);

            TableHeaderCell thc = new TableHeaderCell();

            foreach (Ansat a in ansatte)
            {
                thc = new TableHeaderCell();
                thc.Text = a.Fornavn + " " + a.Efternavn;
                thc.Width = 150;
                tr.Cells.Add(thc);
            }
           
            //Den øverste række skal tilføjes tabellen
            TableKalender.Rows.Add(tr);

                       
            DateTime dt = DateTime.Parse("8:00");
            int id = 480;
            for (int j = 0; j < 48; j++)
            {                 
                dt = dt.AddMinutes(15);
                tc = new TableCell();
                tr = new TableRow();
                id = id + 15;
                tr.ID = id.ToString();
                tc.Text = dt.ToShortTimeString();
                tc.Width = 40;             
                tr.Cells.Add(tc);
                for (int i = 1; i <= ansatte.Count; i++)
                {
                    tc = new TableCell();
                    tc.ID = i.ToString() + "," + j.ToString();
                    tc.Text = "";
                    tr.Cells.AddAt(i,tc);
                }
                TableKalender.Rows.Add(tr);
            }

           
            int start = 480;
            int interval = 15;
            int celleindex = 1;
            ArrayList reservationer;
            int sluttid;
           
            foreach (Ansat a in ansatte)
            {
                reservationer = Controller.hentAnsattesReservationer(a.ID, datoen);
                if (reservationer != null)
                {
                    foreach (Reservation r in reservationer)
                    {
                        tc = TableKalender.Rows[((r.Starttid - start) / interval)].Cells[celleindex];
                        tc.Text = "<a href='side.aspx?reservationsid=" + r.Klient.ID.ToString() + "'>" + r.Klient.Fornavn + " " + r.Klient.Efternavn + " " + r.Klient.AntalBehandlinger + "</a>";
                        sluttid = r.Sluttid;                         
                        for (int i = 0; i < sluttid; i = i + interval)
                        {
                            tc = TableKalender.Rows[(((r.Starttid + i) - start) / interval)].Cells[celleindex];
                            tc.Text = "<a href='side.aspx?klientid=" + r.Klient.ID.ToString() + "'>" + r.Klient.Fornavn + " " + r.Klient.Efternavn + " " + r.Klient.AntalBehandlinger + "</a>";
                        }
                    }
                    celleindex++;
                }
            }
        }
Avatar billede snepnet Nybegynder
01. august 2004 - 22:45 #7
Jeg tror du er nødt til at forklare hvad det nøjagtig der der virker/ikke virker når du slår checket på ispostback til og fra.
Den kode du postede øverst burde køre fint nok..
Avatar billede nzc Nybegynder
01. august 2004 - 22:48 #8
det der virker er at når jeg ved page_load ikke bruger IsPostBack er at tabellen tømmes for indhold og det nye jeg henter fra db kommer derind. Hvis jeg har IsPostBack med så tømmes tabellen ikke og al dataen kommer til at stå oveni hinanden
Avatar billede snepnet Nybegynder
01. august 2004 - 22:57 #9
Prøv at se nedenstående principkode:

// aspx

<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="mccannon.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
    <HEAD>
        <title>WebForm1</title>
        <meta name="GENERATOR" Content="Microsoft Visual Studio .NET 7.1">
        <meta name="CODE_LANGUAGE" Content="C#">
        <meta name="vs_defaultClientScript" content="JavaScript">
        <meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    </HEAD>
    <body>
        <form id="Form1" method="post" runat="server">
            <asp:Button id="Button1" runat="server" Text="Button"></asp:Button>
            <asp:DropDownList id="DropDownList1" runat="server" AutoPostBack="True">
                <asp:ListItem Value="1">1</asp:ListItem>
                <asp:ListItem Value="2">2</asp:ListItem>
                <asp:ListItem Value="3">3</asp:ListItem>
            </asp:DropDownList>
            <asp:Table id="Table1" runat="server"></asp:Table>
        </form>
    </body>
</HTML>


// og codebehind
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace mccannon
{
    public class WebForm1 : System.Web.UI.Page
    {
        protected System.Web.UI.WebControls.Button Button1;
        protected System.Web.UI.WebControls.DropDownList DropDownList1;
        protected System.Web.UI.WebControls.Table Table1;
   
        private void Page_Load(object sender, System.EventArgs e)
        {
            if(!IsPostBack)
                FillTable(5, "load");
        }

        private void FillTable(int rows, string message)
        {
            // this.Table1.Rows.Clear();
            TableRow tr = null;
            TableCell tac = null;
           
            for(int i=0;i<rows;i++)
            {
                tr = new TableRow();
                tac = new TableCell();
                tac.Text = String.Format("{0} nummer {1}", message, i.ToString());
                tr.Cells.Add(tac);
                this.Table1.Rows.Add(tr);
            }
        }

        override protected void OnInit(EventArgs e)
        {
            InitializeComponent();
            base.OnInit(e);
        }
       
        private void InitializeComponent()
        {   
            this.Button1.Click += new System.EventHandler(this.Button1_Click);
            this.DropDownList1.SelectedIndexChanged += new System.EventHandler(this.DropDownList1_SelectedIndexChanged);
            this.Load += new System.EventHandler(this.Page_Load);

        }

        private void Button1_Click(object sender, System.EventArgs e)
        {
            FillTable(10, "button");
        }

        private void DropDownList1_SelectedIndexChanged(object sender, System.EventArgs e)
        {
            FillTable(15, "ddlist");
        }
    }
}

Den mener jeg opfører sig helt efter hensigten... kan du reproducere din problem med den kode ?
Avatar billede snepnet Nybegynder
01. august 2004 - 22:59 #10
hvis du udkommentere IsPostBack, skal du indkommentere Rows.Clear()
Avatar billede nzc Nybegynder
01. august 2004 - 23:11 #11
det er jo næsten den samme kode jeg har men mit virker bare ikke... jeg har prøvet at fjerne Clear() som du har i din men det virker ikke. Jeg tester lige lidt mere, men hvis du har flere forslag så kom endelig med dem :)
Avatar billede snepnet Nybegynder
01. august 2004 - 23:30 #12
har du prøvet den kode jeg sendte i et projekt, og set om det kører som det skal hos dig ?
Avatar billede nzc Nybegynder
02. august 2004 - 08:52 #13
det kode du sendte virker som det skal :) Jeg prøvede også lige at stoppe en kalender ind i din kode for lige at se om det var den der laver lort ved mig, men det virker oz perfekt med din kode :( så jeg må gøre et eller andet forkert et eller andet sted :(
Avatar billede snepnet Nybegynder
02. august 2004 - 11:27 #14
Ja.... der må være et lille glitch.
kan du lægge projektet online i en zip-fil el.l.... eller er det ikke en mulighed ?
Avatar billede nzc Nybegynder
02. august 2004 - 12:00 #15
(chefen siger) jeg kan kun putte koden til tabellen og aspx'en herind.

<%@ Page language="c#" Codebehind="kalender.aspx.cs" AutoEventWireup="false" Inherits="projekt.kalender" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
    <HEAD>
        <title></title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
       
    </HEAD>
    <body>
        <form id="Form1" runat="server">
            <table class="centertable" height="98%" cellSpacing="0" cellPadding="0" width="800"

align="center"
                border="0">
                <tr vAlign="middle">
                    <td class="tableborderbottom" colSpan="4" height="40">
                        <div class="headline" align="center"> administrationssystem
                        </div>
                    </td>
                </tr>
                <tr vAlign="top">
                    <td class="tableborderright" vAlign="top" width="172"><br>
                        <table cellSpacing="5" cellPadding="0" align="center" border="0">
                            <tr>
                                <td></td>
                            </tr>
                            <tr>
                                <td></td>
                            </tr>
                            <tr>
                                <td></td>
                            </tr>
                            <tr>
                                <td></td>
                            </tr>
                            <tr>
                                <td></td>
                            </tr>
                            <tr>
                                <td></td>
                            </tr>
                            <tr>
                                <td></td>
                            </tr>
                            <tr>
                                <td><asp:calendar id="Calendar1" runat="server"

FirstDayOfWeek="Monday" Width="150px" ShowGridLines="True">
                                        <TodayDayStyle

ForeColor="Red"></TodayDayStyle>
                                    </asp:calendar></td>
                            <tr>
                                <td></td>
                            </tr>
                            <tr>
                                <td></td>
                            </tr>
                            <tr>
                                <td></td>
                            </tr>
                            <tr>
                                <td></td>
                            </tr>
                            <tr>
                                <td></td>
                            </tr>
                            <tr>
                                <td></td>
                            </tr>
                            <tr>
                                <td></td>
                            </tr>
                            <tr>
                                <td></td>
                            </tr>
                            <tr>
                                <td></td>
                            </tr>
                            <tr>
                                <td></td>
                            </tr>
                            <tr>
                                <td></td>
                            </tr>
                            <tr>
                                <td></td>
                            </tr>
                            <tr>
                                <td></td>
                            </tr>
                            <tr>
                                <td></td>
                            </tr>
                            <tr>
                                <td align="center"></td>
                            </tr>
                        </table>
                    </td>
                    <td width="20" rowSpan="2"></td>
                    <td width="584" rowSpan="2"><br>
                        <asp:table id="TableKalender" runat="server" BorderColor="Silver"

GridLines="Both" BorderStyle="Solid"
                            BorderWidth="1px" CellPadding="0" CellSpacing="0"

gridline="Both"></asp:table><br>
                    </td>
                    <td width="20" rowSpan="2">&nbsp;</td>
                </tr>
                <tr vAlign="top">
                    <td class="tableborderright" vAlign="bottom" height="15">
                        <div class="date" align="center"><asp:label id="LabelDate"

runat="server"></asp:label></div>
                    </td>
                </tr>
                <tr vAlign="top">
                    <td class="tablebordertop" align="center" colSpan="4" height="20"></td>
                </tr>
            </table>
        </form>
    </body>
</HTML>



using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;


namespace projekt
{
    /// <summary>
    /// Summary description for kalender.
    /// </summary>
    public class kalender : System.Web.UI.Page
    {
        protected System.Web.UI.WebControls.Label LabelDate;
       
        protected System.Web.UI.WebControls.Table TableKalender;
       
        protected System.Web.UI.WebControls.Calendar Calendar1;
        protected System.Web.UI.HtmlControls.HtmlForm Form1;
   
        private void Page_Load(object sender, System.EventArgs e)
        {
            if (!IsPostBack)
            {
                this.LabelDate.Text = DateTime.Now.ToShortDateString();
                tegnReservationskalender(DateTime.Now);                 
            } 
                       
        }

        #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);
        }
       
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {   
            this.Calendar1.SelectionChanged += new System.EventHandler(this.Calendar1_SelectionChanged);
            this.Load += new System.EventHandler(this.Page_Load);

        }
        #endregion

        private void Calendar1_SelectionChanged(object sender, System.EventArgs e)
        {
            tegnReservationskalender(this.Calendar1.SelectedDate);
        }

        private void tegnReservationskalender(DateTime datoen)
        {
            this.TableKalender.Rows.Clear();
           
            TableRow tr = new TableRow();
            tr.ID = "header";

            //en celle med blankt indhold skal stå først i tabellen.
            TableCell tc = new TableCell();
            tc.Text = "";
            tc.Width = 40;
            tr.Cells.Add(tc);
                           
            ArrayList ansatte = Controller.hentAnsatte(((Ansat)Session["ansat"]).Afdelingid);

            TableHeaderCell thc = null;

            foreach (Ansat a in ansatte)
            {
                thc = new TableHeaderCell();
                thc.Text = a.Fornavn + " " + a.Efternavn;
                thc.Width = 150;
                tr.Cells.Add(thc);
            }
           
            //Den øverste række skal tilføjes tabellen
            TableKalender.Rows.Add(tr);

           
           
            DateTime dt = DateTime.Parse("8:00");         
            int id = 480;
            int sluttiden = 49;
            int interval = 15;
            for (int j = 0; j < sluttiden; j++)
            {                 
               
                tc = new TableCell();
                tr = new TableRow();
               
                tr.ID = id.ToString();
                tc.Text = dt.ToShortTimeString();
                tc.Width = 40;             
                tr.Cells.Add(tc);
                for (int i = 1; i <= ansatte.Count; i++)
                {
                    tc = new TableCell();
                    tc.ID = i.ToString() + "," + j.ToString();
                    tc.Text = "";
                    tr.Cells.AddAt(i,tc);
                }
                dt = dt.AddMinutes(interval);
                id = id + interval;
                TableKalender.Rows.Add(tr);
            }

           
            int start = 480;
           
            int celleindex = 1;
            ArrayList reservationer;
            int sluttid;
           
            foreach (Ansat a in ansatte)
            {
                reservationer = Controller.hentAnsattesReservationer(a.ID, datoen);
                if (reservationer != null)
                {
                    foreach (Reservation r in reservationer)
                    {
                        tc = TableKalender.Rows[((r.Starttid - start) /

interval)].Cells[celleindex];
                       
                        tc.Text = "<a href='side.aspx?reservationsid=" + r.Klient.ID.ToString()

+ "'>" + r.Klient.Fornavn + " " + r.Klient.Efternavn + " " + r.Klient.AntalBehandlinger + "</a>";
                        sluttid = r.Sluttid;                         
                        for (int i = 0; i < sluttid; i = i + interval)
                        {
                            tc = TableKalender.Rows[(((r.Starttid + i) - start) /

interval)].Cells[celleindex];
                           
                            tc.Text = "<a href='side.aspx?klientid=" +

r.Klient.ID.ToString() + "'>" + r.Klient.Fornavn + " " + r.Klient.Efternavn + " " + r.Klient.AntalBehandlinger +

"</a>";
                        }
                    }
                    celleindex++;
                }
            }
        }

       
    }
}
Avatar billede snepnet Nybegynder
02. august 2004 - 18:34 #16
fair nok :o)

duer det stadig ikke ?
Avatar billede nzc Nybegynder
03. august 2004 - 09:26 #17
nope... kun hvis tegnReservationskalender(DateTime.Now); står uden for ispostback, men så bliver metoden kald 2 gange for hver gang man vælger en anden dato på kalenderen...
Avatar billede snepnet Nybegynder
08. august 2004 - 17:09 #18
Hej nzc - undskyld jeg har glemt dig (når de der mails ikke kommer, så smutter det let :o).

Er du stadig igang med det, og har du fået det til at fungere - eller skal vi kigge videre på det ?
Avatar billede nzc Nybegynder
16. august 2004 - 13:53 #19
det kører som det altid har gjort :) jeg har lige haft 2 ugers ferie så det er ikke meget jeg har fået kigget på det. Så hvis det er muligt må du meget gerne så om du kan finde den lille ting der laver underlige ting :) Hvis det er umuligt at finde så kan det også bare gøre ligemeget for i sidste ende får jeg jo vist det jeg vil. Det eneste problem er jo at metoden bliver kald 2 gange hvor den kun skal kaldes 1.

PS ønsk mig da lige tillykke :P Jeg er lige blevet gift og skal være far til februar :D \o/
Avatar billede snepnet Nybegynder
16. august 2004 - 16:01 #20
Jamen tillykke tillykke da - det er da fedt :o)

(Jeg kigger på det her senere i aften).
Avatar billede nzc Nybegynder
25. august 2004 - 21:33 #21
efter lang tids latterlig bøvlen fandt jeg ud af at viewstate er noget lort... jeg satte viewstate til false og nu virker min kalender... jeg har brugt sååååå lang tid på at finde den lille lortefejl :(

kom lige med et svar snepnet... så får du lidt point :)
Avatar billede snepnet Nybegynder
25. august 2004 - 22:27 #22
for meget ... :o)
nå - men bare det bliver fikset ;o)
Avatar billede nzc Nybegynder
25. august 2004 - 22:29 #23
ye - så nu kan jeg komme lidt videre og det er faktisk ret lækkert :)
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