Frage

Ich bin neu in Benutzersteuerelementen, nur eine bisher geschaffen zu haben, so mit mir tragen. Ich habe heute gelesen, dass Benutzersteuerelemente sollen in sich geschlossene sein und nicht vom übergeordneten Container auf Informationen zu verlassen. Ich bekomme, dass ein Teil, aber was ich habe Probleme beim Verständnis ist die „richtige“ Art und Weise meines Programm zu entwerfen, um diesen Grundsatz.

Ich mache ein Web-Formular in C #, in dem eine Seite mit einem Usercontrol in dieser Seite gibt. Ich habe die Usercontrol in seiner ascx Datei gemacht und zog sie in meine Aspx-Seite. Die Usercontrol ist ein paar Datumsfelder und ein gridview die Ergebnisse einer gespeicherten SQL-Prozedur zu zeigen.

Ich möchte wirklich diese Kontrolle wieder zu verwenden, aber ich kann nicht herausfinden, wie man „sagen“ das Usercontrol, was Prozedur gespeichert Ich mag für die spezifische Seite auszuführen Ich bin auf den „don ohne zu verletzen‘ t verlassen sich auf den übergeordneten Container“-Regel.

Danke

War es hilfreich?

Lösung

Verlassen Sie sich nicht auf den übergeordneten Container bedeutet nicht, können Sie nicht kommunizieren. Expose eine Eigenschaft in der Benutzersteuerung, die die Eltern gesetzt werden. Aber einen Standardwert hat, damit es nicht zum Absturz bringen.

Auch wenn dies eine sehr spezifische Kontrolle ist, gibt es keinen Grund, es wäre schlecht auf die Eltern angewiesen. Es ist vielleicht nicht ideal sein, aber Sie würden eine Trennung von Code, um die Benutzersteuerung zur Verfügung zu stellen werden.

Andere Tipps

Ihre Steuerung braucht nicht zu wissen, wo es die Daten kamen. Es braucht nicht anderes über die gespeicherte Prozedur oder irgendetwas wissen. Alles was es braucht zu wissen, sind die Daten, die sie zeigen muss. Wenn ich Ihre Steuer richtig verstehen, dann ist es ein Gitter mit einigen Datumsfiltern. Es werden die Daten empfangen, diese Daten zeigen, und filtern sie nach dem Datum. Das ist in Ordnung, alles was man wissen muss, um die Daten zeigen muss und und vielleicht ein Standard-Start- und Enddatum der Mutter.

Sie verpassen auf die wahre Macht der Bedienelemente, wenn Sie es nicht erlauben, zu kommunizieren, damit Eltern. Ich denke, man kann Verkapselung ein wenig zu weit in diesem Fall statt.

Angenommen, Sie ein Benutzersteuer hat, die nur eine Tabelle oder ein gridview verschiedenen Benutzerdaten. Unvermeidlich, dass Benutzer die Steuerung benötigen, um die eindeutige Kennung des Benutzers, um zu wissen, dass es die Daten aus zu ziehen, wo immer es ist, was natürlich zwingt Sie eine öffentliche Eigenschaft zu machen, die die übergeordnete Seite festlegen.

Auch im Auge behalten, dass es Zeiten geben, wenn eine Aktion innerhalb einer Benutzersteuerung muss eine Aktion auf dem Elternteil auszulösen. Event-Teilnehmer kommen hier ins Spiel, und sie sind sehr nützlich und, meiner Meinung nach, machen Benutzer steuert noch nützlicher.

Legen Sie einfach die ganze Idee über Bedienelemente und Eltern nicht hin und her reden, und Sie werden die Dinge viel einfacher zu finden.

Sie haben also ein paar Dinge in dieser Benutzersteuerung, die zu einem Datensatz Databind wird, die von der gespeicherten Prozedur zurückgegeben wird?

Hier ist eine Möglichkeit, es zu handhaben: Statt die gespeicherte Prozedur der Benutzersteuerung, stellen die Datenmenge, die der Benutzer Steuerung stützen sich auf eine öffentliche Eigenschaft des Benutzerkontrolle.

zu versuchen, zu kommunizieren,

Zur Laufzeit Ihres Code, der außerhalb der Benutzersteuerung ist, wird den entsprechenden gespeicherte procecure, und stellen Sie die Daten-Set-Eigenschaft auf Ihrer Benutzersteuerung auf das Ergebnis zurück durch die gespeicherte Prozedur ausgeführt werden.

Wie alle anderen darauf hingewiesen hat, Benutzersteuerung muss der Kommunikation seine Absichten und Verhaltensweisen einen Standard haben. Dies bedeutet nicht, dass Sie einen Verweis auf die Behälter haben müssen, und deshalb wissen, was (MyPage.aspx) es tatsächlich enthält.

Die Sache, die ich gefunden habe, unverzichtbar, während mit Benutzersteuerungen arbeitet, an Veranstaltungen. Erfahren Sie Veranstaltungen und wie sie verwendet werden. Veranstaltungen sind eine gute Möglichkeit, das Verhalten der Kommunikation.

In Ihrem Beispiel kann ich Ihren Kriterien (Datum area per) in seine eigene Benutzersteuerung aufzuschlüsseln. Erstellen Sie eine neue Klasse, die von EventArgs erbt, die Ihren Kriterien enthält (DateTime Felder). Wenn der Benutzer Suche klickt, feuert ein Ereignis (vom Typ EventHandler<YourEventArgs>) mit Ihrem eigenen EventArgs. Die Seite wird das Ereignis behandeln, um die Datenbank abzufragen und dann die Ergebnisse geht in ein öffentlichen oder interne Verfahren auf Ihrer zweite Benutzersteuerung, die die Datensätze angezeigt werden.

Der Schlüssel ist hier, Ihre Kriterien Steuerung kann auf verschiedenen Seiten wiederverwendet wird, wenn Sie die Notwendigkeit des Aufrufs verschiedene gespeicherten Prozeduren haben. Denken Sie an Einsatz vs Update-Szenarien. Oft sind die UI-Elemente gleich. Sie können ein Steuerelement erstellen und es auf zwei verschiedenen Seiten mit zwei unterschiedlichen Verhaltensweisen verwenden (AddRecord.aspx und UpdateRecord.aspx). Auch Ihre Steuerung, die Datensätze anzeigt, ist sehr leicht wiederverwendet werden.

Ein großer Vorteil ist, dass Ihre Seiten und Steuerelemente werden eher klein. Jede Steuer / Seite ist wirklich nur mit seinem kleinen Teil der Funktionalität betrifft. Ihr Code wird weniger abschreckend und leichter zu pflegen.

  

„sagen“, um das Usercontrol, was gespeicherte Prozedur ich laufen möchte

Klingt wie Sie für Veranstaltungen gesuchte / Delegierten
Haben die Steuerung ein Ereignis aussetzen, und lassen Sie die Eltern einen Handler hinzufügen (vielleicht im Konstruktor, wenn Sie möchten, um es zu zwingen eine hinzuzufügen und nur ein Ereignis)
Alternativ können Sie Befehl / Strategie-Muster verwenden -. Haben die Eltern die Methode kapseln, und an die Steuerung in den Konstruktor des Einbettungsobjekt senden

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top