在代码后台OnInit中,我添加了一些用于显示额外信息的列,这取决于页面是否需要。代码如下:
for (int i = 0; i < models.Length && i < 3; i++)
{
var model = models[i];
//Add gridview rows
BoundField bf = new BoundField();
bf.DataField = "Attribute" + i;
bf.HeaderText = model.AttributeName;
bf.Visible = true;
gvFiles.Columns.Insert(6 + i, bf);
}
代码没有问题,我可以获取列。在OnLoad事件中,我将某些数据绑定到gridview,这也很好用。
问题出现在postback时。每当页面创建一个postback时,它就会执行OnInit,然后崩溃,并显示此(“on page”)错误消息:
由于找不到ID为'ctl00$MainContent$gvFiles$ctl02$ctl00'的控件或在postback后将不同的控件分配给相同的ID,因此发生了错误。如果未分配ID,则显式设置引发postback事件的控件的ID属性以避免此错误。
我确定了TemplateField中引起问题的复选框,并给它赋予了一个ID。但是,现在在postback时会发生以下情况:
TemplateFields中的复选框不显示
其中一列是ImageField,它失去了“控件样式宽度/高度”参数,导致图像变得非常大。
问题仅在postback时发生,删除以编程方式添加列的代码会使一切正常工作。
我该如何解决这个问题?