2010-05-20 4 views
8

donc pour les deux sens (bidirectionnel) databinding en ASP, nous le faisons ...données ASP.NET se lient à deux voies, bidirectionnel à partir du code derrière

<asp:textbox id="txtField" runat="server" 
    text='<%# Bind("SomeField") %>'> 
</asp:textbox> 

SomeField est situé sur la DataSource de DetailsView qui sert de conteneur pour la zone de texte.

Sinon je pourrais le faire à partir du code-behind (en utilisant l'événement de zone de texte OnDataBinding):

protected void SomeField_OnDataBinding(object sender, EventArgs e) 
{ 
    ((TextBox)sender).Text = Eval("SomeField").ToString(); 
} 

Cependant, EVAL est en lecture seule ... Comment puis-je spécifier Bind (dans les deux sens) à partir du code -derrière?

Répondre

3

J'ai réussi à trouver une solution de rechange pour mon "edge-case". J'utilise des sous-types LLBLGen et j'ai donc besoin de changer la source de données de la vue détaillée en fonction d'un filtre radiobutton sélectionné par l'utilisateur.

J'ai essayé de lier au champ de sous-type "déclarative" en ASP utilisant <% # Bind (... Cela ne fonctionne pas.

je devais résoudre à un code-behind "hack" où J'affichage conditionnellement les commandes de la detailsview en utilisant la méthode pré-rendu details_view.

pour chaque champ, je puis la configuration conditionnelle, il est à sens unique (lecture seule) se lient à OnDataBinding ...

e.g. ((TextBox)sender).Text = Eval("FilePrefix").ToString(); 

Finaly à obtenir les données pour pousser dans la source de données, je pirater les événements DetailsView OnItemInserting/de mise à jour (sous condition, ainsi) ...

e.Values["FilePrefix"] = txtFilePrefix.Text; 

je me sens si sale après ce hack, je pense que je besoin d'une douche ...

J'espère encore Quelqu'un peut fournir une approche plus propre :-)

+1

+1 pour "dirty hack", maintenant je me sens comme un hacker :) –

0
+0

La méthode Eval (unidirectionnelle) fonctionne. Je veux que Bind (bidirectionnel) fonctionne. Aussi, je n'utilise pas un répéteur, mais une vue détaillée. – Konrad

+0

Je pense que je suis probablement en train de mal comprendre votre problème. Il n'y a vraiment pas de liaison bidirectionnelle. Vous pouvez définir la valeur du contrôle dans la page .aspx ou dans le code-behind. Pour récupérer la valeur (c'est-à-dire l'entrée de l'utilisateur), vous devez accéder à la propriété Text du contrôle. Qu'est-ce que "SomeField". Une propriété sur la classe code-behind? –

+0

Somefield si une colonne de table située sur le DataSource de DetailsView qui sert de conteneur pour la zone de texte. Je souhaiterais que la zone de texte envoie les données dans la base de données. C'est pourquoi j'ai besoin d'utiliser Bind. C'est vraiment simple. Sauf qu'il ne semble pas être facilement disponible à partir de codebehind. En utilisant <% # Bind (oui, mais pas aussi facile dans le code ... – Konrad

Questions connexes