2010-03-02 13 views
0

Je voudrais définir le texte de deux étiquettes aux valeurs trouvées dans un FormView sur une page (dont les données proviennent d'un SQLDataSource.)Comment est-ce que je devrais mettre le texte d'une étiquette d'asp.net à une certaine valeur dans un autre contrôle?

Quelle est la meilleure façon de faire cela? J'envisage d'utiliser l'événement DataBound pour FormView pour définir le texte d'étiquette sur la valeur d'un champ dans FormView ou d'utiliser l'événement SQLDataSource Selected pour définir les étiquettes sur les valeurs récupérées par la requête. Puis-je utiliser l'événement Page_Load conjointement avec FormView?

La propriété FormView affiche uniquement l'une des deux valeurs, bien que l'autre valeur soit récupérée par SQLDataSource. Je ne suis pas familier avec l'accès aux structures de données derrière ces contrôles, mais comprendre les données sont là, donc je pourrais aussi bien l'utiliser plutôt que d'exécuter la même requête SQL deux fois.

Ma question est donc quel événement dois-je utiliser, à quel contrôle puis-je accéder aux données, et comment puis-je accéder aux données de ce contrôle?

Répondre

3

j'utiliser l'événement OnDataBound et obtenir la valeur de la source de données sous-jacente à l'aide:

lblExample.Text = ((DataRowView)((FormView)sender).DataItem)["fieldName"].ToString(); 

Hope it helps. // CeriQ

+0

J'ai trouvé une solution similaire après avoir posé ma question. J'ai essayé d'utiliser l'événement Page_Load et d'accéder directement au contrôle FormView directement (plutôt qu'en tant qu'expéditeur dans un événement associé.) Dans le contexte de l'événement Page_Load, FormView.DataItem renvoie null, alors que le débogueur montre qu'il contient en réalité un DataRowView avec le données que je veux accéder. – Matt

+0

Peu importe, lors de rechargements ultérieurs, il semble que c'était un coup de chance. – Matt

+0

Dans page_load, il n'y a aucune garantie que le formview sera rempli. En utilisant l'événement OnDataBound, vous ne vous déclenchez qu'une fois que vous avez des données ou que les données ont été modifiées (repeuplées). Vous n'avez pas besoin d'utiliser l'expéditeur de cours, vous pouvez simplement échanger (expéditeur (FormView)) avec l'ID du contrôle FormView. –

0

Si vous êtes juste essayer de mettre une étiquette, vient de mettre l'étiquette à l'événement Page_load:

myLabel.Text = « someValue »;

+0

Mais comment obtenir la valeur - si je la récupère du contrôle FormView, puis-je accéder à des valeurs qui ne sont pas affichées? SQLDataSource stocke-t-il les résultats de la requête dans une structure de données à laquelle j'ai pu accéder? – Matt

+0

Vous obtenez les valeurs en utilisant la méthode FindControl de FormView – citronas