datalist的模板里有panel控件,想动态的在panel里添加控件,请问该怎么做?
save the information somewhere (like ViewState) when you do the initial databinding, for example
<%@ Import Namespace="System.Data" %>
<form runat="server">
<asp:DataList id="DataList1" runat="server" OnItemCreated="DataList1_ItemCreated"
OnItemDataBound="DataList1_ItemDataBound">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem,"Col1")%>
<asp:Panel id="Panel1" runat="server" />
</ItemTemplate>
</asp:DataList>
<asp:Button id="btn" runat="server" Text="Refresh" />
</form>
<script language="C#" runat="server">
DataTable GetData()
{
DataTable dt = new DataTable();
DataRow dr;
dt.Columns.Add(new DataColumn("Col1", typeof(String)));
dt.Columns.Add(new DataColumn("Col2", typeof(int)));
dr = dt.NewRow();
dr[0] = "a";
dr[1] = 3;
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = "b";
dr[1] = 5;
dt.Rows.Add(dr);
return dt;
}
void Page_Load(Object sender, EventArgs e)
{
if (!IsPostBack)
{
DataList1.DataSource = GetData().DefaultView;
DataList1.DataBind();
}
}
void DataList1_ItemCreated(Object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
int n = 0;
Panel p = e.Item.FindControl("Panel1") as Panel;
if(e.Item.DataItem != null)
{
//get the number of links we need and save it into the viewstate
n=(int)DataBinder.Eval(e.Item.DataItem,"col2");
ViewState["Images"+e.Item.ItemIndex.ToString()] = n;
}
else
n = Convert.ToInt32(ViewState["Images"+e.Item.ItemIndex.ToString()]);
for(int i=1; i <= n; i++)
{
Image img = new Image();
img.ID = "img" + i.ToString();
p.Controls.Add(img);
}
}
}
void DataList1_ItemDataBound(Object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
Panel p = e.Item.FindControl("Panel1") as Panel;
int n=(int)DataBinder.Eval(e.Item.DataItem,"col2");
for(int i=1; i <= n; i++)
{
Image img = p.FindControl("img" + i.ToString()) as Image;
img.ImageUrl = "http://www.csdn.net/images/csdn.gif"; //set your images here
}
}
}
</script>
在项目的Item中放入Pan控件,在数据项目被创建的Item_Created事件中加入,你要的图片..