2010-06-10 8 views
2

J'ai une GridView liée à un DataView. Certaines colonnes de la table DataView sont des clés étrangères aux tables associées (par exemple, Customer). Je veux aussi activer le tri pour ces colonnes, mais tout ce que je peux faire est de trier la clé étrangère (fiCustomer) et non le nom du client.Trier une colonne GridView associée à une autre table

J'ai essayé sans succès ("Vous ne trouvez pas la colonne ERP_Customer.CustomerName"):

<asp:TemplateField HeaderText="Customer" SortExpression="ERP_Customer.CustomerName" > 

A essayé aussi le DataViewManager, mais j'ai un problème pour détecter la table pour trier:

Dim daCharge As New ERPModel.dsERPTableAdapters.ERP_ChargeTableAdapter 
    daCharge.Fill(dsERP.ERP_Charge) 
    Dim viewManager As New DataViewManager(Me.dsERP) 
    viewManager.DataViewSettings(dsERP.ERP_Charge).RowFilter = filter 
    viewManager.DataViewSettings(dsERP.ERP_Charge).Sort = sort 'sort is the GridView's SortExpression 
    Me.GrdCharge.DataSource = viewManager.CreateDataView(dsERP.ERP_Charge) 

Je dois appliquer le tri sur une table distincte de DataViewManager, mais cette table serait différente sur les tables connexes. J'ai lié les TemplateColumns à Codebehind dans f.e RowDataBound-Event .:

Dim LblCustomer As Label = DirectCast(e.Row.FindControl("LblCustomer"), Label) 
LblCustomer.Text = drCharge.ERP_CustomerRow.CustomerName 'drCharge inherits DataRow 

Quelle est la méthode recommandée pour trier une GridView sur les colonnes liées à d'autres tables? Je pourrais construire une datatable personnalisée avec le nom de custom au lieu de la clé étrangère et lier cette colonne au TemplateField. Mais alors mon énorme ensemble de données dans le modèle n'a plus de sens.

EDIT: Il semble que ma question n'était pas claire ou trop spéciale. Peut-être que je peux le reformuler dans un terme plus général. J'ai un modèle avec un jeu de données. Je lie un Datatable (ERP_Charge) à mon GridView (en fait je prends un Dataview de cette Table). Dans ce Datatable sont des colonnes qui sont liées à d'autres Datatables dans le Dataset (les relations sont définies). Quand je veux rendre la grille triable, il n'y a pas de problème sur les colonnes qui appartiennent à ERP_Charge. Mais les colonnes avec des clés étrangères à l'autre table n'ont pas pu être triées parce que le Gridview montre f.e. pas le code client mais le nom du client. Je reçois le nom de fichier dans RowDataBound. Normalement, je voudrais rejoindre les tables et ajouter une colonne de données pour le nom de domaine. Ensuite, j'ai mis cette Datatable "virtuelle" comme Datasource de la Gridview et je suis capable de la trier. Mais je ne voulais pas créer les données dans la page à la volée (il appartient au modèle). Dois-je le définir dans le dataset-Designer? Je pensais qu'il serait suffisant de définir les relations dans l'ensemble de données.

MISE À JOUR: j'avais résolu mes problèmes de tri comme ci-dessous.

Cordialement

+1

Lisez votre question et avez rencontré le même problème. Avez-vous déjà envisagé d'utiliser Linq pour récupérer des objets et les utiliser comme source de données? Je trouve très pratique de sélectionner un résultat qui prend des colonnes de plusieurs tables jointes. – PeterFromCologne

+0

Je dois admettre que linq est encore une lacune dans ma connaissance. J'ai peur que cela me coûte trop de temps pour changer mon modèle pour utiliser linq et bien sûr apprendre les bases.Mais merci quand même pour la suggestion, je vais y réfléchir. –

Répondre

0

MISE À JOUR: J'avais résolu mes problèmes de tri de la manière suivante: j'ai changé DataSet dans le modèle et rejoint la table liée à la Main-Table (ERP_Charge). J'ai ajouté les colonnes à la Datatable (f.e. CustomerName) que je veux trier. Mais je l'ai fait sans l'enregistrer dans l'assistant de configuration du DataAdapter, car cela supprimerait toutes les commandes Update, Delete et InsertCommands. Par conséquent, j'ai changé seulement la SelectCommand avec celle qui a été générée à partir de l'assistant. Par conséquent, j'ai gardé l'avantage de mon Datamodel avec la possibilité de trier les colonnes de tables connexes. Peut-être que les requêtes sont un peu plus lentes maintenant à cause des jointures mais ça marche pour moi.

Questions connexes