根据输入数字 ASP.NET 在中继器中添加带有文本框的 X 行



当用户在文本框中输入数字时,我需要在中继器上绑定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
        }

最新更新