2008-08-28 5 views
7

Voici la situation: J'ai besoin de lier un WPF FixedPage par rapport à un DataRow. Les liaisons ne fonctionnent pas contre DataRows; ils travaillent contre DataRowViews. Je dois le faire de la manière la plus générique possible, car je ne sais rien et n'ai aucun contrôle sur ce qui est dans le DataRow. Ce dont j'ai besoin, c'est de pouvoir obtenir un DataRowView pour un DataRow donné. Je ne peux pas utiliser la méthode Find() sur le DefaultView parce que cela prend une clé, et il n'y a aucune garantie que la table aura un jeu de clés primaires.Obtenez le DefaultView DataRowView à partir d'un DataRow

Quelqu'un a une suggestion quant à la meilleure façon de contourner ce problème?

Répondre

6

Non Exactement un morceau de code sexy, mais leur apparence ne semble pas être un moyen automatisé de trouver la ligne sans boucler la table.

 DataRowView newRowView = null; 
     foreach (DataRowView tempRowView in myDataTable.DefaultView) 
     { 
      if (tempRowView.Row == rowToMatch) 
       newRowView = tempRowView; 
     } 
     if (newRow != null) 
      UseNewRowView(newRowView); 
     else 
      HandleRowNotFound(); 
+0

Hey, il m'a seulement fallu 4-5 ans. – Will

3
row.Table.DefaultView[row.Table.Rows.IndexOf(row)] 

Ceci est une bonne réponse. Mais si vous vous trouvez dans cette situation, vous devriez envisager d'en savoir plus sur DataViews et comment ils sont utilisés, puis refactoriser votre code pour être centré sur la vue plutôt que centré sur les tables.

+0

Ce n'est pas une bonne idée, si la vue par défaut a été filtrée, les index peuvent ne pas être alignés. –

+1

@JoelBarsotti: à moins de supprimer les tris/filtres avant de faire cela, vous pouvez ensuite les ajouter à nouveau. Mais une belle prise. Si vous avez une * meilleure réponse *, n'hésitez pas à la fournir et (si cela fonctionne) je serai heureux de la sélectionner comme meilleure. – Will

Questions connexes