以编程方式绑定Gridview中的标头

时间:2009-11-18 01:37:01

标签: asp.net gridview gridviewcolumn

我有一个用代码构建的数据表,它可以动态地拥有任意给定数量的列。我必须通过添加基于第一列的新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 劳埃德

1 个答案:

答案 0 :(得分:1)

您可以在OnDataBound事件中执行此逻辑。您需要循环遍历所有行,此时您将可以访问所需的所有数据。