Как извлечь данные из базы данных для отображения в динамически создаваемое текстовое поле при нажатии кнопки?

Я сделал форму, в которой у меня есть два поля, Name and Products, Рядом с продуктами я взял текстовое поле и кнопку. Я разрешаю моему пользователю добавлять более одного текстового поля, и ограничение не должно превышать 5 текстовых полей. Теперь я вставляю данные из этой формы в мой SQL Database, А теперь я хочу получить данные из таблицы и отобразить в соответствующем текстовом поле. Я хочу, чтобы при нажатии кнопки Показать все все динамическое текстовое поле должно появиться в форме. И если данные присутствуют в БД для этого конкретного поля, то они должны отображаться в виде текста в этих динамических textbox,

Я пытался сделать это-

<div>
    <table border="1" width="1000px">
    <tr><td colspan="2" align="center"><b>Inserting Data Into Table</b></td></tr>
    <tr>
    <td class="style1">Name: </td>
    <td class="style2">
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></td>
    </tr>
    <tr>
    <td class="style1">Add Text Box: </td>
    <td class="style2">
        <asp:TextBox ID="txt1" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" Text="Add More" 
            onclick="Button1_Click" /><br />
        <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>      
        </td>
    </tr>
    <tr><td colspan="2" align="center">
        <asp:Button ID="Button2" runat="server" Text="Submit" onclick="Button2_Click" />
        <br />
        </td></tr>
    </table>
    </div><br /><br />
    <div>
    <table border="1" width="1000px">
    <tr><td colspan="2" align="center"><b>Fetching Data And Showing into Textbox</b></td></tr>
    <tr>
    <td class="style1">Name: </td>
    <td class="style2">
        <asp:TextBox ID="txtname" runat="server"></asp:TextBox></td>
    </tr>
    <tr>
    <td class="style1">Add Text Box: </td>
    <td class="style2">
        <asp:TextBox ID="txtt1" runat="server"></asp:TextBox>
        <asp:Button ID="Button3" runat="server" Text="Show All" 
            onclick="Button3_Click" /><br />
        <asp:PlaceHolder ID="PlaceHolder2" runat="server"></asp:PlaceHolder>      
        </td>
    </tr>
    <tr><td colspan="2" align="center">
        <asp:Button ID="Updt" runat="server" Text="Update" onclick="Updt_Click" />
        <br />
        </td></tr>
    </table>
    </div>

Страница CS:-

General_Logic g1 = new General_Logic();
DataTable dt = new DataTable();
int rows = 0;
List<string> ControlIdList = new List<string>();
int Counter = 1;
TextBox tb = new TextBox();
protected override void LoadViewState(object SavedState)
{
    base.LoadViewState(SavedState);
    ControlIdList = (List<string>)ViewState["ControlIdList"];
    foreach (string Id in ControlIdList)
    {
        Counter++;
        TextBox tb = new TextBox();
        tb.ID = Id;
        LiteralControl linebreak = new LiteralControl();
        PlaceHolder1.Controls.Add(tb);
        PlaceHolder1.Controls.Add(linebreak);
    }
}
protected void Page_Load(object sender, EventArgs e)
{
    show();
}
public void show()
{
    dt = g1.return_dt("select product1,product2,product3,product4,product5,name from tbl_products where name='Yo Yo'");
    if (dt.Rows.Count > 0)
    {
        txtname.Text = dt.Rows[0]["name"].ToString();
        txtt1.Text = dt.Rows[0]["product1"].ToString();
        //TextBox txtb;
        int x = 2;
        foreach (Control ctrl in PlaceHolder2.Controls)
        {
            if (ctrl is TextBox)
            {
                if (x <= 5)
                {
                    if (Counter <= 4)
                    {
                        Counter++;
                        tb.ID = "TextBox" + Counter;
                        //tb.Text = tb.ID;
                        tb = (TextBox)ctrl;
                        LiteralControl linebreak = new LiteralControl("<br />");
                        tb.Text = dt.Rows[0]["product'" + x + "'"].ToString();
                        PlaceHolder2.Controls.Add(tb);
                        PlaceHolder2.Controls.Add(linebreak);
                        ControlIdList.Add(tb.ID);
                        ViewState["ControlIdList"] = ControlIdList;
                        x++;
                    }
                    //txtb = (TextBox)ctrl;
                    //LiteralControl linebreak = new LiteralControl("<br />");
                    //txtb.Text = dt.Rows[0]["product'" + x + "'"].ToString();
                    //PlaceHolder2.Controls.Add(txtb);
                    //PlaceHolder2.Controls.Add(linebreak);
                    //x++;
                }
            }

        }
    }
}
protected void Button1_Click(object sender, EventArgs e)
{
    if (Counter <= 4)
    {
        Counter++;
        tb.ID = "TextBox" + Counter;
        tb.Text = tb.ID;
        LiteralControl linebreak = new LiteralControl("<br />");
        PlaceHolder1.Controls.Add(tb);
        PlaceHolder1.Controls.Add(linebreak);
        ControlIdList.Add(tb.ID);
        ViewState["ControlIdList"] = ControlIdList;
    }
    else
    {
        Button1.OnClientClick = null;
        Response.Write("<script>alert('Maximum Entry is 5');</script>");
    }
}
protected void Button2_Click(object sender, EventArgs e)
{
        int limit = 4;
        string[] DBVALUES = new string[5];
        for (int parcount = 0; parcount<=limit; parcount++)
        {
            if (parcount == 0)
            {
                DBVALUES[parcount] = txt1.Text;
            }
            else
            {
                DBVALUES[parcount] = Request.Form["TextBox" + (parcount + 1).ToString()];
            }
        }
        for (int i = 0; i <= 4; i++)
        {
            if (DBVALUES[i] == null)
            {
                DBVALUES[i] = "NULL";
            }
        }
        rows = g1.ExecDB("insert into tbl_products(product1,product2,product3,product4,product5,name) values('" + DBVALUES[0].ToString() + "','" + DBVALUES[1].ToString() + "','" + DBVALUES[2].ToString() + "','" + DBVALUES[3].ToString() + "','" + DBVALUES[4].ToString() + "','"+TextBox1.Text.ToString()+"')");
        TextBox1.Text = string.Empty;
        txt1.Text = string.Empty;
        TextBox txtb;
        foreach (Control ctrl in PlaceHolder1.Controls)
        {
            if (ctrl is TextBox)
            {
                txtb = (TextBox)ctrl;
                txtb.Text = string.Empty;
            }
        }
    Response.Write("<script>alert('Data Inserted!!!');</script>");
}
protected void Updt_Click(object sender, System.EventArgs e)
{

}
protected void Button3_Click(object sender, System.EventArgs e)
{
    show();
}

Пожалуйста, направьте меня туда, где я делаю неправильно. Я жду от вас всех предложений.

1 ответ

Решение

Я думаю, что вам нужно изменить свой метод показа таким образом, чтобы иметь элементы управления внутри заполнителя, если ваш datatable возвращает несколько строк, вам нужно перебрать все строки, чтобы получить данные отдельных

public void show()
{
 dt = g1.return_dt("select product1,product2,product3,product4,product5,name from tbl_products where name='Yo Yo'");
if (dt.Rows.Count > 0)
{
    txtname.Text = dt.Rows[0]["name"].ToString();
    txtt1.Text = dt.Rows[0]["product1"].ToString();
    //TextBox txtb;
    int x = 2;
            if (x <= 5)
            {
                if (Counter <= 4)
                {
                    TextBox tb = new TextBox();
                    Counter++;
                    tb.ID = "TextBox" + Counter;
                    //tb.Text = tb.ID;
                    LiteralControl linebreak = new LiteralControl("<br />");
                    tb.Text = dt.Rows[0]["product'" + x + "'"].ToString();
                    PlaceHolder2.Controls.Add(tb);
                    PlaceHolder2.Controls.Add(linebreak);
                    ControlIdList.Add(tb.ID);
                    ViewState["ControlIdList"] = ControlIdList;
                    x++;
                }
                //txtb = (TextBox)ctrl;
                //LiteralControl linebreak = new LiteralControl("<br />");
                //txtb.Text = dt.Rows[0]["product'" + x + "'"].ToString();
                //PlaceHolder2.Controls.Add(txtb);
                //PlaceHolder2.Controls.Add(linebreak);
                //x++;
            }
        }

    }

Если было установлено, что элементы управления не должны превышать 4, попробуйте этот код, пока вы нажимаете на showall заменить DataTable грести согласно вашему требованию

protected void Button3_Click(object sender, EventArgs e)
    {
        createControls();
    }

private void createControls()
    {
        PlaceHolder2.Controls.Clear();
        for (int i = 0; i < 4; i++)
        {
            TextBox tb = new TextBox();
            tb.ID = "TextBox" + i;
            tb.Text = tb.ID;
            LiteralControl linebreak = new LiteralControl("<br />");
            PlaceHolder2.Controls.Add(tb);
            PlaceHolder2.Controls.Add(linebreak);
        }
    }

Я создал данные согласно вашему требованию, проверьте это

private void createControls()
    {
        PlaceHolder2.Controls.Clear();
        DataTable dt = Session["Table"] as DataTable;
        for (int i = 1; i < 5; i++)
        {
            int cnt = 0;
            cnt = i;
            TextBox tb = new TextBox();
            cnt = cnt + 1;
            tb.ID = "TextBox" + i;
            tb.Text = dt.Rows[0]["Product" + cnt + ""].ToString();
            LiteralControl linebreak = new LiteralControl("<br />");
            PlaceHolder2.Controls.Add(tb);
            PlaceHolder2.Controls.Add(linebreak);
        }
    }

    private void assignValues()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("Product2", typeof(string));
        dt.Columns.Add("Product3", typeof(string));
        dt.Columns.Add("Product4", typeof(string));
        dt.Columns.Add("Product5", typeof(string));

        DataRow lrow = dt.NewRow();
        lrow["Product2"] = "ABC";
        lrow["Product3"] = "DEF";
        lrow["Product4"] = "GHI";
        lrow["Product5"] = "JKL";
        dt.Rows.Add(lrow);
        Session["Table"] = dt;
    }

 protected void Button3_Click(object sender, EventArgs e)
    {
        assignValues();
        createControls();
    }

Вот о / п, согласно моим данным на нажатие showall

PageLoad

Показать все

Другие вопросы по тегам