Avatar billede testpilot_dk Nybegynder
15. december 2005 - 10:14 Der er 10 kommentarer og
1 løsning

Mine Controls forsvinder ved klik på en knap

Hej!

Jeg har tilføjet nogle controls dynamisk til en hjemmeside!

Samt en knap, når man klikker på knappen og jeg forsøger at finde de eksisterende controls er de væk

Jeg benytter FindControls()

                for(int i = 0; i < 5; i++)
                {

                    System.Web.UI.WebControls.TableRow row;
                    System.Web.UI.WebControls.TableCell cell;
                    row = new TableRow();
                    cell = new TableCell();
                    cell.Width = 70;
                    cell.Text = "test";
                    row.Cells.Add(cell);
                    cell = new TableCell();
                    cell.Width = 100;
                    HtmlInputText box = new HtmlInputText();
                    box.ID = "Temp_" + i.ToString();
                    cell.Controls.Add(box);
                    row.Cells.Add(cell);
                    this.Table1.Rows.Add(row);
                    i++;
                }

og forsøger at finde den ene med

  HtmlInputText h = (HtmlInputText)this.FindControl("Temp_0");
Avatar billede testpilot_dk Nybegynder
15. december 2005 - 11:13 #1
jeg har fat i min tabel nu og kan sagtens finde mine controls på følgende måde, men de er bare tomme!

Hvornår skal jeg lægge dem i en session så jeg undgår de bliver tomme

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 TestAfTabeller
{
    /// <summary>
    /// Summary description for WebForm1.
    /// </summary>
    public class WebForm1 : System.Web.UI.Page
    {
        protected System.Web.UI.WebControls.Button Button1;
        protected System.Web.UI.WebControls.Table Table1;

        protected static bool first = false;
   
        private void Page_Load(object sender, System.EventArgs e)
        {
            if(IsPostBack && first)
                this.Table1 = (Table)Session["Table"];
        }


        #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.Button1.Click += new System.EventHandler(this.Button1_Click);
            this.Load += new System.EventHandler(this.Page_Load);

        }
        #endregion

        private void Button1_Click(object sender, System.EventArgs e)
        {
            if(!first)
            {
                for(int i = 0; i < 5; i++)
                {

                    System.Web.UI.WebControls.TableRow row;
                    System.Web.UI.WebControls.TableCell cell;
                    row = new TableRow();
                    cell = new TableCell();
                    cell.Width = 70;
                    cell.Text = "test";
                    row.Cells.Add(cell);
                    cell = new TableCell();
                    cell.Width = 100;
                    HtmlInputText box = new HtmlInputText();
                    box.ID = "Temp_" + i.ToString();
                    cell.Controls.Add(box);
                    row.Cells.Add(cell);
                    this.Table1.Rows.Add(row);
                    i++;
                }
                Button InsertCopy = Button1;
                InsertCopy.Text = "Tilføj til Database";
                Session["Table"] = this.Table1;
                first = true;
            }
            else
            {
                System.Diagnostics.Debug.WriteLine("TEST");
                foreach(System.Web.UI.WebControls.TableRow r in this.Table1.Rows)
                {
                    foreach(System.Web.UI.WebControls.TableCell c in r.Cells)
                    {
                        if(c.Controls.Count != 0)
                        {
                            HtmlInputText h = (HtmlInputText)c.Controls[0];
                            if(h != null)
                                System.Diagnostics.Debug.WriteLine("TEST");
                        }
                    }
                }
                first = false;
            }
        }
    }
}
Avatar billede testpilot_dk Nybegynder
15. december 2005 - 12:43 #2
er der ikke nogen som kan hjælpe mig ???
Avatar billede snepnet Nybegynder
15. december 2005 - 22:36 #3
hej igen :o)

jeg mener vi skrev om det tidligere.... jeg synes ikke du skal lægge din tabel i session - men derimod det data du ønsker tabellen skal renderes udfra, men pyt nu med det.

prøv at skifte :

foreach(System.Web.UI.WebControls.TableCell c in r.Cells)
{
  if(c.Controls.Count != 0)
  {
    HtmlInputText h = (HtmlInputText)c.Controls[0];
    if(h != null)
      System.Diagnostics.Debug.WriteLine("TEST");
  }
}

ud med:

HtmlInputText h = r.Cells[1].Controls[0] as HtmlInputText;
if(h != null)
{
  System.Diagnostics.Debug.WriteLine(h.Text);
}

mvhA
Avatar billede testpilot_dk Nybegynder
16. december 2005 - 10:36 #4
aha! nu er jeg med!

Jeg har brugt de sidste par dage til at svede over Datagrids og muligvis kan jeg klarer det på den måde!

Har benyttet denne side

http://samples.gotdotnet.com/quickstart/aspplus/samples/webforms/ctrlref/webctrl/datagrid/doc_datagrid.aspx

Men send du et svar, så skal jeg nok give dig point og lade værer med at tænke på at smide tabeller i sessions
Avatar billede testpilot_dk Nybegynder
16. december 2005 - 10:51 #5
men jeg har bare ingen anelse om hvordan jeg får mit grid til at se ud som exempel 13

http://samples.gotdotnet.com/quickstart/aspplus/samples/webforms/ctrlref/webctrl/datagrid/VB/datagrid13.aspx
Avatar billede snepnet Nybegynder
16. december 2005 - 11:13 #6
det er ganske snildt at arbejde med griddets præsentation.... hvis du bruger vs kan du højreklikke på griddet og vælge autoformat (tror jeg punktet hedder). der kan du vælge forskellige looks.
det er ikke sikkert du lige finder et der passer - men du kan i hvert fald se hvordan man manipulerer looket.
mvh
Avatar billede testpilot_dk Nybegynder
16. december 2005 - 11:15 #7
Hej! nyt spørgsmål!

Jeg sidder og leger med det, men nå¨r jeg nu gerne vil have textboxe i mit grid, hvordan undlader jeg så at griddet præsenetere data to gange.


aspx ----------------------------------------------------------------------------

<%@ Page language="c#" Codebehind="Editerbar.aspx.cs" AutoEventWireup="false" Inherits="TestAfTabeller.Editerbar" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
    <HEAD>
        <title>Editerbar</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 MS_POSITIONING="GridLayout">
        <form id="Form1" method="post" runat="server">
            <asp:DataGrid id="grid" style="Z-INDEX: 101; LEFT: 64px; POSITION: absolute; TOP: 32px" runat="server"
                BackColor="White" ForeColor="Black" BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px"
                CellPadding="3" GridLines="Vertical">
                <FooterStyle BackColor="#CCCCCC"></FooterStyle>
                <SelectedItemStyle Font-Bold="True" ForeColor="White" BackColor="#000099"></SelectedItemStyle>
                <AlternatingItemStyle BackColor="#CCCCCC"></AlternatingItemStyle>
                <HeaderStyle Font-Bold="True" ForeColor="White" BackColor="Black"></HeaderStyle>
                <Columns>
                    <asp:TemplateColumn HeaderText="T">
                        <ItemTemplate>
                            <asp:TextBox id=txtQty runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.T") %>' Width="40px">
                            </asp:TextBox>
                        </ItemTemplate>
                    </asp:TemplateColumn>
                    <asp:TemplateColumn HeaderText="S">
                        <ItemTemplate>
                            <asp:TextBox id=txtS Runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.S") %>' Width="40px">
                            </asp:TextBox>
                        </ItemTemplate>
                    </asp:TemplateColumn>
                </Columns>
                <PagerStyle HorizontalAlign="Center" ForeColor="Black" BackColor="#999999"></PagerStyle>
            </asp:DataGrid>
            <asp:Button id="Button1" style="Z-INDEX: 102; LEFT: 368px; POSITION: absolute; TOP: 104px" runat="server"
                Text="Button"></asp:Button>
            <asp:Button id="Button2" style="Z-INDEX: 103; LEFT: 368px; POSITION: absolute; TOP: 144px" runat="server"
                Text="Indsæt i tabellen"></asp:Button>
        </form>
    </body>
</HTML>


C#  ------------------------------------------------------------------------------

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 TestAfTabeller
{
    /// <summary>
    /// Summary description for CreateTable.
    /// </summary>
    public class CreateTable : System.Web.UI.Page
    {
        protected System.Web.UI.WebControls.TextBox tablename;
        protected System.Web.UI.WebControls.Label Label1;
        protected System.Web.UI.WebControls.CheckBox allversions;
        protected System.Web.UI.WebControls.DropDownList versions;
        protected System.Web.UI.WebControls.Button OpretTabel;
        protected System.Web.UI.WebControls.Button addfields;
        protected System.Web.UI.WebControls.TextBox fieldname;
        protected System.Web.UI.WebControls.TextBox lenght;
        protected System.Web.UI.WebControls.CheckBox primarykey;
        protected System.Web.UI.WebControls.CheckBox ForeignKey;
        protected System.Web.UI.WebControls.Label Label2;
        protected System.Web.UI.WebControls.Label Label3;
        protected System.Web.UI.WebControls.Label Label4;
        protected System.Web.UI.WebControls.Label Label5;
        protected System.Web.UI.WebControls.DataGrid grid;

        private static ArrayList arl = new ArrayList();
        private static int counter = 0;
   
        private void Page_Load(object sender, System.EventArgs e)
        {
            if(!IsPostBack)
            {
                this.grid.DataSource = GetData();
                this.grid.DataBind();
            }
        }

        #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.OpretTabel.Click += new System.EventHandler(this.OpretTabel_Click);
            this.addfields.Click += new System.EventHandler(this.addfields_Click);
            this.grid.CancelCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.grid_CancelCommand);
            this.grid.EditCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.grid_EditCommand);
            this.grid.UpdateCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.grid_UpdateCommand);
            this.grid.DeleteCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.grid_DeleteCommand);
            this.Load += new System.EventHandler(this.Page_Load);

        }
        #endregion

        public void BindGrid()
        {
            this.grid.DataSource = GetData();
            this.grid.DataBind();
        }

        public ArrayList GetData()
        {
            return arl;
        }

        private void grid_CancelCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
        {
            this.grid.EditItemIndex = -1;
            BindGrid();
        }

        private void grid_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
        {
            int rowToDelete = e.Item.ItemIndex;

            HoldInfoAtFields h2 = null;
            foreach (HoldInfoAtFields h in arl)
            {
                if(h.ID == rowToDelete)
                {
                    h2 = h;
                    break;
                }
            }
            arl.Remove(h2);
            BindGrid();
        }

        private void grid_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
        {
            this.grid.EditItemIndex = (int)e.Item.ItemIndex;
            BindGrid();
        }

        private void grid_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
        {
            string id = e.Item.Cells[3].Text;
            string name = ((TextBox)e.Item.Cells[7].Controls[0]).Text;
            string length = ((TextBox)e.Item.Cells[4].Controls[0]).Text;
            bool pk = Convert.ToBoolean(((TextBox)e.Item.Cells[5].Controls[0]).Text);
            bool fk = Convert.ToBoolean(((TextBox)e.Item.Cells[6].Controls[0]).Text);

            foreach (HoldInfoAtFields h in arl)
            {
                if(h.ID == Convert.ToInt32(id))
                {
                    h.FieldName = name;
                    h.Lenght = length;
                    h.PrimaryKey = pk;
                    h.ForeignKey = fk;
                    break;
                }
            }

            this.grid.EditItemIndex = -1;
            BindGrid();
        }

        private void addfields_Click(object sender, System.EventArgs e)
        {
            bool pTmp = false;
            bool fTmp = false;

            if(this.primarykey.Checked)
                pTmp = true;
            if(this.ForeignKey.Checked)
                fTmp = true;
            HoldInfoAtFields haf = new HoldInfoAtFields(counter++, this.fieldname.Text, this.lenght.Text, pTmp, fTmp);
            arl.Add(haf);
            BindGrid();
        }

        private void OpretTabel_Click(object sender, System.EventArgs e)
        {
           
        }
    }

    public class HoldInfoAtFields
    {
        private string _name = "";
        private string _lenght = "";
        private bool _p = false;
        private bool _f = false;
        private int _id = 0;

        public HoldInfoAtFields(int id, string name, string lenght, bool p, bool f)
        {
            _id = id;
            _name = name;
            _lenght = lenght;
            _p = p;
            _f = f;
        }

        public string FieldName
        {
            get{return _name;}
            set{_name = value;}
        }
        public string Lenght
        {
            get{return _lenght;}
            set{_lenght = value;}
        }
        public bool PrimaryKey
        {
            get{return _p;}
            set{_p = value;}
        }
        public bool ForeignKey
        {
            get{return _f;}
            set{_f = value;}
        }
        public int ID
        {
            get{return _id;}
            set{_id = value;}
        }
    }
}
Avatar billede testpilot_dk Nybegynder
16. december 2005 - 11:16 #8
nu præsentere den både S og T to gange, det vil jeg gerne undgå og kun have den præsenteret en gang
Avatar billede snepnet Nybegynder
16. december 2005 - 11:23 #9
du sætter AutoGenerateColumns="false" på selve griddet.
mvh
Avatar billede testpilot_dk Nybegynder
16. december 2005 - 11:29 #10
takker, så virker det jo snart fornuftigt
Avatar billede snepnet Nybegynder
16. december 2005 - 11:30 #11
:o)
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