2009-11-18 5 views
0

Je dispose d'un datableau construit en code pouvant contenir dynamiquement un nombre donné de colonnes. Je dois regrouper les lignes dans Gridview en ajoutant un nouveau TableRow basé sur la première colonne. Cette exigence signifie que je ne peux pas utiliser les AutoGenerateColumns. J'ai créé une table dans un ItemTemplate que j'utilise pour lier les lignes/cellules aux colonnes de l'événement ItemDatabound. Cela fonctionne bien et fait ce que je dois faire. Le problème que j'ai est que je ne peux pas lier mon en-tête au nom des colonnes. Lorsque je vérifie que RowType est un en-tête sur ItemDatabound, je n'ai pas d'e.Row.DataItem disponible car cela commence sur la première ligne de données. Par conséquent, je ne peux pas vérifier quel est le nom de colonne avec lequel je veux imprimer dans la cellule d'en-tête de cette colonne.Liaison par programme d'un en-tête dans un Gridview

Voici le code que je utilise sur le DataRow (code est en Delphi.net mais vous devriez être en mesure d'obtenir le gyst si vous utilisez C# ou VB trop):

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; 

Je pensais que je pourrait faire quelque chose comme ça pour l'en-tête. Mais apparantly pas:

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; 

quelqu'un Espérant peut jeter un peu de lumière à ce sujet. Je suis un peu coincé pour dire le moins.

TIA Lloyd

Répondre

1

Vous pourriez faire cette logique en cas OnDataBound. Vous aurez besoin de parcourir toutes vos lignes et vous aurez accès à toutes les données dont vous avez besoin à ce stade.

Questions connexes