在回发后,radgrid中动态生成的列消失

时间:2015-04-30 12:43:19

标签: telerik postback radgrid datagridtemplatecolumn

使用radgrid并在aspx中创建它但在某些操作中我将更多GridTemplateColumns添加到网格中。

private void CreateDateColumns(List<DateTime> occurenceList)
{
    if (occurenceList != null && occurenceList.Count > 0)
    {
        int index = 1;
        foreach (DateTime occurence in occurenceList)
        {
            string templateColumnName = occurence.Date.ToShortDateString();
            GridTemplateColumn templateColumn = new GridTemplateColumn();
            templateColumn.ItemTemplate = new MyTemplate(templateColumnName, index);
            grdStudentAttendanceList.MasterTableView.Columns.Add(templateColumn);
            templateColumn.HeaderText = templateColumnName;
            templateColumn.UniqueName = templateColumnName;

            index++;
        }
    }
}

private class MyTemplate : ITemplate
{
    protected RadComboBox rcbAttendance;
    private string colname;
    private int _index;
    public MyTemplate(string cName, int index)
    {
        colname = cName;
        _index = index;
    }
    public void InstantiateIn(System.Web.UI.Control container)
    {
        rcbAttendance = new RadComboBox();
        rcbAttendance.Items.Add(new RadComboBoxItem("---Select---", "-1"));
        rcbAttendance.Items.Add(new RadComboBoxItem("Present", "1"));
        rcbAttendance.Items.Add(new RadComboBoxItem("Absent", "2"));
        rcbAttendance.Items.Add(new RadComboBoxItem("Leave", "3"));
        rcbAttendance.ID = "rcbAttendance" + _index;
        container.Controls.Add(rcbAttendance);
    }
}

一切都很好,但是当我按下保存按钮或任何组合框进行回发时,唯一动态生成的列内容消失,其他列保持不变。 我注意到列中仍然存在带有headertext的列但只有内容消失了(在我的情况下内容是组合框)

为网格启用viewstate后,只显示标题文本。

如何在回发后保留列内容并获取其值?

1 个答案:

答案 0 :(得分:0)

  

以编程方式创建模板列时,必须使用Page_Init事件在代码隐藏中完全生成网格。然后,您必须在代码隐藏中动态创建模板,并将它们分配给列的ItemTemplate和EditItemTemplate属性。要动态创建模板,必须定义实现ITemplate接口的自定义类。然后,您可以将此类的实例分配给GridTemplateColumn对象的ItemTemplate或EditTemplateTemplate属性。   块引用

     

必须在Page_Init事件处理程序中添加列模板,以便可以将模板控件添加到ViewState。   块引用

来源:Telerik

基本上,您需要在Page_Init中创建所有GridTemplateColumns。我们遇到了同样的问题,这种方法解决了这个问题。