ASP .NET的DataList怎么添加用户控件(并且传递参数)

55 阅读1分钟

1.View代码

    <asp:DataList BackColor="Yellow" ID="DataList1" runat="server"  Width="300px" Height="200px" OnItemCreated="DataList1_ItemDataBound"  >
        <ItemTemplate>
            <uc2:ItemInfo runat="server" ID="ItemInfo" ItemID="6" />
        </ItemTemplate>
      </asp:DataList>

2. cs代码

  • 这是页面登录的时候加载数据session.Items.Tolist();是我的ADO代码
  • 如果没有这个DataBind()就不会执行下面的ItemDataBound
  • tip:ItemInfo test = (ItemInfo)e.Item.FindControl("ItemInfo")这个必不可少,如果不查询控件的化,你加载的时候,你用户控件里面的标签,就一直报错,无法实例化
 protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {

                // 绑定数据到DataList控件
                DataList1.DataSource = session.Items.ToList();
                DataList1.DataBind();
               


            }
          
        }
        
   protected void DataList1_ItemDataBound(object sender, DataListItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
            {
                ItemInfo test = (ItemInfo)e.Item.FindControl("ItemInfo");
                //获取绑定的数据
                Items product = (Items)e.Item.DataItem;
               
                // 创建添加控件的代码
                // 例如:创建一个Label控件来显示产品的名称
               
                test.ItemID= product.ID;
                e.Item.Controls.Add(test);
            


            }
        }
        

3.用户控件

 public partial class ItemInfo : System.Web.UI.UserControl
    {
        public long ItemID { get;set;}
        public ItemInfo(long itemID)
        {
            this.ItemID = itemID;
        }

        public ItemInfo()
        {
           
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                try
                {
                    session5Entities session = new session5Entities();
                    var item = session.Items.Where(x => x.ID == this.ItemID).FirstOrDefault();
                    if (item != null)
                    {
                        if (Label1 != null)
                        {
                            Label1.Text = item.Title.ToString();
                        }

                    }

                }
                catch (Exception ex)
                {

                }
            }
      
        
        }
    }

最终的效果

image.png