使用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后,只显示标题文本。
如何在回发后保留列内容并获取其值?
答案 0 :(得分:0)
以编程方式创建模板列时,必须使用Page_Init事件在代码隐藏中完全生成网格。然后,您必须在代码隐藏中动态创建模板,并将它们分配给列的ItemTemplate和EditItemTemplate属性。要动态创建模板,必须定义实现ITemplate接口的自定义类。然后,您可以将此类的实例分配给GridTemplateColumn对象的ItemTemplate或EditTemplateTemplate属性。 块引用
必须在Page_Init事件处理程序中添加列模板,以便可以将模板控件添加到ViewState。 块引用
来源:Telerik
基本上,您需要在Page_Init中创建所有GridTemplateColumns。我们遇到了同样的问题,这种方法解决了这个问题。