dynamically add multiple textBoxes in the form using C#

Discussion in 'C#' started by rick001, Jan 7, 2013.

  1. rick001

    rick001 New Member

    Joined:
    Jan 7, 2013
    Messages:
    1
    Likes Received:
    0
    Trophy Points:
    0
    Home Page:
    http://www.techbreeze.in
    I am trying to add textBoxes in the form during runtime. I also want to display data in those boxes. The data is fetched from a database. My code works but i am only able to display the first row, can't understand why the loop i am using runs only once.

    And before someone decides that the textBoxes are overlapping, please check the code properly and give me a logical explanation as to how that is possible, when i have clearly incremented the value of
    Code:
    Y
    as a multiple of
    Code:
    i
    I assurre you i have tried, checked rechecked like 30 times already and found out the textBoxes are not overlapping each other. Even if we consider that the textBoxes were overlapping each other for argument sake, you must agree with me that then the textBoxes that are visible would contain data from the last row of the table and not the first as is the case with me.
    Sorry for the rant but i am tired of people concluding that the textBoxes are overlapping when clearly it isnt. Below is my code.
    Code:
    int count=5; // dependent 
    
        //SQL connection and data read begins
        SqlCeConnection conn=new SqlCeConnection();
        conn.ConnectionString=connection; //connection is a string variable which has the connection string details
        conn.Open();
        SqlCeCommand com=new SqlCeCommand();
        com.Connection=conn;
        com.CommandType=CommandType.Text;
    
        for(int i=3; i<=count; i++) {
            com.CommandText="SELECT pname, cname, budget, advance, ddate FROM data WHERE (ID = @id)";
            com.Parameters.AddWithValue("@id", i);
            com.ExecuteNonQuery();
            SqlCeDataReader rd=com.ExecuteReader();
    
            while(rd.Read()) {
                pname=(rd["pname"].ToString());
                cname=(rd["cname"].ToString());
                budget=(rd["budget"].ToString());
                advance=(rd["advance"].ToString());
                ddate=(rd["ddate"].ToString());
            }
    
            TextBox tobj=new TextBox();
            tobj.Location=new Point(10, (40+((i-2)*20)));
            tobj.Tag=1;
            tobj.Text=pname;
            tobj.AutoSize=false;
            tobj.Width=150;
            tobj.ReadOnly=true;
            this.Controls.Add(tobj);
    
            TextBox tobj1=new TextBox();
            tobj1.Location=new Point(160, (40+((i-2)*20)));
            tobj1.Tag=2;
            tobj1.Text=cname;
            tobj1.AutoSize=false;
            tobj1.Width=150;
            tobj1.ReadOnly=true;
            this.Controls.Add(tobj1);
    
            TextBox tobj2=new TextBox();
            tobj2.Location=new Point(310, (40+((i-2)*20)));
            tobj2.Tag=3;
            tobj2.Text=budget;
            tobj2.AutoSize=false;
            tobj2.Width=100;
            tobj2.ReadOnly=true;
            this.Controls.Add(tobj2);
    
            TextBox tobj3=new TextBox();
            tobj3.Location=new Point(410, (40+((i-2)*20)));
            tobj3.Tag=4;
            tobj3.Text=advance;
            tobj3.AutoSize=false;
            tobj3.Width=100;
            tobj3.ReadOnly=true;
            this.Controls.Add(tobj3);
    
            TextBox tobj4=new TextBox();
            tobj4.Location=new Point(510, (40+((i-2)*20)));
            tobj4.Tag=5;
            tobj4.Text=ddate;
            tobj4.AutoSize=false;
            tobj4.Width=100;
            tobj4.ReadOnly=true;
            this.Controls.Add(tobj4);
        }
    
        com.Dispose();
        conn.Close();
    I did some debugging and have found out that when i have the sql stuff inside the for loop like this

    Code:
     
    for (int i = 3; i <= count; i++)
                    {
    
                        com.CommandText = "SELECT pname, cname, budget, advance, ddate FROM data WHERE (ID = @id)";
                        com.Parameters.AddWithValue("@id", i);
                        com.ExecuteNonQuery();
                        SqlCeDataReader rd = com.ExecuteReader();
                        while (rd.Read())
                        {
                            pname = (rd["pname"].ToString());
                            cname = (rd["cname"].ToString());
                            budget = (rd["budget"].ToString());
                            advance = (rd["advance"].ToString());
                            ddate = (rd["ddate"].ToString());
                        }
                    }
    the for loop runs only once. However removing those lines is making the for loop run as intended.
    Any ideas? what am i doing wrong?
     
  2. pein87

    pein87 Active Member

    Joined:
    Aug 6, 2010
    Messages:
    173
    Likes Received:
    47
    Trophy Points:
    28
    Occupation:
    Web Dev
    Location:
    Limbo
    Code:
     for(int i=3; i<=count; i++)
    i is equal to 3 and it will only run until i is less than or equal to 5(the value of count). That is why it only runs twice. If your intending on it running 5 times you need to use a loop like so

    Code:
    int i, count = 5;
    
    for(i = 0; i < count; i++)
    {
    // loop runs 5 times from 0 to 4 other code is ran here
    
    }
     

Share This Page

  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice