在一个asp.net中继服务器控件(Server controls in an asp.net re

2019-06-26 23:28发布

好像我已经撞上了墙在这里。 我想一些数据源绑定到一个asp.net中继器(当然,并不一定是一个中继器,但似乎这就是我想要的)。 现在,这里的渔获:我还需要一个中继器内部的一些服务器控件用于更新数据(TextBox'es和按钮)。

据我了解,这AINT真的有可能在有条不紊地做什么? 我不能只是添加一个文本框ItemTemplate中,然后在以后获取它的代码隐藏它似乎。 至少不容易。 是否有这样那样的问题任何已知的技术?

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

Answer 1:

如果你不希望使用ItemCommand并希望刚刚经历Repeater的项目收集循环,让你有一个“保存”,在页面底部的按钮,你可以做这样的:

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

}

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



Answer 2:

您可以使用Repeater.ItemDataBound事件找到嵌套在一个Repeater控件。

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

然后在后面的代码:

protected void Repeater1_ItemDataBound(object source, RepeaterCommandEventArgs e)
{
   if (e.Item.ItemType != ListItemType.Item && e.Item.ItemType !=
      ListItemType.AlternatingItem)
      return;

   TextBox textBox1 = e.Item.FindControl("TextBox1") as TextBox;
   if (textBox1 != null)
   {
   // do something with it
   }
}


Answer 3:

好像我的问题是我想的方式:)

我的解决方案:我刚添加控件我通常会做,但里面的ItemTemplate。 在控件的回调事件,我会去:

(例如按钮)

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;

。等等。

因此,找到的RepeaterItem后,我只把它当作我会与任何ControlGroup。 不要紧,我居然有5个不同textbosses,与ID =“txtName的”编码,因为asp.net自动地给客户端标记的控件“混淆”的名字,并且把该回到我的ID上回发。

希望这可以帮助别人,并抱歉打扰:)



文章来源: Server controls in an asp.net repeater