2009-05-14 4 views
2

Я ищу дампикера, как то, что предоставляет microsoft, но он не поддерживает нулевые значения, и поскольку это привязано к допустимому полю в базе данных, которая неприемлема.Есть ли значение nullpicker, с которым я могу привязываться?

Я нашел this one, но в соответствии с комментариями в нижней части страницы у него есть проблемы со связыванием с базой данных. У меня также есть один в моем проекте, который я унаследовал, но он имеет похожие проблемы (иногда он показывает значения, иногда это не так). Кто-нибудь знает о том, что работает?

+0

Кто-то, что пришли на эту проблему, прежде чем и решить ее, вероятно, гораздо лучше, чем я мог. Я посмотрел и не нашел его. Мой вопрос в том, что эти люди нашли тот, который работает. – Malfist

ответ

-2

Почему бы не использовать datepicker на стороне клиента, чтобы заполнить текстовое поле. Если текстовое поле пуст, то у вас есть нулевая дата, иначе конвертируйте значение.

jQuery имеет приятный прост в использовании datepicker. http://jqueryui.com

+0

извините, это для приложения winforms, а не для сети. – Malfist

+0

Глупо предположить, что он говорил о webapp, когда говорит о C#. – belgariontheking

+1

К сожалению, жаль об этом. Самый верный ответ теперь использует ту же концепцию, хотя, очевидно, концепция действительно. Моя голова просто застряла в интернет-земле, так как я провел свои дни. – NerdFury

4

Используйте сборщик дат, чтобы заполнить текстовое поле, и если они хотят, чтобы поле было нулевым, просто удалите содержимое текстового поля (а затем обработайте пустой ввод соответственно).

Это также дает дополнительное преимущество, позволяющее пользователю вводить дату, если они того пожелают.

+0

Согласовано. Или установите флажок, который включает и отключает его. Не переусердствуйте. – Pesto

+0

Лучшее решение часто является самым простым решением. – TheTXI

1

У Smart FieldPackEditor есть датпикер, который может быть обнулен. Я считаю, что он делает все, что вам нужно. Я бы хотел, чтобы это было вокруг, когда я имел дело с такими вещами. Я все еще помню все обходные пути, которые мне пришлось реализовать с помощью элемента управления datepicker от Microsoft. Uggh!

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

-3

Это один, кажется, работает, один из моих коллег было это:

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

Я предполагаю, что вы спросили его, прежде чем публиковать свой код здесь ... – Shog9

+0

aye, я сделал это. Он не возражал. – Malfist

Смежные вопросы