asp.net中继器中的服务器控件

asp.net中继器中的服务器控件,asp.net,repeater,servercontrols,Asp.net,Repeater,Servercontrols,好像我在这里撞到墙了。我希望将一些数据源绑定到asp.net转发器(当然,不必是转发器,但这似乎就是我想要的)。现在,这里有一个陷阱:我还需要在中继器中的一些服务器控件来更新数据(文本框和按钮) 据我所知,这真的不可能有秩序地进行吗?我不能只是在itemtemplate中添加一个文本框,然后在后面的代码中获取它。至少不容易。这类问题有什么已知的解决方法吗 我不能使用gridview,因为数据需要以某种方式格式化。您可以使用查找嵌套在中继器中的控件 <asp:Repeater ID="Rep

好像我在这里撞到墙了。我希望将一些数据源绑定到asp.net转发器(当然,不必是转发器,但这似乎就是我想要的)。现在,这里有一个陷阱:我还需要在中继器中的一些服务器控件来更新数据(文本框和按钮)

据我所知,这真的不可能有秩序地进行吗?我不能只是在itemtemplate中添加一个文本框,然后在后面的代码中获取它。至少不容易。这类问题有什么已知的解决方法吗

我不能使用gridview,因为数据需要以某种方式格式化。

您可以使用查找嵌套在中继器中的控件

<asp:Repeater ID="Repeater1" Runat="server" OnItemDataBound="Repeater1_ItemDataBound">
   <ItemTemplate>
      <div><asp:TextBox ID="TextBox1" runat="server" /></div>
   </ItemTemplate>
</asp:Repeater>

看来我的问题出在我的思维方式上:)

我的解决方案: 我只是像往常一样添加了控件,但是在ItemTemplate中。对于控件的回调事件,我选择:

(按钮示例)

。。等等

所以,在找到RepeaterItem后,我只是像对待任何控制组一样对待它。我实际上得到了5个不同的TextBoss,用ID=“txtName”编码,这并不重要,因为asp.net自动在客户端标记中给出控件的“模糊”名称,并在回发时将其转换回我的ID


希望这对某人有所帮助,抱歉打扰了:)

如果您不想使用ItemCommand,只想在Repeater的items集合中循环,那么在页面底部有一个“save”(保存)按钮,您可以这样做:

foreach(RepeaterItem itm in MyRepeater.Items)
{
     TextBox t = (TextBox)(itm.FindControl("TextBox1"));
     // do something with it.

}

当然,您需要确保ASPX中的TextBox1具有Runat=“Server”属性。

已经尝试过了。不起作用:(似乎ItemDataBound事件发生在呈现和添加按钮之前?无论如何,textBox1对我来说是空的。顺便说一句;事件参数类型是RepeaterItemEventArgs:)我相信您应该添加一个按钮并使用RepeaterItemCommand事件处理程序,而不是使用ItemDataBound。
protected void btnUpdate_OnClick(object sender, EventArgs e)
    {
        Button b = sender as Button;
        if (b != null)
        {
            RepeaterItem ri = b.Parent as RepeaterItem;
            if (ri != null)
            {
                string name = null;

                //Fetch data
                TextBox txtName = ri.FindControl("txtName") as TextBox;
foreach(RepeaterItem itm in MyRepeater.Items)
{
     TextBox t = (TextBox)(itm.FindControl("TextBox1"));
     // do something with it.

}