実行時にフォームに textBoxes を追加しようとしています。また、これらのボックスにデータを表示したいと考えています。データはデータベースから取得されます。私のコードは機能しますが、最初の行しか表示できません。使用しているループが 1 回しか実行されない理由がわかりません。
そして、誰かが textBoxes がオーバーラップしていると判断する前に、コードを適切にチェックして、それがどのように可能であるかについて論理的な説明をしてくださいY
。i
私は試してみて、すでに30回のように再チェックして、テキストボックスが互いに重なっていないことを確認しました。議論のために textBoxes が互いに重なり合っていると考えたとしても、表示される textBoxes には、私の場合のようにテーブルの最初の行ではなく、最後の行のデータが含まれることに同意する必要があります。暴言を吐いて申し訳ありませんが、明らかに重複していないのに、テキストボックスが重複していると結論付ける人々にうんざりしています。以下は私のコードです。
var 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();
- アップデート:
さて、ループが正しく実行されていないことを確認し、問題の原因となっているコード ブロックを特定しました。誰かがこれを克服する方法について私に提案できますか?
ループ内に存在すると、3 回実行する必要がある場合でも、1 回だけ実行するコードのブロック。
//SQL connection and data read begins
int count =5;
SqlCeConnection conn = new SqlCeConnection();
conn.ConnectionString = connecion; //connection is a string variable which has the connection string details
conn.Open();
SqlCeCommand com = new SqlCeCommand();
com.Connection = conn;
com.CommandType = CommandType.Text;
MessageBox.Show("The value of count just before the loop is " + count.ToString());
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());
}
}
com.Dispose();
conn.Close();
SQL部分を削除すると、ループを3回実行できますが、ループ内にSQL部分があると機能しません。これを克服するために何ができるでしょうか?