访问所有的文本框id一次在cs文件中是在一个数据列表

本文关键字:文件 一个 列表 数据 cs id 一次 访问 文本 | 更新日期: 2023-09-27 18:17:41

我有一个数据列表,其中有一个占位符和占位符里面我有文本框。我需要访问那些文本框。当然,我可以这样做,但每个都必须单独访问。这将是漫长而乏味的,我在想如果有一种方法访问所有这些文本框一次。

<asp:DataList ID="profileDl" runat="server" OnItemDataBound="findMYcontrol" >
<ItemTemplate>
<div class="row">
<div class="col-lg-12 plcontTop " >
<asp:Image ID="imgP" runat="server" ImageUrl='<%#Eval("pp_path")%>' Height="115px" Width="150px" />
</div>
</div>
<div class="row">
<div class="col-lg-12" >
<asp:FileUpload ID="profileUP" runat="server"/>
<asp:Button ID="imgbutt" runat="server" class="btn btn-danger btn-block" OnClick="picClick" Text="Upload" />

<asp:PlaceHolder ID="profile_tb" runat="server">
<table class="tbl_ptb">
<tr>
<td><b> UserName: </b> </td>
<td><asp:TextBox ID="tb_uname" runat="server" Text='<%# Eval("name")%>'/></td> 
</tr>
<tr>
<td><b> RealName: </b> </td>
<td><asp:TextBox ID="tb_rname" runat="server" Text='<%# Eval("name")%>'/></td> 
</tr>
<tr>
<td><b> Email: </b> </td>
<td><asp:TextBox ID="tb_email" runat="server" Text='<%# Eval("email")%>' /></td>
</tr>
<tr>
<td><b> Address: </b> </td>
<td><asp:TextBox  ID="Label8" runat="server" Text='<%# Eval("address")%>' /></td> 
</tr>
<tr>
<td><b> Sex: </b> </td>
<td><asp:TextBox ID="tb_sex" runat="server" Text='<%# Eval("sex")%>' /></td>
</tr>
<tr>
<td><b> Account: </b> </td>
<td> <asp:TextBox ID="tb_acc" runat="server" Text='<%# Eval("acType")%>'/></td>
</tr>
</table>
<asp:Button ID="editmyprofile" class="btn btn-danger btn-block editbutt" runat="server" OnClick="savemyP" Text="save" />
</asp:PlaceHolder>

</div>
</div>
</ItemTemplate>
</asp:DataList>

我需要在相应的。cs文件中访问占位符profile_tb内的所有文本框。

现在我已经访问了占位符

public void findMYcontrol(object sender, DataListItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        FileUpload fu = (FileUpload)e.Item.FindControl("profileUP");
        fileup = fu;
        PlaceHolder ph1 = (PlaceHolder)e.Item.FindControl("profile_lbl");
        ph_lbl = ph1;
        PlaceHolder ph2 = (PlaceHolder)e.Item.FindControl("profile_tb");
        ph_tb = ph2;

    }
}

ph_lbl and ph_tb作为页面变量。做同样的事情解决了问题,但它将是冗长的访问所有这些文本框id与这种方法。还有别的办法吗?

访问所有的文本框id一次在cs文件中是在一个数据列表

一个解决方案如下:

  1. 在您的占位符中,使用asp:table,而不是table,并为其设置Id (asp:table背后的代码与table相同)。在你的。cs文件中,使用FindControl方法通过id获取asp:table。有了表,您可以在for循环
  2. 中访问它的所有列和单元格

希望对您有所帮助

表上的

for如下所示:

foreach(TableRow tr in tableId.Rows)
{
    //if your textbox is in an known cell, instead of this for loop you can
    //get it by its index like tr.Cells[i]
    foreach (TableCell tc in tr.Cells)
    {
        foreach (Control con in tc.Controls)
        {
            //check if con is of type textBox and get its text
        }
    }
}

您可以创建如下函数

IEnumerable<Control> EnumerateControlsRecursive(Control parent)
{
    foreach (Control child in parent.Controls)
    {
         yield return child;
         foreach (Control descendant in EnumerateControlsRecursive(child))
             yield return descendant;
     }
}

它将迭代并返回任何容器中的所有控件然后你可以在下面使用

foreach (Control c in EnumerateControlsRecursive(yourcontainerId))
{
      if(c is TextBox)
      {
          // do something useful
      }
}