none
Repeater控件里的DataItem数据项为何NULL?明明已经绑定数据了 RRS feed

  • 问题

  • <ItemTemplate>标签里有个LinkButton,

    想要获取该按钮的父控件(RepeaterItem)的数据绑定项(DataItem),该按钮的Click事件里我是这样写的

    var a = ((sender as LinkButton).NamingContainer as RepeaterItem).DataItem;

    或者

    var b = ((sender as LinkButton).Parent as RepeaterItem).DataItem;

    a和b始终为NULL,按理说不应该啊


    顺便说一句,我给Repeater绑定实体集合,按理说应该返回一个封装好的实体对象才对啊
    • 已编辑 XP1984 2014年12月4日 1:50
    2014年12月4日 1:44

答案

  • 你好,

    FindConrrol 方法是可以在Button Click中事件里使用的。

    比如你的Repeater 控件Itemtemplate中有个Textbox和有个Button :

        <asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
            
            <ItemTemplate>
                     <asp:TextBox ID="tt" Text='<%# Eval("ID")%>' runat="server" />
             
                <asp:Button ID="Button2" runat="server" Text="Button" OnClick="Button2_Click"/>
            </ItemTemplate>
         </asp:Repeater>

    在button点击事件中,就可以找到TextBox的值:

          protected void Button2_Click(object sender, EventArgs e)
            {
                           Button btn = (Button)sender;
                    RepeaterItem ri = btn.NamingContainer as RepeaterItem;
                    TextBox tb = ri.FindControl("tt") as TextBox;
                    string a = tb.Text.ToString();
    
          
    
            }

    2014年12月5日 2:27

全部回复

  • 奇怪了 直接获取DataItem也为空

    写在PageLoad事件里一个小测试

    var a = this.Repeater1.Items[1].DataItem;

    a也是空这是什么情况

    2014年12月4日 2:27
  • DataItem属性只有在ItemDataBound事件里才能获取到吗?

     protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
            {
                var item = e.Item.DataItem;
            }

    貌似在别的地方根本获取不到啊,FindControl()方法也只能在这个事件中才能获取到...

    2014年12月4日 3:23
  • http://stackoverflow.com/questions/4649192/asp-net-repeater-item-dataitem-is-null

    2014年12月4日 3:29
  • 你好,

    FindConrrol 方法是可以在Button Click中事件里使用的。

    比如你的Repeater 控件Itemtemplate中有个Textbox和有个Button :

        <asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
            
            <ItemTemplate>
                     <asp:TextBox ID="tt" Text='<%# Eval("ID")%>' runat="server" />
             
                <asp:Button ID="Button2" runat="server" Text="Button" OnClick="Button2_Click"/>
            </ItemTemplate>
         </asp:Repeater>

    在button点击事件中,就可以找到TextBox的值:

          protected void Button2_Click(object sender, EventArgs e)
            {
                           Button btn = (Button)sender;
                    RepeaterItem ri = btn.NamingContainer as RepeaterItem;
                    TextBox tb = ri.FindControl("tt") as TextBox;
                    string a = tb.Text.ToString();
    
          
    
            }

    2014年12月5日 2:27