2009-07-09 12 views
0

Ich habe ein Benutzersteuerelement mit einem Formular. Auf einer Seite, die das Benutzersteuerelement enthält, muss ich das Formular in dem Benutzersteuerelement ausfüllen, wenn der Benutzer eine Schaltfläche drückt.ASP.NET Benutzerkontrolle, Datenbindung DataTable

Heres, wie ich es getan habe, und es funktioniert nicht:

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..... ... } 
} 

Wo UpdateForm verschiedene Textfelder bindet.

Und die Seite der UC enthält, wenn auf eine Schaltfläche geklickt wurde:

EditUserControl.dataTable = dt; 

Klick auf die Schaltfläche, passiert nichts. Was fehlt mir hier?

Vielen Dank im Voraus.


UPDATE:

Ich habe ein bisschen näher. Das liegt daran, dass ich ein jQuery-Dialogfeld für das Benutzersteuerelement verwende. Es funktioniert, wenn ich die jQuery entferne. Diese

ist, wie ich den Dialog zu erstellen:

$(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'); 
    }); 
}); 

ich es in die Form am anhängen, aber es funktioniert nicht. Irgendwelche Ideen?


2. Update:

Es funktioniert, wenn ich die Update-Panels von der Seite zu entfernen. Irgendwelche Ideen? :-)

+0

Haben Sie einen Click-Event-Handler für Ihre Schaltfläche hinzugefügt? – David

+0

Wird die Seite beim Klicken auf die Schaltfläche an den Server gesendet? – tbreffni

+0

Ja, tut es. Alles ist in Ordnung. Verwenden Sie es auf einem anderen Teil der Seite :) –

Antwort

0
  1. verwenden Sie Caching auf der Steuerung? Wenn der Inhalt des Steuerelements mithilfe des ASP.NET-Steuer-Caching-Mechanismus zwischengespeichert wird, wird der Text des Steuerelements nicht geändert.

  2. Können Sie einen Haltepunkt innerhalb der privaten void UpdateForm (DataTable dt) hinzufügen, um sicherzustellen, dass diese Funktion aufgerufen wird, wenn Sie auf Ihre Schaltfläche klicken?

  3. Je nachdem, was das Benutzersteuerelement enthält, müssen Sie möglicherweise eine EditUserControl.DataBind();

  4. Wenn Sie JavaScript-Code (jquery) als Teil des asynchronen Postback-Fensters für das Update-Panel senden, ist es wichtig, dass JavaScript nicht vom Browser ausgewertet wird. Sie müssen eine andere Methode finden, um diesen Code nach Ihrem asynchronen Postback auszuführen.

Auch wenn Sie ein asynchrones Postbacks auf einer Update Kontrolle zu tun, alle DOM-Elemente in dieser Kontrolle bekommen durch neue Elemente im Papierkorb und ersetzt. Die jQuery-Elemente müssen erneut erstellt werden.

+0

Wird die Benutzersteuerung auch dynamisch geladen? Wenn dies der Fall ist, stellen Sie sicher, dass es auf alle Postbacks geladen wird und dass die ID bei jedem Laden gleich bleibt. Wenn sich die ID ändert oder das Steuerelement nicht erneut geladen wird, gehen Ereignisse und der Ansichtsstatus für das Benutzersteuerelement verloren. –

+0

1. Nein - 2. Ja. Es wird gerufen. - 3. Das UpdateForm entnimmt Daten aus der Datentabelle und bindet sie an Textfelder. Der Aufruf von DataBind() hilft nicht. –

+0

Die UC ist einfach enthalten wie: . Es ist in einem UpdatePanel, wenn das etwas zu sagen hat? –

0

Benutzersteuerelemente sollen nicht so komplex sein wie diese. Sie sollen eine einfache Sache sein, einige wiederverwendbare Markup-Teile herauszuziehen und dann vielleicht ein paar Eigenschaften, Methoden und Ereignisse hinzuzufügen. Sie sind nicht dazu gedacht, Daten zu binden. Sie sollten die Kontrolle als Composite-Server-Steuerelement wirklich neu schreiben.

Das heißt, Sie würden wahrscheinlich die meisten Vorteile daraus ziehen, indem Sie sich wie eine echte Serverkontrolle verhalten. Die Bindung an Daten würde im DataBinding-Ereignis auftreten. In diesem Fall sollten Sie die DataSource-Eigenschaft des Rasters festlegen und anschließend DataBind auf dem Raster aufrufen.

+0

Theres kein Gitter in meinem Benutzer Steuerelement. Was meinen Sie? –

+0

Sorry, dachte, es war ein einzelnes Gitter. In diesem Fall müssen Sie die einzelnen Steuerelemente databinden. –

Verwandte Themen