Tom
Tom

Reputation: 1234

Dynamic Template Controls

On !PostBack dynamic templates are created based on the number of rows needed for check boxes. The control id's are chkbox_id. I am unable to retrieve the dynamic check boxes via the following code and NullReferenceException is always thrown.

The code before loops through the gridview rows, then datatable dt references the possible number of dynamic columns.

    for (int i = 0; i < dt.Rows.Count; i++)
    {
        string id = dt.Rows[i]["id"].ToString();

        CheckBox cb = (CheckBox)row.FindControl("ckbox_" + id);
        if (cb.Checked)
        { // do things  }

    }

Checkboxes defined here within page load:

if (!Page.IsPostBack)
{
    foreach (DataRow dRow in dt.Rows)
    {
        TemplateField ckhColumn = new TemplateField();
        ckhColumn.HeaderTemplate = new GridViewTemplate(ListItemType.Header, dRow["name"].ToString());
        ckhColumn.ItemTemplate = new GridViewTemplate(ListItemType.Item, "ckbox_" + dRow["id"].ToString());
        gvProductPriceList.Columns.Add(ckhColumn);
    }           
}

Let me know if I need to clarify anything else.

Upvotes: 0

Views: 196

Answers (1)

Mark Avenius
Mark Avenius

Reputation: 13947

I'm not positive on this, and I don't have a minute to try it, but it might work if you do a row.Parent.FindControl(...). Also, if you use the as operator instead of a direct cast, you won't have the null reference exception (i.e. you can check for it):

CheckBox cb = row.Parent.FindControl("ckbox_" + id) as CheckBox;
if (cb != null)
{
    // ...
}

Upvotes: 1

Related Questions