none
【ASP.NET】如何在DataList的FooterTemplate模板里查找对应控件? RRS feed

  • 问题

  • 我在Page_Load的事件里想查找页面Label控件。使用this.控件名ID  但这个控件ID就是不出来,后来发现这个控件是放到了DataList的FooterTemplate模板里,所以点不出来。之后我改用了((Label)this.DataList1.FindControl("控件名ID")).Text 发现还是不行,请高手帮忙,应该如何解决这个问题?
    (除了放到模板以外,我就是想把控件放到模板中)
    • 已移动 Raymond TangModerator 2009年12月24日 11:22 (发件人:.NET Framework 一般性问题讨论区)
    2009年12月24日 9:10

答案

  • 你好,采用下面这种方法试试。

    this.DataList1.Controls[this.DataList1.Controls.Count-1].FindControl("Repeater1")
    这种方法在我这边的环境中测试已经可以了。上面方法用来查找我放在FootTempldate中的一个Repeater控件。
    Microsoft Online Community Support
    • 已标记为答案 KeFang Chen 2009年12月30日 6:58
    2009年12月25日 6:28
  • 都试了,不好用。无奈之下写到DataList外面了

    • 已标记为答案 jinwb1982 2009年12月30日 7:00
    2009年12月30日 7:00

全部回复

  •   Label l;

            protected void Page_Load(object sender, EventArgs e)
            {
                if (l != null)
                    l.Text = "111";
            }

            protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
            {
                if (e.Item.ItemType == ListItemType.Footer)
                {
                    l = e.Item.FindControl("Label1") as Label;
                    this.OnLoad(e);
                }
            }

    2009年12月24日 14:50
  •   Label l;

            protected void Page_Load(object sender, EventArgs e)
            {
                if (l != null)
                    l.Text = "111";
            }

            protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
            {
                if (e.Item.ItemType == ListItemType.Footer)
                {
                    l = e.Item.FindControl("Label1") as Label;
                    this.OnLoad(e);
                }
            }


    你好,你的这个方法不行,设断点老是循环ISpostback(死循环)跳不出来了。网上有人说在ItemCommand事件中可以遍历出来FooterTemplate模板里的控件,但我没有试,看了大都是这样的,难道没有其他解决办法么?
    2009年12月24日 15:42
  • mldark 的代码我测试了可以的。如果你测试有问题。请贴出你全部代码。
    至于网上的例子你可以看下
    参考:http://www.cnblogs.com/symbol441/archive/2007/12/04/981962.html


    <asp:DataList ID="DataList1" runat="server" DataSourceID="AccessDataSource1" 
        onitemdatabound="DataList1_ItemDataBound" 
        onitemcommand="DataList1_ItemCommand">
        <ItemTemplate>
            //省略
        </ItemTemplate>
        <FooterTemplate>
            <asp:Button ID="Button2" runat="server" Text="PostFooterId"  CommandArgument="PostId"/>
            <asp:LinkButton ID="LinkButton1" runat="server">LinkButton</asp:LinkButton>
        </FooterTemplate>
    </asp:DataList>
        protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
        {
            if (e.CommandArgument.ToString() == "PostId")
            {
                LinkButton lnk = (LinkButton)DataList1.Controls[DataList1.Items.Count].FindControl("LinkButton1");
                Response.Write(lnk.ID);
            }
        }
    2009年12月24日 15:46
  • 你好,采用下面这种方法试试。

    this.DataList1.Controls[this.DataList1.Controls.Count-1].FindControl("Repeater1")
    这种方法在我这边的环境中测试已经可以了。上面方法用来查找我放在FootTempldate中的一个Repeater控件。
    Microsoft Online Community Support
    • 已标记为答案 KeFang Chen 2009年12月30日 6:58
    2009年12月25日 6:28
  • 都试了,不好用。无奈之下写到DataList外面了

    • 已标记为答案 jinwb1982 2009年12月30日 7:00
    2009年12月30日 7:00
  • 我上面的方法就是写在外面的啊。

    直接在外面的一个任意的button的click事件中就可以了。
    Microsoft Online Community Support
    2009年12月30日 7:02