2009-06-10 20 views
1

Ich benutze ASP.NET Dynamic Data-Funktionalität, um etwas ein bisschen komisch zu machen. Erstellen Sie eine dynamische Liste von Feldern als untergeordnete Elemente des Hauptobjekts.Wie bekomme ich den Wert eines DynamicControl?

Also im Grunde habe ich Ticket.Fields. Die Hauptseite listet alle Felder für Ticket auf, und die Fields-Eigenschaft verfügt über ein DynamicControl, das eine Liste der Steuerelemente zum Sammeln weiterer Daten generiert.

Der schwierige Teil ist, dass diese Liste auch dynamische Daten verwendet, um die Steuerelemente zu generieren, so dass jedes Feld kann eine der definierten FieldTemplates sein ... was bedeutet, dass ich nicht unbedingt weiß, was die eigentliche Datenkontrolle sein wird, wenn ich es versuche um den Wert zu erhalten.

Also, wie bekomme ich den Wert eines DynamicControl?

Muss ich eine neue Unterklasse von FieldTemplate erstellen, die eine Möglichkeit bietet, den Wert zu erhalten?

Antwort

0

Es ist erstaunlich, was ein guter Schlaf tun wird.

Nun, das und geht nur zu verlängern FieldTemplate es bereits zu realisieren für Sie die Datensteuerung aussetzt ...

foreach (ListViewDataItem i in lvFields.Items) 
    {   
     var val = i.FindDynamicControlRecursive("ValueText") as DynamicControl; 
     var ft = val.FindFieldTemplate("ValueText") as FieldTemplateUserControl; 

     ParseControl(ft.DataControl) 
    } 

ParseControl wird hier aus, aber ich habe tatsächlich eine Klasse herumliegen können damit umgehen dieser Teil für mich ... hoffentlich werden zukünftige Leser zumindest auf die Idee kommen.

Das wichtige Bit besteht darin, das Ergebnis von FindFieldTemplate in FieldTemplateUserControl zu konvertieren. Aus irgendeinem Grund gibt es nur Control zurück, obwohl es so aussieht, als ob es nur FieldTemplateUserControls zurückgeben könnte. Ich denke, Sie könnten überschreiben, was Feldvorlagen sind, indem Sie die Feldgeneratorklasse ändern ... aber immer noch.

Verwandte Themen