DataList后台添加控件需要在ItemDataCreate事件中进行,ItemDataBound在中添加的控件在页面回发之后控件就没有了,为了避免麻烦需要在,在ItemDataCreate事件进行控件的添加。
protected void DataList1_ItemCreated(object sender, DataListItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
int i=e.Item.ItemIndex;
string PositionID = DataList1.DataKeys[i].ToString();//获取DataList的主键值
Panel panel = new Panel();//实例化一个控件
e.Item.Controls.Add(panel);//在Item中添加实例化的控件
//Response.Write(PositionID + "++");
DataTable dt = MedicinesManagerBLL.Sys_JobRole.GetRoleID(PositionID);
for (int j = 0; j < dt.Rows.Count; j++)
{
Label label = new Label();
label.Text = dt.Rows[j]["RName"].ToString() + " ";
//Response.Write(dt.Rows[j]["RName"].ToString() + " ");
panel.Controls.Add(label);
}
Button btn = new Button();//实例化一个按钮
btn.CommandArgument = e.Item.ItemIndex.ToString();//定义按钮的CommandArgument
btn.Text = "编辑";
btn.CommandName = "btnEdit";//定义按钮的CommandName,为了在ItemCommand 中使用该按钮执行相应的时间
panel.Controls.Add(btn);
}
}
在ItemCommand使用后台生成的控件
protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
{
if (e.CommandName == "btnEdit")
{
int RowIndex = Convert.ToInt16(e.CommandArgument.ToString());
Row = RowIndex;
btnEdit();//点击编辑按钮执行的事件
//MessageBox.Show(this, Row.ToString());
}
}
这种方式后台生成的按钮能用,不知道这样是不是正确的方式,有什么不对的地方,欢迎指正。