Avatar billede idiotbarn Nybegynder
10. november 2005 - 17:22 Der er 9 kommentarer og
2 løsninger

2 user control m. databind Repeater og Datagrid forsvinder

Jeg har lavet to user control's hvor den ene indeholder et datagrid og den anden indeholder en repeater. I begge tilfælde har controllen et eller to tekstfelter hvor man kan tilføje noget til en database og derefter hente det ud igen.

Begge controller virker fint hver for sig, men sammen forsvinder både Datagrid og Repeater så snart man trykker på en knap (Datagrid: edit/delete, Repeater: Delete(fra asp:Button))

Jeg har prøvet at sætte et breakpoint ind på datagrid'ets EDIT, men den bliver slet ikke kaldt, de to ting forsvinder bare.

Jeg vil gå ud fra det er noget med mine databinds, men ved ikke hvad. Ud over det ikke virker bør det også laves på en smartere måde, da jeg laver massere database åben/Luk, men først bare virke.

Jeg er sikker på der ikke er nogen med samme Id i de to controlls
Jeg har min ene controls cs fil:


    public class LinkBlock : System.Web.UI.UserControl
    {
        protected System.Web.UI.WebControls.TextBox LinkBlockTextBox1;
        protected System.Web.UI.WebControls.TextBox LinkBlockTextBox2;
        protected System.Web.UI.WebControls.Button LinkBlockButton1;
        protected System.Web.UI.WebControls.Label LinkBlockLabel1;
        protected System.Web.UI.WebControls.Label LinkBlockLabel2;
        protected System.Web.UI.WebControls.Label LinkBlokValidUrl;
        protected System.Web.UI.WebControls.DataGrid LinkBlokHomepageGrid;

        IS.DatabaseConnection.DBConn DB = new IS.DatabaseConnection.DBConn("Admin");
        System.Collections.ArrayList AL = new System.Collections.ArrayList();
        String _ArtistId="";
        int rows=0;
        public String Text1
        {
            set
            {
                LinkBlockLabel1.Text = value;
            }
        }

        public String ArtistId
        {
            set
            {
                _ArtistId = value;
            }
        }

        public String Text2
        {
            set
            {
                LinkBlockLabel2.Text = value;
            }
        }
        #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.LinkBlockButton1.Click += new System.EventHandler(this.LinkBlockButton1_Click);
            this.Load += new System.EventHandler(this.Page_Load);

        }
        #endregion
        private String CleanUp(String s)
        {
            s=s.Replace("'","''");
            s=s.Replace("<","&lt;");
            return s;
        }
       
        public String DoBreak(String s)
        {
            if(s.Length>0)
                return s+"<br>";
            return "";
        }
        private void LinkBlockButton1_Click(object sender, System.EventArgs e)
        {
            LinkBlokValidUrl.Visible=false;
            if(LinkBlockTextBox2.Text.Trim().Length>0)
            {
                String URL = this.LinkBlockTextBox2.Text.ToLower();
                if(URL.Length>3 && URL.Substring(0,3).Equals("www"))
                    URL="http://"+URL;
                //Sorter posterne i databasen og sæt dem i orden:
                String getPost = "Select Id,Priority from ArtistHomepages where ArtistId="+_ArtistId.ToString();
                System.Collections.Hashtable HT = new System.Collections.Hashtable();
                System.Collections.ArrayList ALId = new System.Collections.ArrayList();
                DB.makeConn();
                MySql.Data.MySqlClient.MySqlCommand CM = DB.getCommand(getPost);
                MySql.Data.MySqlClient.MySqlDataReader DR = CM.ExecuteReader();
                while(DR.Read())
                {
                    ALId.Add(int.Parse(DR["Priority"].ToString()));
                    HT.Add(int.Parse(DR["Priority"].ToString()),int.Parse(DR["Id"].ToString()));
                }
                DR.Close();
                DB.closeConn();

                ALId.Sort();
                String updPrio = "";
                System.Collections.ArrayList AL = new System.Collections.ArrayList();
                String Ins = "insert into ArtistHomepages (ArtistId,Text,URL,Priority) Values(?ArtistId,?Text,?URL,?Priority)";
                String[] Parameter = new String[]{"?ArtistId","?Text","?URL","?Priority"};
                AL.Clear();
                AL.Add(_ArtistId);
                AL.Add(CleanUp(LinkBlockTextBox1.Text));
                AL.Add(URL);
                AL.Add(1);
                DB.makeConn();

                if(DB.insertUpdate(Ins,Parameter,AL))
                {
                    for(int i = 0;i<ALId.Count;i++)
                    {
                        updPrio = "Update ArtistHomepages SET Priority="+(i+2)+" where Id="+HT[int.Parse(ALId[i].ToString())];
                        DB.insertUpdate(updPrio);
                    }
                }
                else
                {
                    //Response.Write(DB.getLastError());
                }
               
                DB.closeConn();
                BindData();
               
            }
            else
            {
                LinkBlokValidUrl.Visible=true;
            }
        }

       

        public void BindData()
        {
            DB.makeConn();
            Response.Write("LINK ERROR: "+DB.getLastError()+"<hr>");
            String Selector="Select Id, Text, URL, Priority from ArtistHomepages where ArtistId="+_ArtistId+" Order by Priority";
            LinkBlokHomepageGrid.DataSource = DB.getDataset(Selector);
            LinkBlokHomepageGrid.DataBind();
            DB.closeConn();
        }

        public void sort(String upDown,DataGridCommandEventArgs e)
        {
            int uD = 1;
            if (upDown.Equals("op"))
            {
                uD = -1;
            }

            int currentId = int.Parse(LinkBlokHomepageGrid.DataKeys[(int)e.Item.ItemIndex].ToString());
            int nextId = int.Parse(LinkBlokHomepageGrid.DataKeys[(int)e.Item.ItemIndex+uD].ToString());

            String Update = "UPDATE ArtistHomepages SET Priority=?Priority where Id=?Id";
            String current = "Select Priority from ArtistHomepages where Id=" + currentId;
            String next = "Select Priority from ArtistHomepages where Id=" + nextId;

            String[] p = new String[]{"?Priority","?Id"};

            //opdater værdier størrere end Priorityen
            DB.makeConn();
            int currentPriority = int.Parse(DB.getSingleValue(current));
            int nextPriority = int.Parse(DB.getSingleValue(next));

            AL.Clear();
            AL.Add(currentPriority);
            AL.Add(nextId);
            DB.insertUpdate(Update, p, AL);

            AL.Clear();
            AL.Add(nextPriority);
            AL.Add(currentId);
            DB.insertUpdate(Update, p, AL);
            DB.closeConn();
            BindData();
           
        }

        public void LinkBlokHomepageGrid_OnItemDataBound(object sender, DataGridItemEventArgs e)
        {
            //Hides ID column (http://eksperten.dk/spm/534513)
            e.Item.Cells[0].Text="<div class=\"LinkBlockSpacer\">"+rows.ToString()+".</div>";
            rows++;

            //Comfirm box:
            if(e.Item.FindControl("Delete") != null)
            {
                ((Button) e.Item.FindControl("Delete")).Attributes.Add("onClick", "return confirm('Delete this item');");

            }
        }

        public void LinkBlokHomepageGrid_Edit(Object sender, DataGridCommandEventArgs e)
        {
            LinkBlokHomepageGrid.EditItemIndex = (int)e.Item.ItemIndex;
            BindData();   
        }

        public void LinkBlokHomepageGrid_Update(Object sender, DataGridCommandEventArgs e)
        {
            String TextValue = ((System.Web.UI.WebControls.TextBox)e.Item.FindControl("Edit1")).Text;
            String URLValue = ((System.Web.UI.WebControls.TextBox)e.Item.FindControl("Edit2")).Text;
            if(URLValue.Trim().Length!=0)
            {
                String Update = "UPDATE ArtistHomepages SET Text=?Text,URL=?URL where Id=?Id";
                String[] p = new String[]{"?Text","?URL","?Id"};
                AL.Clear();

                AL.Add(TextValue);
                AL.Add(URLValue);
                AL.Add(LinkBlokHomepageGrid.DataKeys[(int)e.Item.ItemIndex]);

                DB.makeConn();
                DB.insertUpdate(Update,p,AL);
                Response.Write(DB.getLastError());
                DB.closeConn();

                LinkBlokHomepageGrid.EditItemIndex = -1;
            }
            BindData();
        }

        public void LinkBlokHomepageGrid_Cancel(Object sender, DataGridCommandEventArgs e)
        {
            LinkBlokHomepageGrid.EditItemIndex = -1;
            DB.makeConn();
            DB.closeConn();
            BindData();
        }

        public void LinkBlokHomepageGrid_Delete(Object sender, DataGridCommandEventArgs e)
        {
            String Delete = "Delete from ArtistHomepages where Id=?Id";
            String[] par = new String[]{"?Id"};
            AL.Clear();
            AL.Add(LinkBlokHomepageGrid.DataKeys[(int)e.Item.ItemIndex]);
            DB.makeConn();
            DB.insertUpdate(Delete,par,AL);
            //Response.Write(DB.getLastError());
            DB.closeConn();
            BindData();
           
        }

        public void Page_Load(object sender, System.EventArgs e)
        {
            if(!Page.IsPostBack)
            {
                BindData();
            }
        }
        private string Truncate(string input, int characterLimit)
        {
            string output = input;
            if (output.Length > characterLimit && characterLimit > 0)
            {
                output = output.Substring(0,characterLimit);
                if (input.Substring(output.Length,1) != " ")
                {
                    int LastSpace = output.LastIndexOf(" ");

                    // if we found a space then, cut back to that space
                    if (LastSpace != -1)
                    {
                        output = output.Substring(0,LastSpace);
                    }

                }
                output += "...";
            }
            return output;
        }
        public void LinkBlokHomepageGrid_Command(Object sender, DataGridCommandEventArgs e)
        {
            String choose=e.CommandName.ToString();

            switch (choose)
            {
                case "op":
                    try
                    {
                        int tmp = int.Parse(LinkBlokHomepageGrid.DataKeys[(int)e.Item.ItemIndex - 1].ToString());
                        sort("op",e);
                    }
                    catch (ArgumentOutOfRangeException ex)
                    {
                    }
                    break;

                case "ned":
                    try
                    {
                        int tmp = int.Parse(LinkBlokHomepageGrid.DataKeys[(int)e.Item.ItemIndex + 1].ToString());
                        sort("ned",e);
                    }
                    catch (ArgumentOutOfRangeException ex)
                    {
                    }
                    break;

                default:
                    break;
            }
        }

    }


Håber der er nogen der har en ide.
Avatar billede idiotbarn Nybegynder
10. november 2005 - 17:23 #1
Beklager alt koden, troede ikke den fyldte SÅ meget
Avatar billede dr_chaos Nybegynder
10. november 2005 - 19:05 #2
hvordan ser den side ud med de 2 usercontrols på ?
Avatar billede idiotbarn Nybegynder
10. november 2005 - 19:08 #3
<div id="ContentHolder">
                <div id="BannerDiv"></div>
                    <!--Block 2-->
                    <ACME:TopBlock id="Topblock2" runat="server" Title="Artist Picture(s)" BlockNum="Block2"></ACME:TopBlock>
                    <div id="Block2" style="Display:block;">
                        <ACME:LinkBlock id="LinkBlockControl" runat="server" Text1="Shown Text:" Text2="URL:" ArtistId="1"></ACME:LinkBlock>
                    </div>
                   
                   
                    <!--Block 3-->
                    <ACME:TopBlock id="TopBlock3" runat="server" Title="Artist Link(s)" BlockNum="Block3"></ACME:TopBlock>
                    <div id="Block3" style="Display:block;">
                        <ACME:ArtistPictureBlock id="ArtistPicControl" runat="server" Text="File Path:" ArtistId="1"></ACME:ArtistPictureBlock>
                    </div>
                   
                   
            </div>
Avatar billede idiotbarn Nybegynder
10. november 2005 - 19:09 #4
(TopBlock) er bare en usercontroll der indeholder graffik...Skal du bruge mere af siden?
Avatar billede idiotbarn Nybegynder
10. november 2005 - 23:25 #5
Doh...føler mig helt dum. Det var en Page.DataBind(); Jeg ikke havde fået tæmmet ordentligt...

Men kan du så svare mig på...hvis jeg i den ene usercontrol har fx en update metode, der efter at ha opdateret databasen kalder en BindData til gridded. Er det så KUN dét grid der bliver bundet data til igen, eller er deet alle? Det er kun dét ene ik?
Avatar billede dr_chaos Nybegynder
11. november 2005 - 06:20 #6
ja du kalder kun databind på det ene grid.
Men alle tinger ryger en tur over serveren og tilbage igen da hele siden poster back.
Avatar billede idiotbarn Nybegynder
11. november 2005 - 12:28 #7
Ja...men det kan man vel ikke undgå? Jeg overvejede noget med at cache dataen, og kun opdatere det ene grid, det vil vel preforme bedre?
Avatar billede dr_chaos Nybegynder
11. november 2005 - 12:30 #8
Du kan prøve at sætte smartnavigation til true i toppen af siden.
Det cacher det meste af siden.
Du kan læse mere om smartnavigation her:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfSystemWebUIPageClassSmartNavigationTopic.asp
Avatar billede idiotbarn Nybegynder
16. november 2005 - 14:13 #9
ok...takker. Ligger du et svar så deler vi?
Avatar billede dr_chaos Nybegynder
16. november 2005 - 14:14 #10
kan jeg godt :)
Avatar billede idiotbarn Nybegynder
16. november 2005 - 14:17 #11
half n half
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