2009-07-09 8 views
0

J'ai reçu un contrôle utilisateur contenant un formulaire. Sur une page qui inclut le contrôle utilisateur, j'ai besoin de remplir le formulaire dans le contrôle utilisateur, lorsque l'utilisateur appuie sur un bouton.ASP.NET Contrôle utilisateur, liaison de données DataTable

Voici comment je l'ai fait, et il ne fonctionne pas:

User Control:

public partial class editUC : System.Web.UI.UserControl 
{ 
    public DataTable dataTable { set { UpdateForm(value); } } 

    protected void Page_Load(object sender, EventArgs e) { } 

    private void UpdateForm(DataTable dt) { txtControl.Text = dt.Rows..... ... } 
} 

Où updateForm lie différentes boîtes de texte.

Et la page contenant l'UC, quand un bouton a été cliqué:

EditUserControl.dataTable = dt; 

En cliquant sur le bouton, rien ne se passe. Qu'est-ce que j'oublie ici?

Merci d'avance.


MISE À JOUR:

Je suis un peu plus près. C'est parce que j'utilise une boîte de dialogue jQuery pour le contrôle utilisateur. Cela fonctionne si je supprime le jQuery.

Voilà comment je crée la boîte de dialogue:

$(document).ready(function() { 
    var dlg = $('.editFormDialog').dialog({ 
     autoOpen: false, 
     height: 650, 
     width: 550, 
     modal: true, 
     bgiframe: true, 
     title: 'Rediger', 
     open: function(type, data) { 
      $(this).parent().appendTo("form"); 
     } 
    }); 

    dlg.parent().appendTo("form"); 

    $('#btnEdit').live('click', function() { 
     $('.editFormDialog').css('visibility', 'visible'); 
     $('.editFormDialog').dialog('open'); 
    }); 
}); 

J'annexant à la forme, mais il ne fonctionne pas. Des idées?


2ème mise à jour:

Il fonctionne si je retire les panneaux de mise à jour de la page. Des idées? :-)

+0

Avez-vous ajouté un gestionnaire d'événements click pour votre bouton? – David

+0

La publication de la page sur le serveur lorsque le bouton est cliqué? – tbreffni

+0

Oui, c'est le cas. Tout est OK. En l'utilisant sur une autre partie de la page :) –

Répondre

0
  1. utilisez-vous Caching sur le contrôle? Si le contenu du contrôle est mis en cache à l'aide du mécanisme de mise en cache du contrôle ASP.NET, le texte du contrôle ne sera pas modifié.

  2. Pouvez-vous ajouter un point d'arrêt à l'intérieur du formulaire privé UpdateForm (DataTable dt) pour vous assurer que cette fonction est appelée lorsque vous cliquez sur votre bouton? En fonction de ce que le contrôle utilisateur contient, vous devrez peut-être faire un EditUserControl.DataBind();

  3. Si vous envoyez du code javascript (jquery) dans le cadre de la publication asynchrone de votre panneau de mise à jour, il est important de se rappeler que le javascript ne sera pas évalué par le navigateur. Vous devez trouver une autre méthode pour exécuter ce code après votre publication asynchrone.

Aussi, lorsque vous faites un postback async sur un contrôle UpdatePanel, tous les éléments DOM dans ce contrôle obtenir saccagé et remplacés par de nouveaux éléments. Les éléments jQuery doivent être recréés à nouveau.

+0

De plus, le contrôle de l'utilisateur est-il chargé de façon dynamique? Si c'est le cas, assurez-vous qu'il est chargé sur toutes les publications et que l'identifiant est conservé à chaque fois qu'il est chargé. Si l'ID change ou si le contrôle n'est pas rechargé, les événements et l'état d'affichage sont perdus sur le contrôle utilisateur. –

+0

1. Non - 2. Oui. Ça s'appelle. - 3. UpdateForm extrait les données de la table de données, en les «liant» aux zones de texte. L'appel de DataBind() n'aide pas. –

+0

L'UC est simplement inclus comme: . C'est dans un UpdatePanel si cela a quelque chose à dire? –

0

Les contrôles utilisateur ne sont pas conçus pour être aussi complexes que cela. Ils sont destinés à être une simple question de retirer une partie réutilisable du balisage, puis peut-être ajouter quelques propriétés, méthodes et événements. Ils ne sont pas destinés à la liaison de données. Vous devriez vraiment réécrire le contrôle de tihs comme un contrôle serveur composite. Cela dit, vous obtiendrez probablement le plus de traction possible en agissant comme si c'était un vrai contrôle du serveur. La liaison aux données se produirait dans l'événement DataBinding. Dans ce cas, vous devez définir la propriété DataSource de la grille, puis appeler DataBind sur la grille.

+0

Theres pas de grille dans mon contrôle utilisateur. Que voulez-vous dire? –

+0

Désolé, j'ai pensé que c'était une seule grille. Dans ce cas, vous devrez numériser les contrôles individuels. –

Questions connexes