当用户在文本框中输入数字时,我需要在中继器上绑定x行。每行将有 3 个文本框。这就是我到目前为止所做到的。
在这里,我将ID添加到文本框中
protected void rptComponentes_OnItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
for (int i = 0; i < Convert.ToInt32(txtNumComponentes.Text); i++)
{
Label lblIdComponente = (Label)e.Item.FindControl("lblIdComponente");
lblIdComponente.ID += (i + 1);
TextBox txtComponente = (TextBox)e.Item.FindControl("txtComponente");
txtComponente.ID += (i + 1);
TextBox txtBase = (TextBox)e.Item.FindControl("txtBase");
txtBase.ID += (i + 1);
TextBox txtComprimento = (TextBox)e.Item.FindControl("txtComprimento");
txtComprimento.ID += (i + 1);
}
}
}
这应该添加一行,但没有任何显示。我仍然很不擅长手工制作数据表。
protected void BindComponentes()
{
DataTable dt = new DataTable();
DataRow dr = null;
//define the columns
dt.Columns.Add(new DataColumn("RowNumber", typeof(int)));
dt.Columns.Add(new DataColumn("Column1", typeof(string)));
dt.Columns.Add(new DataColumn("Column2", typeof(string)));
dt.Columns.Add(new DataColumn("Column3", typeof(double)));
//create new row
dr = dt.NewRow();
//add the row to DataTable
dt.Rows.Add(dr);
rptComponentes.DataSource = dt;
rptComponentes.DataBind();
}
这是中继器
<asp:Repeater ID="rptComponentes" runat="server" OnItemDataBound="rptComponentes_OnItemDataBound">
<HeaderTemplate>
<table id="tblArtigos" class="table table-bordered dataTable text-center">
<thead class="thead-dark">
<tr>
<th>#</th>
<th>Componente *</th>
<th>Base *</th>
<th>Comprimento *</th>
</tr>
</thead>
</HeaderTemplate>
<ItemTemplate>
<tbody>
<tr>
<td>
<asp:Label ID="lblIdComponente" CssClass="form-control form-control-sm rounded border border-dark" runat="server"></asp:Label>
</td>
<td>
<asp:TextBox ID="txtComponente" CssClass="form-control form-control-sm rounded border border-dark" runat="server"></asp:TextBox>
</td>
<td>
<asp:TextBox ID="txtBase" CssClass="form-control form-control-sm rounded border border-dark" runat="server"></asp:TextBox>
</td>
<td>
<asp:TextBox ID="txtComprimento" CssClass="form-control form-control-sm rounded border border-dark" runat="server"></asp:TextBox>
</td>
</tr>
</tbody>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
编辑:似乎问题是当我为动态文本框提供ID时,我得到空异常
您需要执行以下操作:
根据输入到txtNumComponentses 中的整数值将 N 行添加到可变量中
protected void BindComponentes()
{
DataTable dt = new DataTable();
for (int i = 0; i < Convert.ToInt32(txtNumComponentes.Text); i++)
{
DataRow dr = null;
dt.Columns.Add(new DataColumn("RowNumber", typeof(int)));
dt.Columns.Add(new DataColumn("Column1", typeof(string)));
dt.Columns.Add(new DataColumn("Column2", typeof(string)));
dt.Columns.Add(new DataColumn("Column3", typeof(double)));
//create new row
dr = dt.NewRow();
//add the row to DataTable
dt.Rows.Add(dr);
}
rptComponentes.DataSource = dt;
rptComponentes.DataBind();
}
然后更新 ItemDataBound 事件处理程序代码:
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
int itemIndex = e.Item.ItemIndex;
Label lblIdComponente = (Label)e.Item.FindControl("lblIdComponente");
lblIdComponente.ID = itemIndex.ToString();
// Similar logic for other control IDs
}