2009-11-02 10 views
1

J'ai un datalist dans un UserControl qui est chargé dans une page où les utilisateurs peuvent personnaliser un rapport basé sur des cases à cocher.ASP.NET C# - Suppression d'une colonne d'une datalist

L'une des cases à cocher, cependant, est « Masquer Worklog » qui devrait cacher la colonne worklog du jeu de résultats, car il peut être assez long et interférer avec le rapport.

Si je fais:

datatable1.Columns.Remove("WorkLog"); 

le code lance une exception parce que:

<asp:Label ID="WorkLog" runat="server" Text='<%# Bind("WorkLog") %>'></asp:Label></td> 

n'existe pas.

Vais-je sur le usercontrol tout faux? Ce contrôle utilisateur devrait toujours être capable d'afficher le journal de travail, donc je ne pense pas que ce soit mauvais de le lier là-dedans, mais en même temps je veux pouvoir le cacher si l'utilisateur le veut.

Répondre

2

Essayez de retirer le contrôle de l'étiquette de votre DataList au lieu d'enlever la colonne de la source de données (ie le DataTable)

DataList1.Controls.Remove(DataList1.FindControl("WorkLog")); 

Vous ne devriez pas recevoir d'erreur si La source de données contient plus de colonnes que vous affichez sur la page, cependant, vous obtiendrez une erreur, comme vous l'avez découvert, si vous essayez d'afficher une colonne qui n'existe pas dans la source de données.

+0

ouais .. mais pourquoi envoyer à travers les données quand il est pas nécessaire .. sauf si vous voulez le faire en utilisant AJAX ou quelque chose :) –

+0

Comment puis-je faire cela dans un datalist? – somacore

+0

J'ai révisé ma réponse. –

0

lier le code derrière après avoir vérifié certaines conditions. comme

if (visible) { 
    //bind 
} 

tout en retirant le contrôle

visible = false; 

vous devrez peut-être changer visible à la session var :)