Ich würde empfehlen, dies zu refactoring, so dass die Steuerelemente mithilfe einer allgemeinen Methode festgelegt werden. Zum Beispiel so etwas wie diese:
private SetupLabels(TrayDetails trayDetails)
{
this.label1.Text = (trayDetails != null) ? trayDetails.Id : string.Empty;
// Set more labels here
}
Mit diesem Ansatz, könnten Sie dann den folgenden:
Action FillData =() =>
{
SetupLabels(Right);
SetupLabels(Left);
}
Hinweis, wird dies nicht funktioniert ganz richtig, wie Sie die gleichen Etikett sind Einstellung in In beiden Fällen, also wenn Ihre Right
-Eigenschaft nicht null ist, werden die Beschriftungen festgelegt, und wenn die Left
-Eigenschaft auch nicht null ist, werden die Beschriftungen erneut geändert. Sie müssen dies also etwas ändern.
Die Idee ist das gleiche obwohl, wo Sie eine gemeinsame Methode haben, die Ihre Steuerelemente setzt und eine Instanz TrayDetails
nimmt. Wenn Sie versuchen, die Steuerelemente in einem bestimmten Teil Ihrer Seite einzurichten, können Sie sie in einen Container umbrechen und dann die Methode SetupLabels
aktualisieren, um den Containernamen zu übernehmen.
<asp:PlaceHolder id="LeftContainer" runat="server">
<asp:Label ID="label1" runat="server" />
<!--Other controls-->
</asp:PlaceHolder>
<asp:PlaceHolder id="RightContainer" runat="server">
<asp:Label ID="label1" runat="server" />
<!--Other controls-->
</asp:PlaceHolder>
Die SetupLabels Methode könnte dann wie folgt aussehen:
Angenommen, Sie WebForms verwenden, Sie so etwas wie diese verwenden könnte
private SetupLabels(TrayDetails trayDetails, string containerName)
{
PlaceHolder container = (PlaceHolder) Page.FindControl(containerName);
((Label) container.FindControl("label1")).Text = (trayDetails != null) ? trayDetails.Id : string.Empty;
// Set more labels here
}
Es ist immer noch ein bisschen von einer chaotischen Lösung, Sie haben jedoch eine genaue Kontrolle darüber, wie genau die Beschriftungen vom TrayDetails-Objekt ausgefüllt werden.
Wenn 'Right == null', wie würden Sie die Eigenschaften für ein Objekt festlegen, das nicht existiert? Wenn Sie 'Right' in diesem' else' Block instanziieren müssen, würde ich einfach den Konstruktor die Eigenschaftswerte auf 'string.Empty' setzen lassen. Ihr Code würde viel einfacher werden. –
@ Cᴏʀʏ Nun, ich kann das tun. aber mein existierender Code zum Setzen der Werte in meinem 'Right' oder' Left' ist generisch. Beispiel: 'details.Add (new TrayDetails() {OrderNo = dr.GetString (0)}' – Hexxed