我有一个用代码构建的数据表,它可以动态地拥有任意给定数量的列。我必须通过添加基于第一列的新TableRow来对Gridview中的行进行分组。此要求意味着我无法使用AutoGenerateColumns。我在ItemTemplate中创建了一个表,我用它将行/单元格绑定到ItemDatabound事件中的列。这工作正常,并做我需要做的事情。我遇到的问题是我无法将标题绑定到列的名称。当我检查RowType是ItemDatabound上的Header时,我没有可用的e.Row.DataItem,因为它从第一个数据行开始。因此,我无法检查ColumnName与我要打印到该列的标题单元格的内容。
以下是我在DataRow上使用的代码(代码在Delphi.net中,但如果你也使用c#或VB,你应该可以获得gyst):
if (e.Row.RowType = DataControlRowType.DataRow) then begin
if panlViewAllResults.Visible then begin
for i := 0 to lDataRow.DataView.Table.Columns.Count - 1 do begin
if Assigned(lDataRow.Item[i]) then begin
lCell := TableCell.Create;
lCell.Text := lDataRow.Item[i].ToString;
lRow1.Controls.Add(lCell);
end;
end;
lTable.Controls.Add(lRow1);
end;
end;
我以为我可以为标题做这样的事情。但显然不是:
if (e.Row.RowType = DataControlRowType.Header) then begin
for i := 0 to lDataRow.DataView.Table.Columns.Count - 1 do begin
if Assigned(lDataRow.Item[i]) then begin
lCell := TableCell.Create;
lCell.Text := lDataRow.DataView.Table.Columns[i].ColumnName;
end;
end;
end;
希望有人可以对此有所了解。我至少可以说有点坚持。
TIA 劳埃德
答案 0 :(得分:1)
您可以在OnDataBound事件中执行此逻辑。您需要循环遍历所有行,此时您将可以访问所需的所有数据。