2017-03-28 13 views
0
でテキストボックスを作成

MySQLでの私のテーブルには、このようなものです:テーブルからmutlipleデータを読み、フォーム

MySQL table

私は自分のフォームでのパネルを持っている、と私は、この上の各データのためのテキストボックスを作成したいですそのテキストボックスのテキストにsikicerikデータを書き込みます。 実際に私はそれをしましたが、TextBoxを1つしか作成せず、テーブルの最初のデータのみを選択します。

私のコードは次のようである:

int count = oku.FieldCount; 

reader.Read(); 
{ 
    for (int i = 0; i < count; i++) 
    { 
     TextBox txt1 = new TextBox(); 
     Point txtyer = new Point(x, y); 
     txt1.Text = reader["sikicerik"].ToString(); 
     txt1.Name = i.ToString(); 
     x = x + 25; 
     y = y + 25; 
     panel1.Controls.Add(txt1); 
    } 
} 

それはちょうど1のTextBoxを作成し、その中に "5" を書き込みます。

どうすればいいのですか?

+0

代わりにそれぞれの後に 'while(reader.Read())'は必要ありません。ループ反復、write 'reader.Read()' – amyn

+0

@amynが試したが、同じ問題が残る –

+0

上記の質問を更新されたコードで更新できますか? – amyn

答えて

1

各レコードを調べた後にreader.Read()に電話する必要があることを理解する必要があります。結果のデータセットに5つのレコードがあるとしましょう.1番目のレコードを読み取るには、reader.Read()を呼び出して、リーダーオブジェクトに適切なデータを入力する必要があります。 2番目のレコードを読むには、reader.Read()に再度電話する必要があります。このような何か:

int count = reader.FieldCount; 

for (int i = 0; i < count; i++) 
{ 
    reader.Read(); 
    TextBox txt1 = new TextBox(); 
    Point txtyer = new Point(x, y); 
    txt1.Location = txtyer; 
    txt1.Text = reader["sikicerik"].ToString(); 
    txt1.Name = i.ToString(); 
    y = y + 25; 
    panel1.Controls.Add(txt1); 
} 

あなたはすべてのTextBoxを表示することができないかもしれない理由は、あなたが、xとテキストボックスのy座標の両方を更新しているということです。おそらくあなたがしたいことは、上記のようにy座標をインクリメントするだけで、すべてのTextBoxが垂直に表示されることです。また、テキストボックスが非表示にならないようにフォームのサイズを変更することもできます。

また、前述の@Steve(私が忘れた)のコメントで述べたように、上のコードのように作成された新しいテキストボックスの場所を割り当てる必要があります。

+0

申し訳ありません "int count = reader.FieldCount;" 。しかしまだ私はまだ問題がありません "5"となぜ "7"を繰り返す? http://imgur.com/PZ8V4fw –

+0

上記のコードは機能しましたか? – amyn

+0

いいえと思いますか? :D結果を確認してください –

0

リーダー変数からFieldCountを取得するとします。

ここでは、元のクエリによって取得された各フィールドのテキストボックスを作成して、ループ内でループを実行する必要があります。

最後に、あなたは彼らが他の人の上にそれぞれに作成されるのTextBoxのLocationプロパティを設定しないと、あなただけのループ

// Get the number of fields present in the reader.... 
int count = reader.FieldCount; 

// Read one record at time 
while(reader.Read()) 
{ 
    // Create a textbox for each field in the record 
    for (int i = 0; i < count; i++) 
    { 
     TextBox txt1 = new TextBox(); 

     // Set its location on screen 
     // Probably if you have many fields you need to 
     // use a better algorithm to calculate x,y position 
     txt1.Location = new Point(x, y); 
     txt1.Text = reader[i].ToString(); 
     txt1.Name = i.ToString(); 
     x = x + 25; 
     y = y + 25; 
     panel1.Controls.Add(txt1); 
    } 
} 

で得られた最新の値を持つ最上位の1を参照してください場合フィールドのテキストボックスのみを作成する場合は、sikicerikの2つのオプションがあります。最初のものはお勧め、それはあなたのデータベース上の少ないオーバーヘッドが発生するためには

SELECT sikicerik FROM yourTableName 

に対してリードを構築するために使用するSELECTクエリを変更することで構成されている他のオプションは、あなたのコードに簡単な変更です。 1つのフィールドだけに興味があることを既に知っているので、FieldCountをループする必要はありません。

// Read one record at time 
while(oku.Read()) 
{ 
    textBox1.Text = oku["soru"].ToString(); 
    label1.Text = Form2.sinavno; 

    // Create the single textbox required for the only field required 
    TextBox txt1 = new TextBox(); 

    // Set its location on screen 
    txt1.Location = new Point(x, y); 
    txt1.Text = oku["sikicerik"].ToString(); 
    txt1.Name = i.ToString(); 
    x = x + 25; 
    y = y + 25; 
    panel1.Controls.Add(txt1); 

    // Repeat the loop for each record. 

} 
+0

いいえ、そのすべてのデータを取る。私はちょうど "sikicerik"を取ってテキストボックスに書いてみたい –

+0

次に、取得するフィールドのみを取得するSELECTステートメントを変更します_(SELECT sikicerik FROM yourTableName)_ – Steve

+0

私のSQLコードは長すぎます。テーブル –

関連する問題