มีปัญหา เกี่ยวกับ Date Format ใน Datagrid ในส่วนของ asp:TemplateColumn ค่ะ
หนู ทำโปรเจ็คจบของมหาวิทยาลัยอยู่ค่ะ
แล้วหนูก็รู้สึกว่ามีปัญหาเกี่ยวกับ การแสดงวันที่ ในส่วนของ Data Grid ค่ะ
คือ หนูคิดว่า จะให้ Textbox นั้นแสดงค่า วันที่ เอาไว้ แล้วเวลาเก็บค่าก็เก็บ ค่าวันที่ใน Textbox เลย (คือ จะ label หรือ Textboxก็คงไม่ต่าง)
หลังจาก .. ที่ ได้ ลง datagrid แล้ว หนูก็ทำ ให้อยู่ในส่วนของ
Code (VB.NET)
<asp:TemplateColumn HeaderStyle-CssClass="Headerstyle" HeaderText="LastUpdateStatus">
<FooterTemplate>
<asp:TextBox id="txtAddLastUpdateStatus" runat="server" CssClass="txtbox1" Text='<%# Convert.ToDateTime(DataBinder.Eval(Container.DataItem,"LastUpdateStatus")).ToShortDateString() %>'>
</asp:TextBox>
</FooterTemplate>
</asp:TemplateColumn>
อันนี้ เป็นส่วนของ .. Item ใน Datagrid จะ เห็นว่า txtLastUpdateStatus คือ Textbox ที่รับค่า วันที่ ค่ะ
Code (VB.NET)
Protected Sub OrderStatusDatagrid_ItemCommand(ByVal source As Object, ByVal e As DataGridCommandEventArgs) Handles OrderStatusDatagrid.ItemCommand
If e.CommandName = "Add" Then
'*** OrderStatusID ***'
Dim txtOrderStatusID As TextBox = CType(e.Item.FindControl("txtAddOrderStatusID"), TextBox)
'*** OrderStatusName ***'
Dim txtOrderStatusName As TextBox = CType(e.Item.FindControl("txtAddOrderStatusName"), TextBox)
'*** LastUpdateStatus ***'
Dim txtLastUpdateStatus As TextBox = CType(e.Item.FindControl("txtAddLastUpdateStatus"), TextBox)
strSQL = "INSERT INTO OrderStatus (OrderStatusID,OrderStatusName,LastUpdateStatus) " & _
" VALUES ('" & txtOrderStatusID.Text & "','" & txtOrderStatusName.Text & "','" & txtLastUpdateStatus.Text & "') "
cmd = New SqlCommand(strSQL, con)
cmd.ExecuteNonQuery()
BindData()
End If
End Sub
พอ แสดงออกมา .. วันที่ มันกลายเป็นแบบนี้ : 1/1/0544 มีวิธีแก้ไขไหมค่ะTag : .NET, Ms SQL Server 2008, Web (ASP.NET), VB.NET, VS 2010 (.NET 4.x)
Date :
2012-09-07 02:12:32
By :
คุณหนูมือใหม่ค่ะ
View :
3231
Reply :
8
ลองดูพวก Culture ครับ
Code (VB.NET)
Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US")
Date :
2012-09-08 07:27:50
By :
mr.win
ตอนนี้ แสดงออกแล้วค่ะ ขอบคุณค่ะ ..
หนู ใช้ คำสั่งนี้ ไว้ที่ Page_load
Code (VB.NET)
Me.txtLastUpdateStatus.Text = Convert.ToDateTime(DateTime.Now, CultureInfo.CurrentCulture).ToString("d")
ส่วน ใน ส่วนของ aspx ใช้คำสั่งนี้ เป็นตัวแสดงค่ะ
Code (VB.NET)
<asp:Label id="lblLastUpdateStatus" CssClass="labelgrid" runat="server" Text='<%# Convert.ToDateTime(DataBinder.Eval(Container.DataItem,"LastUpdateStatus")).ToShortDateString() %>'></asp:Label>
Code (VB.NET)
Protected Sub OrderStatusDatagrid_UpdateCommand(ByVal source As Object, ByVal e As DataGridCommandEventArgs) Handles OrderStatusDatagrid.UpdateCommand
'*** OrderStatusID ***'
Dim txtEditOrderStatusID As TextBox = CType(e.Item.FindControl("txtEditOrderStatusID"), TextBox)
'*** OrderStatusName ***'
Dim txtEditOrderStatusName As TextBox = CType(e.Item.FindControl("txtEditOrderStatusName"), TextBox)
'*** LastUpdateStatus ***'
Dim txtEditLastUpdateStatus As TextBox = CType(e.Item.FindControl("txtEditLastUpdateStatus"), TextBox)
strSQL = "UPDATE OrderStatus SET OrderStatusID = '" & txtEditOrderStatusID.Text & "' " & _
" ,OrderStatusName = '" & txtEditOrderStatusName.Text & "' " & _
" ,LastUpdateStatus = '" & txtEditLastUpdateStatus.Text & "' " & _
" WHERE OrderStatusID = '" & OrderStatusDatagrid.DataKeys.Item(e.Item.ItemIndex) & "'"
cmd = New SqlCommand(strSQL, con)
cmd.ExecuteNonQuery()
OrderStatusDatagrid.EditItemIndex = -1
frame1.Visible = True
frame2.Visible = True
BindData()
End Sub
ทุกอย่างดูเหมือนจะเรียบร้อย แต่ มันก็มีปัญหา จนได้ค่ะ
คือหนู Insert / Delete / Update ได้ครบหมดทุกค่า
แต่ปัญหา มีอยู่ตรงที่ Update ค่ะ เวลากด Update ค่าของ เวลา มันจะผิดเพี้ยนไป ..
นี้ คือ หน้าตาในส่วนที่หนูทำอยู่ค่ะ
อันนี้ ตอน Update ไม่มีปัญหาอะไร เพราะ Set ให้ แก้ไขได้เฉพาะ ค่าของ ชื่อ
หลังจากที่ กด Update ค่าของเวลาก็ดูเหมือนจะเปลี่ยนไป
Date :
2012-09-08 12:15:40
By :
คุณหนูมือใหม่ค่ะ
ที่เพี้ยน คือ เป็นปี 3098 ใช่มั้ย
วิธีแก้ก็คือ ทำการ เปลี่ยน CurentCulture ก่อนบันทึกครับ
เพราะที่เป็น 3098 มันได้มาจาก 2555 + 543 ครับ ซึ่ง Object DateTime มันทำการ Convert ให้เองเพราะ มันมองว่าค่าที่เข้าไป
เป็นค่า ค.ศ. พอมันมาตรวจสอบกับ Current Culture พบว่าเป็น พ.ศ. มันเลยทำการ เอา ค.ศ. + 543
หรือมีอีกวิธีง่ายก็ใช้ Class ที่ชื่อ System.Globalization.ThaiBuddhistCalendar
http://msdn.microsoft.com/en-us/library/system.globalization.thaibuddhistcalendar(v=vs.95).aspx
ลองดูนะ
Date :
2012-09-08 21:43:28
By :
mocking1
ขอบคุณค่ะ - -'
ตอนนี้ มันมีเวลา จำกัด ก็เลย เปลี่ยน วันที่ในเครื่องเปน คศ. แทน ก็ได้อย่างที่ตั้งใจไว้
แต่ ปัญหาเล็กๆ น้อยก็ตามติดมาอีก ก็เป็น format ของ เดือน และวัน มันสลับกันอะค่ะ
แต่ตรงนี้ ค่อยกลับมาแก้ทีหลัง ..
ตอนนี้ มาถึง main หลักแล้ว นั้นก็คือ ข้อมูลของสินค้าค่ะ
การ เพิ่ม .. ไม่มีปัญหา เพราะเพิ่มจาก ในส่วนของ Textbox
แต่ถ้า จะแก้ไข จะทำยังไงดีค่ะ เพราะว่า ข้อมูลอื่นๆอย่าง
พวก ข้อมูลประเภทสินค้า / โปรโมชั่น / อะไรพวกนี้
หนูใช้ datagrid เวลา แก้ไข ก็แก้ไข จาก ตารางในdatagrid ได้เลย
เพราะว่า ข้อมูลมันน้อย .. ก็เลย สบายในส่วนนี้ แต่พอจะแก้ไขข้อมูลสินค้า
มันมีข้อมูลที่เก็บไว้ค่อนข้างเยอะ หนูควรจะทำยังไงดีค่ะ ??
ที่คิดไว้ ก็คือ .. กด Edit ในตารางที่โชว์ข้อมูลสินค้า แล้ว ข้อมูลสินค้าที่ต้องการแก้ไข
ก็จะไปอยู่ในส่วนของ Textbox ที่เราเอาไว้ เพิ่มข้อมูลแบบนี้ได้ไหม ..
ถ้าแบบนี้ ปุ่ม submit ก็ต้องตรวจสอบ สินะค่ะ ว่า ProductID มันซ้ำกับที่มีอยู่ในDB รึเปล่า
ถ้าซ้ำก็ เป็น update แทน .. แฮะๆ ที่พูดมาเป็นแค่จินตนาการ ยังนึก code ไม่ออก
ยังไงก็ช่วยแนะนำทีนะค่ะ ว่า ถ้าจะ แสดงข้อมูลสินค้า ควรจะใช้รูปแบบไหนดี ค่ะ
Date :
2012-09-08 22:53:35
By :
คุณหนูมือใหม่ค่ะ
แบบนั้นก็พอได้ครับ แต่ขอแนะนำแบบง่าย ๆ ก่อนดีกว่า ก็คือ ใน gridview ทำ column นึงเป็นลิงค์ โดยส่งค่าของ ProductID ไปที่หน้าแก้ไขอีกหน้าครับ พอลิงค์ไปแล้วก็ดึงข้อมูลตาม ProductID ที่ส่งมา มาแสดงข้อมูลเดิมใน textbox อะไรก็ว่าไป แล้วก็แก้ไข จากนั้นก็ทำการ update ตาม ProductID ไปเลยครับ ไม่ต้องเช็คอะไรมากเดี๋ยวจะสับสน ^ ^ , update เสร็จแล้วก็ redirect กลับมาหน้าเดิม
Date :
2012-09-09 00:14:31
By :
Nebula
ผมใช้
Code (VB.NET)
.ToString("s")
ครับ
ประวัติการแก้ไข 2012-09-09 19:26:50
Date :
2012-09-09 19:25:42
By :
Downrung
เพิ่ม Column เป็น Template 1 ช่องนะครับ
เสร็จแล้ว Edit Tempate แล้วใส่ HyperLink หรือ Button เข้าไป เสร็จแล้วก็ทำการ Redirect ไปอีกหน้าก็ ok นะครับ
แต่ถ้าทำได้ลองศึกษา jQuery + การทำ AJAX ดูน่ะครับจะได้สร้างเป็น popup ขึ้นมาแล้วพอบันทึกก็อัพเดทลง DB เลย
ก็เป็นอีกวิธีลองเลือกใช้ดูนะครับ
Date :
2012-09-09 20:34:56
By :
mocking1
Load balance : Server 01