วันศุกร์ที่ ๓๐ กันยายน พ.ศ. ๒๕๕๔

โค้ดสั่ง Suppress Picture ใน Crystal Report


Dim picture1 As CrystalDecisions.CrystalReports.Engine.PictureObject
picture1 = reportDoc.ReportDefinition.ReportObjects("Picture1")
picture1.ObjectFormat.EnableSuppress = True

วันพฤหัสบดีที่ ๒๙ กันยายน พ.ศ. ๒๕๕๔

แปลงผล LINQ เป็น DATATABLE

จากคำถามคุณ witsanukam ที่ GreatFriends นะครับ


Dim dtEmployee As New DataTable()
Dim dtDepartment As New DataTable()

'Define Columns/Data

dtEmployee.Columns.Add("EmployeeID", GetType(String))
dtEmployee.Columns.Add("EmployeeName", GetType(String))
dtEmployee.Columns.Add("OpenType", GetType(String))
dtEmployee.Columns.Add("DepartID", GetType(String))

dtEmployee.Rows.Add(New Object() {"001", "น้องฟ้า", "สดใส", 2})
dtEmployee.Rows.Add(New Object() {"002", "น้องนก", "น่ารัก", 2})
dtEmployee.Rows.Add(New Object() {"003", "ได้หลัง", "แล้วลืมหน้า", 2})


dtDepartment.Columns.Add("DepartID", GetType(String))
dtDepartment.Columns.Add("DepartName", GetType(String))

dtDepartment.Rows.Add(New Object() {1, "นักวิเคราะห์/นักแบบระบบ/อื่นฯ"})
dtDepartment.Rows.Add(New Object() {2, "โปรแกรมมั่ว"})
dtDepartment.Rows.Add(New Object() {3, "WOW อรชรอ้อนแอ้น"})

'*************************************************************
Dim dtResult As New DataTable
dtResult.Columns.Add("EmployeeID", GetType(String))
dtResult.Columns.Add("EmployeeName", GetType(String))
dtResult.Columns.Add("OpenType", GetType(String))
dtResult.Columns.Add("DepartID", GetType(String))
dtResult.Columns.Add("Department", GetType(String))

Dim dr As DataRow = dtResult.NewRow

Dim q = From j0 In dtEmployee.AsEnumerable() Join _
j1 In dtDepartment.AsEnumerable() _
On j0.Field(Of String)("DepartID") Equals j1.Field(Of String)("DepartID") _
Select dtResult.Rows.Add(New Object() {j0("EmployeeID"), j0("EmployeeName"), j0("OpenType"), j1("DepartID"), j1("DepartName")})


q.CopyToDataTable(dtResult, LoadOption.OverwriteChanges)


ลองทำดู คิดว่าเผื่ออนาคตอาจได้ใช้เลยเอามาเก็บไว้ใน blog ซะก่อน

วันพฤหัสบดีที่ ๘ กรกฎาคม พ.ศ. ๒๕๕๓

เปลี่ยนมาใช้ Syntax Highlighter 3.0.83

เพิ่งมาสังเกตุว่า ส่วนที่เป็น source code ที่ใช้ Syntax Highlighter มันไม่แสดงผลอย่างที่ควรจะเป็นครับ พอลองตรวจสอบดูปรากฏว่า ลิงค์ที่ไป URI ของ Syntax Highlighter version 1.5 ที่เคยใช้มัน Access Denied ครับ ลองหลายๆเวอร์ชันก็เป็นเหมือนกัน

ก็เลยได้โอกาสปรับเปลี่ยนมาลองใช้เวอร์ชันล่าสุด ซึ่งปัจจุบันเป็นเวอร์ชัน 3.0.83 ครับ ปรากฏว่าเวลาเราเขียน <pre> tag ต้องกำหนด attribute ใหม่ จากเดิมเป็น <pre name=code class=vb> เป็น <pre class="brush:vb"> ครับ

ไว้ว่างๆจะทยอยไล่แก้ที่บทความเก่าๆ ถ้าเป็นไปได้ก็จะหาที่เก็บไฟล์เวอร์ชันนี้เองน่าจะดี ^_^

Fix: IE8 Stuck on new tab

ตอนนี้ที่บริษัทเริ่มใช้ IE8 กันมากขึ้นแล้วครับ ทีนี้ก็เจอปัญหาว่าบางโปรแกรมที่เราเขียน เราสั่งให้มันเป็น Window ใหม่เช่นแสดงรายงาน หรือทำ Popup ปรากฏว่าอยู่ดีๆ ก็ไม่สามารถเปิด Window ใหม่ได้ครับ (มารู้ทีหลังว่าเป็นเพราะเราลงโปรแกรมบางตัว เช่น Image Viewer ครับ)

ทีแรกลองค้นใน google ดูก็พบว่าวิธีแก้ปัญหาคือต้องลงทะเบียน dll บางตัวใน registry ใหม่ ซึ่งมีหลายตัวมากครับ ให้เราลองสั่ง regsvr32 ทีละตัวดู ซึ่งก็เสียเวลามาก โชคดีที่เพื่อนที่ทำงานได้ bat file มา 1 ตัวซึ่งแก้ปัญหานี้ได้ พอไปดูในโค้ดก็เห็น link ไปเวบ http://iefaq.info ครับ พอเข้าไปดูปรากฏว่าไม่ใช่ภาษาอังกฤษซะงั้น

แต่สำหรับคนที่มีปัญหาเกี่ยวกับ IE ลองเข้าไปดูได้ครับ โดยเฉพาะ IE8 ถ้าสนใจตัว script สำหรับแก้ปัญหา registry ของ IE8 ให้ไปที่หน้า

http://iefaq.info/index.php?action=artikel&cat=47&id=136&artlang=de

สำหรับผมใช้ Windows7 32 bit เลยดาวน์โหลดตัว IE8-rereg.zip มาใช้ครับ สุดยอดมากๆๆ

วันเสาร์ที่ ๓ กรกฎาคม พ.ศ. ๒๕๕๓

แก้ปัญหา Export to Excel ด้วย GridView: Control 'GridView1' of type 'GridView' must be placed inside a form tag with runat=server.

วันก่อนผมเขียนโปรแกรมเพื่อ export ข้อมูลจาก GridView มาเป็น Excel ครับ (ก่อนหน้านี้ใช้ Datagrid ไม่เคยมีปัญหา) ก็เจอ error ดังนี้ครับ



นั่งงมอยู่ตั้งนาน ก็เลยเจอวิธีแก้ว่าให้เพิ่มโค้ดดังนี้ครับ


Public Overrides Sub VerifyRenderingInServerForm(ByVal control As System.Web.UI.Control)
'MyBase.VerifyRenderingInServerForm(control)

End Sub



แค่นี้ก็ใช้งานได้แล้วครับ

แต่ถ้าใครเจอปัญหาว่า "RegisterForEventValidation can only be called during Render();"



ให้เอา AllowSorting กับ AllowPaging ออกครับ

เท่านี้เราก็สามารถใช้ GridView ในการสร้าง Excel ได้แล้วครับ