Dùng DateTime.TryParse(strDate) trước khi gán vào DateTimePicker.
khi tôi chọn DL trên listview và gán vào datetimepicker thì đến những giá trị ngày lớn hơn 12 nó báo lỗi
ví dụ có giá trị ngày trên listview là 13-03-1983 thì nó báo lỗi String was not recognized as a valid DateTime mặc dù tôi đã đặt thuộc tính .customformat của datetimepicker là dd-MM-yyyy
tôi nghĩ cái datetimepicker nó luôn chỉ hiểu kiểu tháng ngày năm cho dù định dạng thế nào đi nữa nên nó mới báo lỗi như vậy,ko biết phải giải quyết sao bây giờ
Sống ở trên đời cần có một TẤM LÒNG để lúc đói còn có chỗ mà nhét THỨC ĂN
Dùng DateTime.TryParse(strDate) trước khi gán vào DateTimePicker.
ko ăn thua bạn ơi
cái tryparse property có 2 tham số,mà tôi lại ko biết tham số thứ 2 nên truyền giá trị gì,tôi dùng parse property có 1 tham số là chuỗi datetime thì vẫn báo lỗi tương tự
đây là cái chuỗi datetime tôi lấy từ listview ListView1.Items[selNdx].SubItems[3].Text
PHP Code:if (ListView1.SelectedIndices.Count <= 0)
{
return;
}
int selNdx = ListView1.SelectedIndices[0];
if (selNdx >= 0)
{
dTPNgaysinh.Text =DateTime.Parse(ListView1.Items[selNdx].SubItems[3].Text).ToString();
}
Sống ở trên đời cần có một TẤM LÒNG để lúc đói còn có chỗ mà nhét THỨC ĂN
Anh thử code này xem:
Do không có điều kiện,em thử trên listboxCode:if (listView1.SelectedIndices.Count <= 0) { return; } int selNdx = listView1.SelectedIndices[0]; if (selNdx >= 0) { dateTimePicker1.Text = Convert.ToDateTime(listView1.Items[selNdx].SubItems[3].Text).ToString(); }, chắc là listview sẽ thành công
AI NÂNG MÌNH LÊN SẼ BỊ HẠ XUỐNG VÀ AI HẠ MÌNH XUỐNG SẼ ĐƯỢC NÂNG LÊN
![]()
cũng ko ăn thua đâu em ơi,anh thử tất cả các cách rồi
bây giờ bỏ qua cái listview đi,đừng quan tâm nhé
giả sử có đoạn code này
vẫn lỗi là sao,cho dù có đặt kiểu hiển thị của datetimepicker là gì đi nữa cũng có cái lỗi tương tự như trênCode:string strDate="13-03-1983"; //dateTimePicker1.text=strDate; dateTimePicker1.text=convert.todatetiem(strDate).tostring();
thực sự là bó tay với cái dateTimePicker này rồi,nếu để giá trị trên listview đúng như giá trị trong database thì ko có vấn đề gì,set customformat="dd-MM-yyyy" cho dateTimePicker thì nó chuyển về đúng,nhưng khổ nỗi trong database field ngaythang lại chứa cả thời gian nên khi hiện lên listview thì xấu quá,định dạng lại trên listview cho về "dd-MM-yyyy" thì lại lỗi với cái dateTimePicker
có cách giải quyết là mỗi lần selected index trên listview thì dùng câu truy vấn với điều kiện id được lấy từ 1 cột trên listview,lấy được DL ngaythang nguyên thủy(có cả phần thời gian trong đó) rồi đặt customformat="dd-MM-yyyy" sẽ cho kết quả mong muốn và ko có vấn đề gì,nhưng như thế thì mỗi lần kick vào listview lại phải kết nối với database để lấy DL,mà anh lại muốn lấy trực tiếp giá trị ngaythang trên listview đưa vào dateTimePicker,vừa ko phải kết nối,hơn nữa CT chạy đỡ chậm hơn,nhưng cái lỗi kia làm đau đầu quá
Đã được chỉnh sửa lần cuối bởi thanhlv : 28-10-2007 lúc 02:47 PM.
Sống ở trên đời cần có một TẤM LÒNG để lúc đói còn có chỗ mà nhét THỨC ĂN
Oh mein God, thuộc tính Text là caption của datetimepicker mà bạn. Muốn set ngày cho datetimepicker bạn dùng thuộc tính Value của nó ví dụ:
dateTimePicker1.Value = DateTime.Parse("13-03-1983");
ừ,phiền bạn vất vả trả lời quá,nhưng tôi thử hết các kiểu gán rồi,kể cả dùng .value
hơn nữa,nếu ta chỉ gán chuỗi "string" vào .text của dateTimePicker1 mà nó còn ko nhận và nói sai kiểu datetime (cái control này nguyên tắc quá) thì làm sao mà gán vào thuộc tính .value của nó được(nếu nó ko báo thêm 1 cái lỗi nào nữa là còn may đấy)
với lại như bài đầu tiên mình đã nói,chỉ có những giá trị có phần ngày lớn hơn 12 thì nó mới sinh cái lỗi này,vì vậy đâu có liên quan đến .value hay . text
Sống ở trên đời cần có một TẤM LÒNG để lúc đói còn có chỗ mà nhét THỨC ĂN
Có 2 cách giải quyết"
- Cách 1: bạn cứ truyền vào theo định dạng "MM-dd-yyyy", vì format cho DateTimePicker vẫn là "dd-MM-yyyy" nên dù truyền theo định dạng trên thì nó vẫn hiển thị theo ngày tháng năm. Tức là:
dateTimePicker1.Value=Convert.ToDateTime("13-02-1983"); //cái này lỗi
dateTimePicker1.Value=Convert.ToDateTime("02-13-1983"); //không lỗi
- Cách 2: nếu bạn vẫn muốn dùng chuỗi "13-02-1983" thì nên dùng đối tượng CultureInfo trong namespace System.Globalization như sau:
using System.Globalization;
. . .
. . .
string s = "13-02-1983";
CultureInfo vn = new CultureInfo("vi-VN");
dateTimePicker1.Value=Convert.ToDateTime(s,vn);
Thân.
Dưới đây là source code của property Text và Value của DateTimePicker control. Cậu thanhlv xem thử để phát hiện mình sai ở đâu:
Code:[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden), Browsable(false), EditorBrowsable(EditorBrowsableState.Advanced)] public override string Text { get { return base.Text; } set { if ((value == null) || (value.Length == 0)) { this.ResetValue(); } else { this.Value = DateTime.Parse(value, CultureInfo.CurrentCulture); } } } [Bindable(true), RefreshProperties(RefreshProperties.All), SRDescription("DateTimePickerValueDescr"), SRCategory("CatBehavior")] public DateTime Value { get { if (!this.userHasSetValue && this.validTime) { return this.creationTime; } return this.value; } set { bool flag = !DateTime.Equals(this.Value, value); if (!this.userHasSetValue || flag) { if ((value < this.MinDate) || (value > this.MaxDate)) { throw new ArgumentOutOfRangeException("Value", SR.GetString("InvalidBoundArgument", new object[] { "Value", FormatDateTime(value), "'MinDate'", "'MaxDate'" })); } string text = this.Text; this.value = value; this.userHasSetValue = true; if (base.IsHandleCreated) { int wParam = 0; NativeMethods.SYSTEMTIME lParam = DateTimeToSysTime(value); UnsafeNativeMethods.SendMessage(new HandleRef(this, base.Handle), 0x1002, wParam, lParam); } if (flag) { this.OnValueChanged(EventArgs.Empty); } if (!text.Equals(this.Text)) { this.OnTextChanged(EventArgs.Empty); } } } }
thực ra tôi mới làm quen với C# ko lâu nên đoạn code của bạn tôi chưa hiểu dùng để làm gì,mong bạn có thể giải thích rõ hơn được ko
hơn nữa tôi ko sai đâu bạn ơi,chỉ là cái datetimepicker nó ko chấp nhận kiểu DL đó thôi
thực ra tôi đã giải quyết được vấn đề đó bằng cách khác rồi,nhưng tôi vẫn muốn hỏi bạn 1 việc
làm thế nào để truyền chuỗi "13-03-1983" vào datetimepicker mà nó ko báo lỗi,chỉ đơn giản vậy thôi
Sống ở trên đời cần có một TẤM LÒNG để lúc đói còn có chỗ mà nhét THỨC ĂN