2009-05-14 13 views
2

Ich bin auf der Suche nach einem Datepicker wie Microsoft bietet, aber es unterstützt keine Nullwerte, und da dies an ein Nullable-Feld in einer Datenbank gebunden ist, die nicht akzeptabel ist.Gibt es einen Nullable Datepicker, an den ich binden kann?

Ich fand this one, aber laut den Kommentaren am Ende der Seite hat es Probleme mit der Bindung an eine Datenbank. Ich habe auch eine in meinem Projekt, die ich geerbt habe, aber es hat ähnliche Probleme (manchmal zeigt es Werte, manchmal nicht). Kennt jemand eines, das funktioniert?

+0

Jemand hat über dieses Problem zu haben, kam vor und löste es, wahrscheinlich viel besser, als ich kann. Ich habe gesucht und habe keinen gefunden. Meine Frage ist, ob diese anderen Leute eine gefunden haben, die funktioniert. – Malfist

Antwort

-2

Warum verwenden Sie nicht einen clientseitigen Datepicker, um ein Textfeld zu füllen. Wenn das Textfeld leer ist, haben Sie ein Nulldatum, andernfalls konvertieren Sie den Wert.

jQuery hat einen schönen, einfach zu bedienenden Datumsauswahl. http://jqueryui.com

+0

Entschuldigung, das ist für eine Winforms App, nicht Web. – Malfist

+0

Es ist dumm anzunehmen, dass er über eine Webapp spricht, wenn er über C# spricht. – belgariontheking

+1

Hoppla, ja Entschuldigung. Die am meisten angenommene Antwort verwendet jetzt das gleiche Konzept, so offensichtlich ist das Konzept gültig. Mein Kopf steckt einfach im Internetland, denn dort verbringe ich meine Tage. – NerdFury

4

Verwenden Sie eine Datumsauswahl, um ein Textfeld zu füllen, und wenn das Feld null sein soll, löschen Sie einfach den Inhalt des Textfelds (und behandeln Sie dann die leere Eingabe entsprechend).

Dies bietet auch den zusätzlichen Vorteil, dass der Benutzer ihr Datum eingeben kann, wenn sie dies wünschen.

+0

Einverstanden. Oder haben Sie ein Kontrollkästchen, das es aktiviert und deaktiviert. Mach die Dinge nicht zu kompliziert. – Pesto

+0

Die beste Lösung ist oft die einfachste Lösung. – TheTXI

1

Der Smart FieldPackEditor verfügt über einen Datapicker, der Nullwerte enthalten kann. Ich glaube, es tut alles, was Sie brauchen. Ich wünschte, das wäre da, wenn ich mit solchen Dingen zu tun hätte. Ich erinnere mich noch an alle Problemumgehungen, die ich mit Microsofts Datepicker-Steuerelement implementieren musste. Uggh!

http://www.visualhint.com/index.php/fieldpackeditor/

-3

Dies scheint zu funktionieren, einer meiner Mitarbeiter hatte:

using System; 
using System.Windows.Forms; 

namespace CustomControls 
{ 
    public class NullableBindableDateTimePicker : System.Windows.Forms.DateTimePicker 
    { 
     private Boolean isNull = false; 
     private DateTimePickerFormat baseFormat = DateTimePickerFormat.Short; 
     private Boolean ignoreBindOnFormat = false; 

     public NullableBindableDateTimePicker() 
     { 
      this.Format = baseFormat; 
      if (baseFormat == DateTimePickerFormat.Custom) this.CustomFormat = " "; 
     } 

     public Boolean IsNull 
     { 
      get { return isNull; } 
      set 
      { 
       isNull = value; 
       this.Checked = value; 
      } 
     } 

     //TODO: Add BaseCustomFormat 

     public DateTimePickerFormat BaseFormat 
     { 
      get { return baseFormat; } 
      set { baseFormat = value; } 
     } 

     public object BindMe 
     { 
      get 
      { 
       if (IsNull) return System.DBNull.Value; 
       else return base.Value; 
      } 
      set 
      { 
       //String s = this.Name; 

       if (ignoreBindOnFormat) return; 

       if (System.Convert.IsDBNull(value)) 
       { 
        // for some reason setting base.format in this.format calls set BindMe. 
        // we need to ignore the following call 
        ignoreBindOnFormat = true; 
        this.Format = DateTimePickerFormat.Custom; 
        ignoreBindOnFormat = false; 

        this.CustomFormat = " "; 
        IsNull = true; 
       } 
       else 
       { 
        ignoreBindOnFormat = true; 
        this.Format = baseFormat; 
        ignoreBindOnFormat = false; 

        if (baseFormat == DateTimePickerFormat.Custom) this.CustomFormat = " "; 
        IsNull = false; 
        base.Value = (DateTime)value; 
       } 
      } 
     } 

     protected override void OnKeyDown(KeyEventArgs e) 
     { 
      base.OnKeyDown(e); 

      if (e.KeyCode == Keys.Delete) 
      { 
       this.BindMe = DBNull.Value; 
      } 
     } 

     protected override void OnCloseUp(EventArgs eventargs) 
     { 
      base.OnCloseUp(eventargs); 
      BindMe = base.Value; 
     } 
    } 
} 
+0

Ich nehme an, du hast ihn gefragt, bevor du hier seinen Code postest ... – Shog9

+0

aye, ich tat es. Es machte ihm nichts aus. – Malfist

Verwandte Themen