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.

War es hilfreich?

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.

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