aspx:
<asp:Repeater ID="rptSearch" OnItemDataBound="rptSearch_ItemDataBound" runat="server" Visible="true">cs:
    protected void rptSearch_ItemDataBound(object sender, RepeaterItemEventArgs e){
}ArrayList里面的对象是一个有10个属性的class。用datatable绑定时可以触发“rptSearch_ItemDataBound“事件。但是改成ArrayList就不行,为什么呢?
(我们要求不能使用datatable,因为编码时数据库字段设计对外开放了。)

解决方案 »

  1.   

    你是后天绑定的吗?前台代码里没有看到datasource的设置,而后台绑定后,再调用DataBind()方法,应该就可以触发那个事件才对.
      

  2.   

    OnItemDataBound 事件
    是在DataBind()函数无异常完整执行完后触发。
      

  3.   

    /// <summary>
    /// EntityClass 的摘要说明
    /// </summary>
    [Serializable]
    public class EntityClass
    {
        private int _id;
        private string _name;
        private string _sex;
        private int _age;    public int ID
        {
            set {_id=value; }
            get { return _id; }
        }
        public string Name
        {
            set { _name = value; }
            get { return _name; }
        }
        public string Sex
        {
            set { _sex = value; }
            get { return _sex; }
        }
        public int Age
        {
            set { _age = value; }
            get { return _age; }
        } public EntityClass()
    {
    //
    // TODO: 在此处添加构造函数逻辑
    //
    }
    }
    <form id="form1" runat="server">
        <asp:Repeater ID="rp" runat="server" OnItemDataBound="rp_ItemDataBound"></asp:Repeater>
        </form>
    using System.Collections.Generic;protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                IList<EntityClass> l = new List<EntityClass>();
                EntityClass ec ;
                for (int i = 0; i < 5; i++)
                {
                    ec = new EntityClass();
                    ec.ID = i;
                    ec.Name = "Name" + i.ToString();
                    ec.Sex = i % 2 == 0 ? "男" : "女";
                    ec.Age = 20 + i;
                    l.Add(ec);
                }
                rp.DataSource = l;
                rp.DataBind();
            }
        }
        protected void rp_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
            {
                EntityClass ec = e.Item.DataItem as EntityClass;
                if (ec != null)
                {
                    Literal lit = new Literal();
                    lit.Text = ec.Name;
                    e.Item.Controls.Add(lit);
                }
            }
        }
      

  4.   

    绑定的代码应该可以的。因为我改成datatable之后就可以进去了。
      

  5.   

    估计你忘了调用DataBind()方法手动绑定了,只有前台页面设置的数据源才不需要调用DataBind(),后台设置的数据源必须自己手动调用DataBind()来绑定数据.
      

  6.   

    aspx里设置数据源就是前台页面里设置,cs文件里设置数据源就是后台设置.后台设置的数据源不会自动绑定,只有当调用了DataBind()方法后才会绑定.
      

  7.   

    用了[Sandy945]的代码,果然可以,搞定,就用IList了。好东西,可以用LINQ,哈哈,我是菜鸟,我很激动