2009-09-09 37 views
6

Sự kiện:DateTimePicker Giá trị mặc định: Cách tránh nó?

  • Tôi có TabControl với 2 Tab, Mỗi tab có 2 DateTimePicker.
  • Trong sự kiện Tải, tôi đặt giá trị của tất cả các DTP.
  • Tất cả DTP có ShowCheckBox được đặt đúng và Đã kiểm tra được đặt thành sai.
  • Khi tôi thực thi chương trình, DTP trong tab đầu tiên là OK, nhưng khi tôi kiểm tra DTP trên tab thứ hai, chúng hiển thị thời gian hiện tại, không phải thời gian tôi đặt trên sự kiện tải.

Tại sao điều này xảy ra? Làm thế nào tôi có thể tránh nó?

+0

+1 vì tôi nghĩ rằng tôi có vấn đề tương tự. – reverendlarry

Trả lời

1

workaround xấu xí của tôi về vấn đề này, bao gồm trên set active tab trong đó cư trú của DTP trước khi thay đổi giá trị của nó, một cái gì đó như thế này:

DateTime dat1 = DateTime.Today; 
DateTime dat2 = dat1.AddDays(1).AddSeconds(-1); 

dtpCreatedStart.Value = dat1; 
dtpCreatedEnd.Value = dat2; 
tbc.SelectTab(1); 
dtpModifiedStart.Value = dat1; 
dtpModifiedEnd.Value = dat2; 
tbc.SelectTab(0); 
0

DateTimePicker có một số vấn đề với việc lưu trữ và truy xuất giá trị của nó. Tôi đã gặp rắc rối khi ràng buộc giá trị với một DateTime không nullable - tôi đã nhận NullReferenceExeptions theo thời gian. Không biết tại sao hay khi nào. Nó đôi khi chỉ xảy ra và bị rơi ứng dụng.

0

Tôi vừa gặp sự cố tương tự khi sử dụng hai DateTimePickers. Tôi đã có thể nhận được cả hai người trong số họ để hiển thị giá trị chính xác bằng cách tạo động chúng và thêm chúng vào biểu mẫu.

3

Tôi đã phát hiện ra sự cố xảy ra ở đây.

Thuộc tính Value chỉ đặt giá trị mới nếu điều khiển DateTimePicker hiển thị. Nếu không thì lệnh bị bỏ qua.

Kiểm tra trường hợp:

Không làm việc:

this.picker = new DateTimePicker 
     { 
      Checked = false, 
      Font = new System.Drawing.Font("Verdana", 9.75F), 
      Format = System.Windows.Forms.DateTimePickerFormat.Time, 
      Location = new System.Drawing.Point(5, 5), 
      Name = "picker", 
      ShowUpDown = true, 
      Size = new System.Drawing.Size(120, 23), 
      Visible = false 
     }; 
     this.Controls.Add(this.picker); 
     this.picker.Value = this.picker.Value.Date.AddHours(1); 
     this.picker.Visible = true; 

trình:

this.picker = new DateTimePicker 
     { 
      Checked = false, 
      Font = new System.Drawing.Font("Verdana", 9.75F), 
      Format = System.Windows.Forms.DateTimePickerFormat.Time, 
      Location = new System.Drawing.Point(5, 5), 
      Name = "picker", 
      ShowUpDown = true, 
      Size = new System.Drawing.Size(120, 23), 
      Visible = false 
     }; 
     this.Controls.Add(this.picker); 
     this.picker.Visible = true; 
     this.picker.Value = this.picker.Value.Date.AddHours(1); 

Không xuất hiện để có bất cứ điều gì để làm với programatically thêm bảng chọn vẻ bề ngoài.

+0

hmmm ... điều này thật thú vị ... Tôi sẽ xem cách thức này có thể hiệu quả với tôi. – IAbstract

0

Nếu bạn không thể có được nó để làm việc, bạn có thể luôn thử sử dụng bộ chọn khác. Giá trị Any+Time(TM) Datepicker/Timepicker AJAX Calendar Widget kéo giá trị của nó từ trường được liên kết, vì vậy nếu bạn khởi tạo trường bằng giá trị hoặc thay đổi trường để có giá trị (chẳng hạn như khi tải), thì đó là những gì bạn sẽ nhận được khi bộ chọn được hiển thị. Và nếu bạn có vấn đề với nó, chỉ cần gửi một tin nhắn thông qua trang liên hệ, và nó sẽ được giải quyết càng sớm càng tốt.

3

Nó có liên quan đến thuộc tính Đã kiểm tra của bộ đếm dữ liệu. Nó thường được đặt thành false. Ít nhất đó là vấn đề với tôi.

Sau khi đặt datetimepicker.checked thành true, nó đã lấy giá trị từ cài đặt.

+0

Thực tế điều này đã giải quyết được vấn đề tương tự của tôi, kỳ lạ! – wpcoder

Các vấn đề liên quan