代码之家  ›  专栏  ›  技术社区  ›  Anders

更改C中继器中数据绑定控件的值#

  •  1
  • Anders  · 技术社区  · 15 年前

    我有一个嵌套的中继器控件,它显示数据列表,在我的例子中,它是一个常见问题列表。以下是设计部分:

    <asp:Repeater ID="lists" runat="server">
        <ItemTemplate>
            <h2 class="sf_listTitle"><asp:Literal ID="listTitle" runat="server"></asp:Literal></h2>
    
            <p class="sf_controlListItems">
                <a id="expandAll" runat="server">
                    <asp:Literal ID="Literal1" runat="server" Text="<%$Resources:ExpandAll %>"></asp:Literal>
                </a>
                <a id="collapseAll" runat="server" style="display:none;">
                    <asp:Literal ID="Literal2" runat="server" Text="<%$Resources:CollapseAll %>"></asp:Literal>
                </a>
            </p>
    
            <ul class="sf_expandableList" id="expandableList" runat="server">
                <asp:Repeater ID="listItems" runat="server">
                    <HeaderTemplate>
                    </HeaderTemplate>
                    <ItemTemplate>
                        <li>
                            <h1 id="headlineContainer" runat="server" class="sf_listItemTitle">
                                <a id="headline" runat="server" title="<%$Resources:ClickToExpand %>"></a>
                            </h1>
                            <div id="contentContainer" runat="server" class="sf_listItemBody" style="display:none;">
                                <asp:Literal ID="content" runat="server"></asp:Literal>
                            </div>
                        </li>
                    </ItemTemplate>
                    <FooterTemplate>
                    </FooterTemplate>
                </asp:Repeater>
            </ul>
        </ItemTemplate>
    </asp:Repeater>
    

    我感兴趣的中继器是第二个中继器, listItems . 在我的代码隐藏中,我不能直接调用 李斯特 看看里面的控制。我试图控制 list.DataBinding (也许我需要使用其他事件?)方法:

    void lists_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        var oRepeater = (Repeater) lists.FindControl("listItems");
    }
    

    但结果是 null . 有人能给我一些我需要做什么才能进入 李斯特 中继器和它的孩子控制?

    谢谢!

    3 回复  |  直到 15 年前
        1
  •  3
  •   Paul Alan Taylor    15 年前
    lists
    

    属于每个转发器项,而不是直接属于转发器本身。

    尝试:

    void lists_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
    
    
        if ( e.Item.ItemType == ListItemType.AlternatingItem 
            || e.Item.ItemType == ListItemType.Item )
        {
           Repeater oRepeater = (Repeater)e.Item.FindControl("listItems");
    
           // And to get the stuff inside.
           foreach ( RepeaterItem myItem in oRepeater.Items )
           {
              if ( myItem.Item.ItemType == ListItemType.AlternatingItem 
                  || myItem.Item.ItemType == ListItemType.Item )  
              {
                 Literal myContent = (Literal)myItem.FindControl("content");
    
                 // Do Something Good!
                 myContent.Text = "Huzzah!";
    
              }
           }
        }
    }
    

    你应该很好:)

    经过编辑,结合了戴维普的有益精练。

        2
  •  1
  •   Spencer Ruport    15 年前

    你需要把那条线改成

    var oRepeater = (Repeater) e.Item.FindControl("listItems");
    
        3
  •  0
  •   David Peters    15 年前

    你走近了!在事件处理程序中,检查repeateritemEventArgs以了解您正在处理的行的类型。您的子转发器只能在(alt)项目行上使用,不能在页眉或页脚上使用。我猜是头球爆了。