如何访问ASP.NET中运行时生成的datalist控件的值

时间:2012-12-01 09:35:11

标签: asp.net

datalist在运行时生成代码:如何在页面回发后访问datalist元素的值?

void CreateDATELIST(Control container)
{   
    var st = settings.CustomPossition();
    foreach (var item in settings.CustomPossition())
    {  
        DataTable dt = new DataTable();
        dt.Columns.Add("Name");
        dt.Columns.Add("Possition");
        dt.Columns.Add("Production");
        dt.Columns.Add("dpo");
        dt.Columns.Add("WorkDay");
        DataRow dr;
        foreach (var users in item.Users)
        {
            dr = dt.NewRow();
            dr["Name"] = users.Name;
            dr["Possition"] = users.Position.Name;
            dr["Production"] = users.DailyGoalAmount * (double)(users.WorkDays / 12;
            dr["dpo"] = users.DailyGoalAmount;
            dr["WorkDay"] = users.WorkDays;
            dt.Rows.Add(dr);
            dt.AcceptChanges();
        }
        DataList dataList = new DataList();
        dataList.ItemTemplate = Page.LoadTemplate("Commnets.ascx");
        container.Controls.Add(dataList);

        dataList.DataSource = dt;
        dataList.DataBind();
    }
}

2 个答案:

答案 0 :(得分:0)

如果您将Id分配给动态创建的DataList,如下所示:

DataList dataList = new DataList();
dataList.ID = "dlstUser";

然后:用c.FindControl("lblName")更改控制ID,无论控制和控制如何。您在模板用户控件中拥有的ID,并在按钮单击时或在您想要datalist的值的任何情况下使用以下代码。

DataList dataList = pnlDataList.FindControl("dlstUser") as DataList;
foreach (DataListItem dli in dataList.Items)
{
    ControlCollection controls = dli.Controls;
    foreach (Control c in controls)
    {
        Label lblName = c.FindControl("lblName") as Label;
    }
}

答案 1 :(得分:0)

您可以订阅DataList的 ItemDataBound 事件。

DataList dataList = new DataList();
dataList.ItemDataBound += dataList_ItemDataBound;

并在事件处理程序中:

void dataList_ItemDataBound(object sender, DataListItemEventArgs e)
{
      var item = e.Item.DataItem as DataRowView;
}