2010-03-31 3 views
4

Comment est-il possible de modifier l'ordre affiché des colonnes à partir d'un DataTable?C#: Modification de l'ordre des colonnes lors de la liaison de DataTable à un GridView

Par exemple, dataTable "dt" contient deux colonnes "a" et "b". Je lie à un GridView comme ceci:

gridView.DataSource = dt; 
gridView.DataBind(); 

Mais je voudrais que le GridView pour afficher « b » premier (à gauche).

Point important: J'utilise ceci pour exporter vers Excel et il n'y a pas de sortie réelle à l'écran, en utilisant:

HtmlTextWriter htw = new HtmlTextWriter(sw); 
gridView.RenderControl(htw); 

Merci!

Répondre

5

oui vous pouvez le faire à l'avant. Quelque chose le long de ces lignes:

<asp:GridView runat="server" AutoGenerateColumns="false"> 
    <Columns> 
     <asp:BoundField DataField="b" /> 
     <asp:BoundField DataField="a" /> 
    </Columns> 
</asp:GridView> 

EDIT:

Pas de fin avant que vous dites? C'est cool - J'aime un défi:

  gridView.AutoGenerateColumns = false; 
     gridView.Columns.Add(new BoundField { DataField = "b" }); 
     gridView.Columns.Add(new BoundField { DataField = "a" }); 

(Il est cool de prendre C# 3 ces jours-ci ne l'est pas?)

+0

Merci, j'ai négligé de dire que je ne produis pas à l'écran mais à un fichier Excel, donc je n'ai pas de frontal où je peux changer ça. – Nir

+0

Homme, vous avez résolu tellement de problèmes avec cette solution, vous n'avez pas la moindre idée. Merci beaucoup ++ – Nir

+0

Si vous travailliez pour moi, vous auriez des ennuis! –

1

Cela vient dans une question d'entrevue assez souvent. Vous jetez le contenu d'une table dans un fichier Excel, ce qui est correct, et vous utilisez html dans xl, ce qui est correct. MAIS - vous prenez le contenu de la table de base de données et le placez en mémoire (DataTable). Au fil du temps, au fur et à mesure que ces données augmentent, il pourrait y avoir de plus en plus de mémoire sur le serveur, surtout s'il y a des demandes simultanées pour ce rapport !! Correctif: Utilisez à la place un DataReader et remplissez manuellement GridView (cela résout le problème que vous avez publié) - ou mieux encore utilisez quelque chose comme Simple OOXML et écrivez les données directement dans une représentation XML d'une feuille de calcul .xlsx.