Unfortunately, what the user's want is as I stated it.
You missed the point. Web Forms is the technology selected for this project. Therefore, you should use the tools that come with Web Forms to build a solution.
Below is a basic example of using a standard Repeater control to dynamically generate inputs.
Markup
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="default.aspx.cs" Inherits="WebFormsDemo.RepeaterDemo._default" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:DropDownList ID="ddlNumber" runat="server" OnSelectedIndexChanged="ddlNumber_SelectedIndexChanged" AutoPostBack="true">
<asp:ListItem Text="--Select--" Value="0"></asp:ListItem>
<asp:ListItem Text="1" Value="1"></asp:ListItem>
<asp:ListItem Text="2" Value="2"></asp:ListItem>
<asp:ListItem Text="3" Value="3"></asp:ListItem>
</asp:DropDownList>
</div>
<div>
<asp:Repeater ID="DynamicRepeater" runat="server">
<HeaderTemplate>
<table border="1">
<tr>
<td><b>Item 1</b></td>
<td><b>Item 2</b></td>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:TextBox ID="Item1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Item1") %>'></asp:TextBox>
</td>
<td>
<asp:TextBox ID="Item2" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "Item2") %>'></asp:TextBox>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</div>
</form>
</body>
</html>
Code behind
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebFormsDemo.RepeaterDemo
{
public partial class _default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void ddlNumber_SelectedIndexChanged(object sender, EventArgs e)
{
List<ItemsModel> Items = new List<ItemsModel>();
int rows = 0;
int.TryParse(ddlNumber.SelectedValue, out rows);
for(int i = 0; i < rows; i++)
{
Items.Add(new ItemsModel());
}
DynamicRepeater.DataSource = Items.Count == 0 ? null : Items;
DynamicRepeater.DataBind();
}
}
public class ItemsModel
{
public string Item1 { get; set; } = string.Empty;
public string Item2 { get; set; } = string.Empty;
}
}
The rest is up to you. I image you'll add a button to submit the user's inputs. Update a database table. Finally update any data bound controls that display records.
Reference documentation
https://learn.microsoft.com/en-us/dotnet/api/system.web.ui.webcontrols.repeater?view=netframework-4.8.1