0

任意の数の列を動的に持つことができるコードに組み込まれているデータテーブルがあります。最初の列に基づいて新しい TableRow を追加して、Gridview 内の行をグループ化する必要があります。この要件は、AutoGenerateColumns を使用できないことを意味します。ItemDatabound イベントの列に対して行/セルをバインドするために使用している ItemTemplate 内にテーブルを作成しました。これはうまく機能し、私がする必要があることを行います。私が抱えている問題は、ヘッダーを列の名前にバインドできないことです。RowType が ItemDatabound のヘッダーであることを確認すると、これは最初のデータ行から始まるため、利用可能な 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;

誰かがこれに光を当てることができることを願っています。控えめに言っても、私は少し立ち往生しています。

ティアロイド

4

1 に答える 1

1

このロジックは、イベント OnDataBound で実行できます。すべての行をループする必要があり、この時点で必要なすべてのデータにアクセスできます。

于 2009-11-18T02:02:36.127 に答える