วันอาทิตย์ที่ 13 มกราคม พ.ศ. 2551

เมื่อทำ ClickOnce แล้ว พอไปลงเครื่องลูกแล้วมีปัญหา ADODB

หลังจากที่ทำโปรเจ็คที่ 2 มานานแสนนาน - -" ก็จะมาทดสอบทำการ เซ็ตอัพแบบ Click Once สักหน่อย
ก็ทำๆ ok publish ได้เป็นปรกติครับ
( ท่านสามารถไปดูการ ทำ Click Once ที่คุณ KSM ได้ตอบไว้ในบอร์ด GF ตามนี้ครับ http://greatfriends.biz?22612 )
แต่พอไปรันเพื่อที่จะลงโปรแกรมที่เครื่องลูกนั้น ปรากฏว่าเจอ Dialog Box แบบในภาพที่ 1 ครับ
เอาหล่ะสิตู จะทำยังไงดี เพิ่งทำครั้งแรกด้วย เราทำอะไรผิดพลาดไป ???
ผมก็ไปหาว่าผมลืมติ๊กอะไรใน ปุ่ม PreRequisites หรือเปล่า ก็ไปติ๊กๆ ข้างในมัว่ไปหมด ทำยังไงก็ทำไม่ได้
ก็เลยไป search ในบอร์ด Gf อีกครั้ง ก็ไปเจอกับคนอาการเดียวกัน http://greatfriends.biz?15859 ตรง คหที่ 8 นะครับ
อาจารย์สุเทพ ก็บอกว่าให้ไปลง Microsoft Data Access Component ( MDAC ) ผมก็ไปหามาลง 2.7 , 2.8 ก็ยังไม่ได้เหมือนเดิม
ในช่วงเวลาที่แก้ปัญหา ก็ได้ไปรบกวน ( ให้เขาช่วยแหล่ะ พูดให้ดูดี เอิ๊กๆ ) คุณ ksm , พี่เหมี่ยว , คุณ Nine เกี่ยวกับเรื่องดังกล่าว
ผมเอ็งก็ search หา ใน google เกี่ยวกับปัญหานี้เหมือนกัน แต่เจอแล้วอ่านไม่เข้าใจเลย เพราะว่าเขาให้ใส่โค้ดอะไรก็ไม่รู้ ( แล้วใส่ตรงไหนฟระ )
จนกระทั้งพี่เหมี่ยวได้ส่งลิงค์มาให้ตัวนึงครับ http://yoopergeek.blogspot.com/2006/03/problem-during-clickonce-deployment.html
ตามรูปเลยครับ เหอๆ คือว่า ให้เราไปกดปุ่มตรง Application Files ไปแล้วตรงบรรทัด ADODB.dll เลือกตรง
publish Status ให้มันเป็น Include ซะ ( ของเดิมผมเป็น Prerequisite(Auto) ) แล้วตรง Download Group ก็ปล่อยเป็น Required ไปครับ
เท่านี้ก็ ok แล้วก็ publich ไปใหม่ ก้เรียบร้อยแล้วครับ
นั่นไง Program ผมรันขึ้นมาแร้ววว หุๆ
Many Thanks .
คุณกิต (KSM)
คุณ Nine
Special Thanks.
พี่เหมี่ยว (MM)

เพิ่มแถวแรกให้กับ ComboBox เมื่อ Binding กับ Dataset

วันนี้กำลังนั่งทำ โปรแกรมอยู่ ก็ทำ ComboBox ให้ดึงข้อมูลมาจาก Dataset แต่ก็ประสบปัญหาคือ
ในการ Binding ข้อมูลมาใช้งานนั้น ตัว Dataset ก็จะทำการ แสดง Record แรกออกมาโชว์เลย
ซึ่งในบางครั้ง ข้อมูล ( Control นั้นๆ ) ยังไม่จำเป็นต้องมีข้อมูลในตอนนั้น ก็ไม่สามารถทำได้ เพระมันมีข้อมูลหมด
ด้วยความอ่อนชั้นเชิงในการเขียน ผมได้ไปปรึกษาคุณ KSM แห่งบอร์ด GF
ได้แนะนำโค้ด มาคือ
combobox1.selectedIndex= -1
ปรกติ รายการ ใน ComboBox จะ Index เริ่มต้นที่ 0 ( มันเป็น ArrayList )
แต่เมื่อลองใช้งานจริง ในกรณีที่ User กดเลือกรายการอื่นไปแล้ว แล้วกลับมาแก้ไข ตัวค่าว่างนั้นจะหายไป ( เพราะมันไม่มีอยู่จริง )
จากนั้นผมก็ไปหาข้อมูลใน GF อีกครั้ง จนไปติดใจเรื่องของการเคลียร์ค่า ComboBox ว่า เคลียร์ค่านั้น ไปเคลียร์ที่ DataTable
ก็เลยลองนั่งทำ ปรึกษา พี่เหมี่ยว ( MM ) ใน GF แก้ มั่ว ก็ได้โค้ดนี้มาครับ
dsCustomer.Tables("Customer").Rows.Add.Item("NameCust") = "--- Test ---"
ปรากฏว่า รายการเพิ่มครับ แต่ว่ามันไปเพิ่ม บรรทัด สุดท้าย (เพราะมัน ADD นั้นเอง )
เลยนำไปถาม ในบอร์ด GF อีกรอบ ก็ได้ อาจาร์ย สุเทพ แนะนำ ให้ลองดู InsertAt (แปลตรงตัวว่า แทรกที่ )
เลยได้เว็บอ้างอิงที่ http://www.dotnet247.com/247reference/msgs/15/78855.aspx
ในเรื่องของการใช้ InsertAt
เลยสำเร็จมาเป็นโค้ด Dim drow As DataRow drow = dsCustomer.Tables("Customer").NewRow() drow("NameCust") = " - - - โปรดเลือก - - - " dsCustomer.Tables("Customer").Rows.InsertAt(drow, 0)
comboBox1.selectedIndex = 0 '--- ใส่ตัวนี้ไปเพื่อที่ว่า ค่าแรกที่แสดงใน ComboBox จะไปชี้ที่ โปรดเลือก

ก็ปรากกฏข้อมูลอย่างที่ผมต้องการ โดย SeletedValue มันค่า Nothing เพราะผมไม่ได้ทำการใส่ค่าไปด้วย เป็นอย่างที่ผมต้องการ ใครติดปัญหาตรงนี้ลองเอาไปประยุกต์ใช้ดูนะครับ Many Thanks.

GF Board อาจารย์สุเทพ คุณ NINE พี่ เหมี่ยว ( MM ) คุณ กิต ( KSM )

เปลี่ยนสี Background ใน DataGridView เมื่อเราเอาเมาส์ไปคลิ๊กที่แถวนั้น

ในการเปลี่ยนสีพื้นหลัง ( BackGround ) ของแถวที่เราคลิ๊กเลือก ใน DataGridView นั้น
ผมใช้ Events 2 ตัว คือ
1. CellMouseClick เป็น Events ที่ใช้เลือก Cell นั้นๆ
2. RowLeave เป็น Events ที่เราออกจากแถวปัจจุบัน
จุดประสงค์ ผมต้องการให้ เอาเมาส์คลิ๊กที่ Cell ใน DataGridView แล้วแถวนั้นเปลี่ยนสี BackGround ไปตามที่เราเซ็ตไว้
ก็เพื่อที่ว่าในกรณีที่งานของ User เยอะๆ หรือ จำนวนคอลัมน์ที่ DataGridView เยอะ เลื่อนไปดูคอลัมน์หลังๆ ลำบาก
ก็ลองใช้ตัวนี้เอาไปแก้ปัญหาดูครับ ( เป็นอีกวิธีนึงน่าจะช่วยได้ )
อันดับแรก ใช้ Events CellMouseClick ก่อน

Private Sub dgvMyPets_CellMouseClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellMouseEventArgs) Handles dgvMyPets.CellMouseClick If e.RowIndex = dgvMyPets.Rows.Count - 1 OrElse e.RowIndex = -1 Then Exit Sub With dgvMyPets .Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.LightBlue '--- เมื่อคลิ๊กไปที่ Cell นั้นๆแล้วจะทำการเปลี่ยนสี Background ของแถวนั้นให้เป็นสี LightBlue End With End Sub ต่อมาเราก็มาทำ Events ที่เวลาเราคลิ๊กที่ Cell อื่น ที่ไม่ใช่แถวนั้นแล้ว สี BackGround จากแถวที่เราเคยเลือกไว้ มันต้องกลับเป็นสีขาว

เรามาใช้ Events LeaveRow

Private Sub dgvMyPets_RowLeave(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgvMyPets.RowLeave

If e.RowIndex = dgvMyPets.Rows.Count - 1 OrElse e.RowIndex = -1 Then Exit Sub

With dgvMyPets .Rows(e.RowIndex).DefaultCellStyle.BackColor = Color.White '--- ออกจากโรว์ให้สีพื้นแถวน้นเป็นสีขาว End With

End Sub

Use Server.Mappath In Class File.

The first thing you must import namespace as below. using System.Web; And you can use them such as: HttpContext.Current.Server.MapPath("myPath"); this function Server.MapPath() will return string result.

วันศุกร์ที่ 11 มกราคม พ.ศ. 2551

Begin with JavaScript

Now I'm return to Web Applications again and this JavaScript for beginner (I'm already forget them). Window.Open function :: Exam.1 Block Code script type="text/javascript" // Format in XHTML 1.0 funciton newWindow(id) { myWidow=window.open('myPage.aspx?id='+id, 'TitleName', 'height=100,width=400, toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, directories=no, status=no'); myWindow.moveTo(0,0) // X, Y Postions } // Use JavaScript above : a href="#" onclick="javascript: newWindow(Parameter)" Exam 2. Inline Code a href="#" onclick="window.open('ShowWallPaper.aspx?id=(Parameter)', 'WallPaper', 'top=0,resizable=yes,directories=no,scrollbars=yes,width=600,height=400')" Try to understand about some features of Window.Open Method. - yes,no = 1,0 (same meaning) location : Address Bar. resizable : Deny or allow user to resize new window. status : Show the status bar on the bottom of window. directories : The standard browser directory buttons, such as What's New and What's Cool ( I don't know that it shows where ?? ) And also it can support keyword "top=0" for hide menubar and menubar such as :: myWidow=window.open('myPage.aspx?id='+id, 'TitleName','top=0'); I try to train English language. I think English language so hard for me :-\