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?
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 }