我已经阅读了很多关于如何从页面中向DataGrid添加复选框列的文章,但是在继承控件时我找不到有关如何添加列的任何内容本身。
基本上,我知道我需要创建一个继承自ITemplate
的类。这些方面的东西:
public class SelectionCheckBoxTemplate : ITemplate {
public void InstantiateIn(Control container)
{
var checkbox = new CheckBox(...);
container.Controls.Add(checkbox);
}
}
然后,需要将此模板添加到TemplateColumn对象:
var checkBoxTemplate = new TemplateColumn();
checkBoxTemplate.ItemTemplate = new SelectionCheckBoxTemplate();
然而,这是我被卡住的地方。现在所有文章都显示将此TemplateColumn
对象添加到Page的DataGrid控件。但是,如果我通过继承它来扩展DataGrid呢?我尝试将此TemplateColumn添加到OnPreRender
内的Columns属性中,但没有任何反应。永远不会解雇SelectionCheckBoxTemplate
的{{1}}方法。任何帮助表示赞赏。谢谢!
答案 0 :(得分:0)
经过大量挖掘和尝试不同的解决方案之后,我发现需要在虚拟CreateColumnSet()
方法中添加该列。似乎没有记录在任何地方:
protected override ArrayList CreateColumnSet(PagedDataSource source, bool useDataSource)
{
var columns = base.CreateColumnSet(source, useDataSource);
var checkboxTemplate = new TemplateColumn();
checkboxTemplate.ItemTemplate = ...;
columns.Insert(0, checkboxTemplate);
return columns;
}