dynamisch hinzufügen CalendarExtender zu Textbox Unterklasse Server-Steuerelement?
-
01-07-2019 - |
Frage
Ich versuche, ein Server-Steuerelement zu erstellen, die von TextBox erbt, das automatisch eine CalendarExtender attached to it. Ist es möglich, dies zu tun, oder ist meine neue Steuerung muß von Composite statt erben? Ich habe die ehemaligen versucht, aber ich bin nicht bei der einem Teil des Steuerzyklus klar, ich soll die neue Instanz des CalendarExtender zu schaffen, und welche Sammlung steuert ich soll es hinzuzufügen. Ich habe nicht in der Lage sein scheinen, um es auf die Seite oder der Form der Kontrollen Sammlung hinzuzufügen, und wenn ich es in die (TextBox) Kontrolle der Sammlung, erhalte ich keine der Pop-up-Kalender-Funktionalität.
Lösung
ich erreichte dies in einem Projekt eine Weile zurück. Um es zu tun ich ein Composite geschaffen, die sowohl die TextBox und die CalendarExtender enthält.
In der CreateChildControls
Methode des Composite verwende ich Code wie folgt aus:
TextBox textbox = new TextBox();
textbox.ID = this.ID + "Textbox";
textbox.Text = this.EditableField.TextValue;
textbox.TextChanged += new EventHandler(HandleTextboxTextChanged);
textbox.Width = new Unit(100, UnitType.Pixel);
CalendarExtender calExender = new CalendarExtender();
calExender.PopupButtonID = "Image1";
calExender.TargetControlID = textbox.ID;
this.Controls.Add(textbox);
this.Controls.Add(calExender);
Natürlich stellen Sie sicher, dass das Formular mit diesem Composite einen Toolkit-Skript-Manager hat.
Andere Tipps
Ich weiß, das ist ein alter Thread, aber ich stieß auf es, wenn ich eine ähnliche Frage hatte. Dies ist, was ich die Umsetzung beendet, und es funktioniert super. Wenn Sie die Kontrolle wollen einen Text sein, dann einfach den Extender während des Gesprächs abpumpen zu machen.
Imports System.Web.UI.WebControls
Imports AjaxControlToolkit
Public Class DateTextBox
Inherits TextBox
Private _dateValidator As CompareValidator
Private _calendarExtender As CalendarExtender
Protected Overrides Sub OnInit(ByVal e As System.EventArgs)
MyBase.OnInit(e)
_dateValidator = New CompareValidator
With _dateValidator
.ControlToValidate = ID
Rem set your other properties
End With
Controls.Add(_dateValidator)
_calendarExtender = New CalendarExtender
With _calendarExtender
.TargetControlID = ID
End With
Controls.Add(_calendarExtender)
End Sub
Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
MyBase.Render(writer)
_dateValidator.RenderControl(writer)
_calendarExtender.RenderControl(writer)
End Sub
End Class
Sie können ganz einfach Ajax-Kalender in benutzerdefinierten Server-Steuerelemente hinzufügen. Sie müssen zwei Referenz in Ihrer Anwendung hinzuzufügen. 1. AjaxControlToolkit.dll 2. System.Web.Extensions Mit Hilfe der zweiten Referenz werden wir alle die Eigenschaft „CalendarExtender“ get in Ihrem benutzerdefinierten Server-Steuerelemente.
Wenn Sie versuchen, Benutzer nicht zulassen, dass irgendetwas in dem Textfeld eingeben, sondern nur durch die Kalender-Extender gefüllt werden und dann versuchen Sie das ausgewählte Datum aus dem Textbox-Steuerelement erhalten kann es leere Zeichenfolge, wenn Sie die Textbox gesetzt haben Eigenschaft Readonly = "True".
Sein, weil nur lesen Kontrollen nicht zurück an den Server gesendet. Abhilfe hierfür ist die folgende:
protected void Page_Load (object sender, EventArgs e)
{
TextBox1.Attributes.Add ( "Nur-Lesen", "Read-only");
}
Hoffe, es hilft.