我一直在编写网格视图的扩展,通过观察RowDataBoundEvent中所需项目的更改时间,将分组行添加到gridview。到目前为止看起来有点像这样:
protected override void OnRowDataBound(GridViewRowEventArgs args)
{
if (args.Row.RowType == DataControlRowType.DataRow)
{
object dataitem = args.Row.DataItem;
string currentValue = dataitem.GetType().GetProperty(GroupingColumn).GetValue(dataitem, null).ToString();
if (string.IsNullOrEmpty(previousValue) || currentValue != previousValue)
{
int currentRowIndex = args.Row.RowIndex + rowsAdded;
int colspan = this.Columns.Count - 1;
Label label = new Label { Text = currentValue, CssClass = "rowLabel" };
TableCell cell = new TableCell { ColumnSpan = colspan, CssClass = "groupHeader" };
GridViewRow newRow = new GridViewRow(currentRowIndex, currentRowIndex, DataControlRowType.DataRow, DataControlRowState.Normal);
cell.Controls.Add(label);
newRow.Cells.Add(cell);
((Table)args.Row.Parent).Controls.AddAt(currentRowIndex, newRow);
previousValue = currentValue;
rowsAdded++;
}
}
base.OnRowDataBound(args);
}
问题在于,当我单击分页按钮时,分页事件不会触发,并且添加的额外行将变为空行。页面回发,并通过页面加载等运行,但从未通过分页事件。我也在此扩展中内置了自定义分页,并且我的分页按钮的click事件也不会触发。直到第二次点击分页按钮才会发生分页。
我认为这种情况正在发生,因为在rowdatabound事件之前构造了分页行,在此期间创建了分页按钮并分配了它们的事件处理程序。但是,向基础表添加行会删除这些处理程序。任何人都知道如何确保自定义分页按钮触发?
编辑1:为了澄清,添加到数据源然后重新绑定将不起作用,因为没有额外的数据要添加。我试图实现的效果是这样的:
|第1组|
|项目1 |项目2 |项目3 |
|第4项|第5项|第6项|
|第2组|
|第7项|第8项|第9项|
答案 0 :(得分:1)
找到解决类似问题的解决方案。诀窍是在PrepareControlHierarchy事件中添加行。另外,请确保您的行类型为“标题”,否则自定义分页可能会产生一些令人讨厌的副作用。