Search code examples
c#uniqueincrement

Adding with increment int


I have a problem with my unique textbox id's. My code is creating a div with 4 textboxes for each ship in my database. Each created textbox must have an unique ID. I do this with increment int (int i = 0 and i++) but can't seem to get it working. Here is my code!

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++;
}

My output is always CreateT_0_1. What am I doing wrong? I thought it worked before but can't seem to find the issue.

I hope that you guys see what I'm doing wrong.

Thanks in advance!


Solution

  • You create i with value 0 at the beginning of each while loop. Initialise the integer before the loop and then update it within the loop, otherwise it will reset to 0 on each iteration.

    You are adding 3 text boxes within the while loop, but you only increment i at the end of the while loop. You will need to change your suffix as this is always _1 or use i++ between each text box to make the identifier unique.

    As Jon Skeet mentioned in a comment above, the semicolon on the line of the while initiation should not be needed.

    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++;
    }