2016-09-22 12 views
-1

私の一意のテキストボックスIDに問題があります。 私のコードは、データベースの各船に4つのテキストボックスを持つdivを作成しています。 作成された各テキストボックスには一意のIDが必要です。 私はインクリメントint(int i = 0とi ++)でこれを行いますが、動作させることはできません。ここに私のコードです!インクリメントintを使って追加

while (oReader.Read()); 
{ 
    int i = 0; 
    System.Web.UI.HtmlControls.HtmlGenericControl createDiv = 
    new System.Web.UI.HtmlControls.HtmlGenericControl("DIV"); 
    createDiv.ID = "createDiv"; 
    this.Controls.Add(createDiv); 
    List<TextBox> tb_names = new List<TextBox>(); 
    TextBox tb_name = new TextBox(); 

    //TextBox tb_name = new TextBox(); 
    tb_name.ID = "CreateT_" + i.ToString() + "_1"; 
    tb_name.Text = oReader["SchipNaam"].ToString(); 
    createDiv.Controls.Add(new LiteralControl 
    ("<div class='form-group'><div class='clearfix' ></div><div class='row'><div class='col-md-3'></div><div class='col-md-3'> Scheepspnaam: <input type='text' id='" + tb_name.ID + "' runat='server'/></div></div></div>")); 
    tb_names.Add(tb_name); 

    //TextBox tb_name1 = new TextBox(); 
    tb_name.ID = "CreateT_" + i.ToString() + "_1"; 
    tb_name.Text = oReader["RederijNr"].ToString(); 
    createDiv.Controls.Add(new LiteralControl 
    ("<div class='form-group'><div class='clearfix' ></div><div class='row'><div class='col-md-3'></div><div class='col-md-3'> RederijNr:<input type='text' id='" + tb_name.ID + "' runat='server'/></div></div></div>")); 
    tb_names.Add(tb_name); 

    //TextBox tb_name2 = new TextBox(); 
    tb_name.ID = "CreateT_" + i.ToString() + "_1"; 
    tb_name.Text = oReader["Lengte"].ToString(); 
    createDiv.Controls.Add(new LiteralControl 
    ("<div class='form-group'><div class='clearfix' ></div><div class='row'><div class='col-md-3'></div><div class='col-md-3'> Lengte :<input type='text' id='" + tb_name.ID + "' runat='server'/></div></div></div>")); 
    tb_names.Add(tb_name); 

    //TextBox tb_name3 = new TextBox(); 
    tb_name.ID = "CreateT_" + i.ToString() + "_1"; 
    tb_name.Text = oReader["Laadvermogen"].ToString(); 
    createDiv.Controls.Add(new LiteralControl 
    ("<div class='form-group'><div class='clearfix' ></div><div class='row'><div class='col-md-3'></div><div class='col-md-3'> Laadvermogen:<input type='text' id='" + tb_name.ID + "' runat='server'/></div></div></div>")); 
    tb_names.Add(tb_name); 
    i++; 
} 

私の出力は常にCreateT_0_1です。私は間違って何をしていますか?私はそれが前に働いたと思ったが、問題を見つけるように見えない。

私が間違っていることを皆さんに見ていただきたいと思います。

ありがとうございます!

+1

'while'ループの繰り返しごとに' i'をリセットすると、常に '_1'の後にサフィックスが付きますか? –

+4

最初の行の末尾に余分なセミコロンが付いていると、おそらく助けにならないでしょう... –

答えて

0

各ループの先頭に値0のiを作成します。ループの前に整数を初期化し、それをループ内で更新します。そうでなければ、各反復で0にリセットされます。

whileループ内に3つのテキストボックスを追加していますが、whileループの最後にはiを増やすだけです。接尾辞は常に_1なので接尾辞を変更するか、各テキストボックスの間にi ++を使用して識別子を一意にする必要があります。

上記のコメントでJon Skeetが述べたように、whileの開始行のセミコロンは必要ありません。

int i = 0; 
while (oReader.Read()) 
{ 
    System.Web.UI.HtmlControls.HtmlGenericControl createDiv = 
    new System.Web.UI.HtmlControls.HtmlGenericControl("DIV"); 
    createDiv.ID = "createDiv"; 
    this.Controls.Add(createDiv); 
    List<TextBox> tb_names = new List<TextBox>(); 
    TextBox tb_name = new TextBox(); 

    //TextBox tb_name = new TextBox(); 
    tb_name.ID = "CreateT_" + i.ToString(); 
    tb_name.Text = oReader["SchipNaam"].ToString(); 
    createDiv.Controls.Add(new LiteralControl 
    ("<div class='form-group'><div class='clearfix' ></div><div class='row'><div class='col-md-3'></div><div class='col-md-3'> Scheepspnaam: <input type='text' id='" + tb_name.ID + "' runat='server'/></div></div></div>")); 
    tb_names.Add(tb_name); 

    //TextBox tb_name1 = new TextBox(); 
    tb_name.ID = "CreateT_" + i.ToString() + "_1"; 
    tb_name.Text = oReader["RederijNr"].ToString(); 
    createDiv.Controls.Add(new LiteralControl 
    ("<div class='form-group'><div class='clearfix' ></div><div class='row'><div class='col-md-3'></div><div class='col-md-3'> RederijNr:<input type='text' id='" + tb_name.ID + "' runat='server'/></div></div></div>")); 
    tb_names.Add(tb_name); 

    //TextBox tb_name2 = new TextBox(); 
    tb_name.ID = "CreateT_" + i.ToString() + "_2"; 
    tb_name.Text = oReader["Lengte"].ToString(); 
    createDiv.Controls.Add(new LiteralControl 
    ("<div class='form-group'><div class='clearfix' ></div><div class='row'><div class='col-md-3'></div><div class='col-md-3'> Lengte :<input type='text' id='" + tb_name.ID + "' runat='server'/></div></div></div>")); 
    tb_names.Add(tb_name); 

    //TextBox tb_name3 = new TextBox(); 
    tb_name.ID = "CreateT_" + i.ToString() + "_3"; 
    tb_name.Text = oReader["Laadvermogen"].ToString(); 
    createDiv.Controls.Add(new LiteralControl 
    ("<div class='form-group'><div class='clearfix' ></div><div class='row'><div class='col-md-3'></div><div class='col-md-3'> Laadvermogen:<input type='text' id='" + tb_name.ID + "' runat='server'/></div></div></div>")); 
    tb_names.Add(tb_name); 
    i++; 
} 
+0

ありがとうございました。今はうまくいきます。 –

0

あなたは1と固定回線 tb_name.ID = "CreateT_"(i.ToString +)の文字列+ "_1" を与えています。それはあなたがコードの行を減らすことができ、ここでループのために使用する場合も、以下のコード

while (oReader.Read()); 

      { 
       int i = 0; 
       System.Web.UI.HtmlControls.HtmlGenericControl createDiv = 
       new System.Web.UI.HtmlControls.HtmlGenericControl("DIV"); 
       createDiv.ID = "createDiv"; 
       this.Controls.Add(createDiv); 
       List<TextBox> tb_names = new List<TextBox>(); 
       TextBox tb_name = new TextBox(); 


       var lstText=new List<string> 
        { 
        "Scheepspnaam", 
        "RederijNr", 
        "Lengte", 
        "Laadvermogen" 
       }; 

       for (int j = 0; j < 4; j++) 
       { 
        tb_name.ID = "CreateT_" + i + "_" + (j+1); 
        //tb_name.Text = oReader["SchipNaam"].ToString(); 
        createDiv.Controls.Add(new LiteralControl 
         ("<div class='form-group'><div class='clearfix' ></div><div class='row'><div class='col-md-3'></div><div class='col-md-3'> " + lstText[j] + 
         ": <input type='text' id='" + tb_name.ID + "' runat='server'/></div></div></div>")); 
        tb_names.Add(tb_name); 
       } 

       i++; 
      } 

を試し 働いていませんでした。

関連する問題