Post

วิธีกางสร้าง Barcode ด้วย Crystal อย่างง่ายครับ

เนื้องด้วยกระทู้
http://www.greatfriends.biz/?134196
และลองค้นหาในเว็ปแล้วไม่พบตัวอย่างการทำ
   จึงอยากแนะนำการสร้าง  Barcode 3 of 9 อย่างง่ายด้วย Crystal Report เพื่อเป็นประโยน์แก่น้องๆเพื่อนๆ
ไม่มากก็น้อยครับ (ท่านใดว่าง่าย ผ่านได้เลยครับ)
ในตัวอย่างผมจะแนะนำวิธีการดึงผ่าน Database(ในที่นี้ใช้ Access แล้วกันนะครับง่ายๆ ใช้ได้เลยไม่ต้องลงโปรแกรมอะไร)
และวิธีการส่งค่า Datatable หรือ Dataset เข้าไปใน Crystal Report ครับ
ไม่พูดพร่ำทำเพลงเรามาสร้าง  Project กันก่อนเลยดีกว่าครับ
สร้างโปรเจ็คขึ้นมาแล้วออกแบบง่ายๆ ดังรูปครับ

    จากนั้นเราสร้าง Database Access มาสักตัวนะครับเอาง่ายๆใส่ข้อมูลสักสองสามตัว

    พอสร้างแล้วผมก็ทำการ Save เก็บไว้ใน Root Folder ของโปรแกรมนะครับ (bin\debug)
จากนั้นไปที่ Project ของเรา  Add new item เป็น Crystal Report ผมขอตั้งชื่อว่า rptBarcode


จากนั้นทำการติดต่อ Database ที่ต้องการ  ผมเลือกใช้ OLE DB แล้วกันครับเพราะใช้สะดวกแล้วก็ใช้กับฐานข้อมูลตลาดได้เกือบทั้งหมด
(ขั้นตอนนี้สามารถใช้ได้กับหลายๆ ฐานข้อมูลนะครับ  ไม่ว่า  SQL Server , My Sql,Access,Oracle เป็นต้น)


เลือก Table ที่ต้องการใช้งานครับ

จากนั้นเปิด Report สร้าง Report  เบื้องต้นดังรูปง่ายๆ ก่อนครับ

หลังจากนั้นคลิ๊กขวาที่ Formula ครับ  เราจะสร้างสูตรสำหรับสร้าง Barcode กันครับ

เลือก Field ที่เราต้องการสร้าง Barcode และเพิ่ม * หน้าและท้ายดังสูตรครับ
**ในขั้นตอนนี้กรณีที่ผู้อ่านส่งค่าโดยตรงเข้ามาโดยใส่* ไปแล้วก็ไม่ต้องสร้างก็ได้ครับผ่านไปเลย

***ขั้นตอนนี้เป็นขั้นตอนที่สำคัญครับ
หลังจากได้ Formula Field มาแล้วก็ลากมาไว้ที่ Report ครับจากนั้นให้เลือก Font เป็น 3 of 9 Barcode ปรับขนาดให้เหมาะสมครับ

จากนั้นเราก็มาเขียนโค๊ดกันครับ  ง่ายๆ ตามรูปเลยครับ

มาลองรันกันครับ
เมื่อเรากดปุ่ม Show From DB  ก็จะเป็นการดึงข้อมูลจาก  Database ขึ้นมาแสดงครับ

เมื่่อเราทำการกดปุ่ม Show From Data Table จะเป็นการส่งข้อมูลไปแสดงยัง Report ครับ
Font :
http://www.tempf.com/getfile.php?id=1148644&key=4f0f0d6e3d545
Project :
http://www.tempf.com/getfile.php?id=1152099&key=4f149706dfb85
***  เราจะต้องมี Font Barcode อยู่ในเครื่องก่อนนะครับ ดาวโหลดได้จากลิงค์ด้านบนครับ (ได้มาแล้ว Copy ไปวางที่ C:\windows\font)
ส่วนคนไหนอยากดูเพิ่มเติมดาวโหลดโปรเจ็กไปลองดูได้ครับ (เครื่องผมเป็น 64 บิท  โหลดบิตไปอาจต้องเปลี่ยน Path Ref นะครับ)
   
ในบทความที่แนะนำไปเป็นการสร้างบาร์โค้ดแบบง่าย ๆ นะครับ  จริงๆมีวิธีการทำได้หลายวิธีครับ
อาจจะไม่ต้องติดต่อ Database หรือส่ง Datatable ไปเลยก็ได้ครับ  อาจจะส่งเป็น Parameter  ไปก็ได้ครับแต่วิธีนี้
ในกรณี  Print เยอะไม่สะดวกครับ  นอกจากนี้ยังใช้กับฐานข้อมูลตลาดได้เกือบทั้งหมดนะครับ
       ปล. ผมไม่แน่ใจว่า Crystal Report ตัวใหม่ๆ จะมี Plugin ในส่วนของ Barcode เข้ามาใช้แล้วหรือเปล่า
แล้วถ้าว่างๆ จะมาแนะนำบทความ  การทำ Barocode 128 , Barcode 2D ครับ

แหม่ตกไปรูปนิ




เครดิตข้อมุลจากคุณ KOOKKAI


Post

ใส่ DatePicker ให้ VB2008 สำหรับ WPF หรือช่องเลือกวันที่นั่นเอง

สำหรับ VB2008 นั้นถ้าเราเขียนแบบ WindowForm ธรรมดา เครื่องมือนี้ก็จะปรากฏให้เราเห็นอยู่แล้ว แต่เมื่อเราจะสร้างโปรแกรมโดยใช้ แบบ WPF นั้น ตัวเครื่องมือนี้จะไม่มีให้เราเลือกใช้ ดังนั้นเราก็จะต้องติดตั้งโปรแกรม หรือ Addon มันเข้าไปเพื่อที่เราจะสามารถใช้ ตัวเลือกวันที่เดือนต่างๆ ได้เหมือน WindowForm


คลิกลิ้งค์ข้างล่างเพื่อเข้าไปดาวโหลดตัวติดตั้งมาติดตั้งลงบนเครื่อง
WPF tool kit


วิธีติดตั้งก็ง่ายมาก คลิก Next อย่างเดียว
พอติดตั้งเสร็จเราก็เข้าโปรแกรม VB ของเราแล้วก็ไปดูตรงเครื่องมือจะปรากฏไอคอนให้เราเลือกใช้งานเพิ่มขึ้นมา เท่านี้เราก็ได้ใช้ DatePicker ในแบบฟรอม WPF แล้ว


Post

รวมคำสั่งต่างๆของเมธอดสำหรับ Datagridview

1.   ล้างคอลัมภ์ทั้งหมด
DataGridView1.Columns.Clear()
DataGridView1.Rows.Clear()

2.   สร้างคอลัมภ์
DataGridView1.Columns.Add("eid", "Employee ID")

3.   นับระเบียน (ถ้ามี Header แล้ว จำนวนเริ่มนับ Header ด้วย)
DataGridView1.Rows.Count()
DataGridView1.Columns.Count()

4.   เพิ่มระเบียนเปล่า
DataGridView1.Rows.Add()
DataGridView1.Rows.Add()
DataGridView1.Rows.Add()

5.   นำข้อมูลเข้าตาม Cell ที่ต้องการ โดย Rows = 0 คือระเบียนแรกของ Datagridview
DataGridView1.Rows(0).Cells(0).Value = "101"
DataGridView1.Rows(0).Cells("ename").Value = "บุรินทร์"

6.   การนำค่าจาก Cell มาใช้
DataGridView1.CurrentRow.Cells("eid").Value
DataGridView1.CurrentCell.Value

7.   กำหนดความกว้างของ Cell
DataGridView1.Columns.Item(1).Width = 150   

8.   สั่งซ่อนการแสดงผลระเบียนปัจจุบัน
DataGridView1.CurrentRow.Visible = False

9.   อ่านข้อมูลทีละ Cell
For i As Integer = 0 To Datagridview1.rows.count() - 1
   msgbox(DataGridView1.Rows(i).Cells("eid").Value)
Next

10.   การนำข้อมูลจากตารางในแฟ้ม .mdb เข้า Datagridview แบบสั้น
Dim cn As New System.Data.OleDb.OleDbConnection ("provider=microsoft.jet.oledb.4.0;data source=c:\d.mdb")
Dim da As New System.Data.OleDb.OleDbDataAdapter("select * from tbthai", cn)
Dim ds As New DataSet
da.Fill(ds, "tb")
DataGridView1.DataSource = ds.Tables("tb")

11.   การนำข้อมูลจากตารางในแฟ้ม .mdb เข้า Datagridview แบบแยกองค์ประกอบ
Dim conn As String
Dim cn As New System.Data.OleDb.OleDbConnection
Dim cm As New System.Data.OleDb.OleDbCommand
Dim da As New System.Data.OleDb.OleDbDataAdapter
Dim ds As New DataSet
conn = "provider=microsoft.jet.oledb.4.0;data source=c:\dthai97.mdb"
cn.ConnectionString = conn
cm.Connection = cn
cm.CommandText = "select * from tbthai"
da.SelectCommand = cm
da.Fill(ds, "tb")
DataGridView1.DataSource = ds.Tables("tb")

ตัวอย่าง 4.1 สร้างคอลัมภ์และเพิ่มระเบียนใหม่ในดาต้ากริดผ่าน Form_Load
    - เพิ่มดาต้ากริดในฟอร์มผ่าน Design Time
DataGridView1.Columns.Add("eid", "Employee ID")
DataGridView1.Columns.Add("ename", "Employee Name")
Dim r As Integer = DataGridView1.Rows.Count() ' = 1 Header
r = DataGridView1.Rows.Count()
DataGridView1.Rows.Add()
DataGridView1.Rows(r - 1).Cells(0).Value = "101"
DataGridView1.Rows(r - 1).Cells(1).Value = "สมชาย"
r = DataGridView1.Rows.Count()
DataGridView1.Rows.Add()
DataGridView1.Rows(r - 1).Cells("eid").Value = "102"
DataGridView1.Rows(r - 1).Cells("ename").Value = "บุรินทร์"

ตัวอย่าง 4.2 คลิ๊กจากดาต้ากริดแล้วส่งข้อมูลเข้าเท็กบ็อกผ่าน event ชื่อ cellmouseclick
    - แสดงการเลือกข้อมูลจากบรรทัดปัจจุบันตามชื่อคอลัมภ์ และใช้ข้อมูลจากเซลที่ถูกคลิ๊ก
   - โดย eid คือ ชื่อคอลัมภ์ที่กำหนดในดาต้ากริด อาจกำหนดในฟอร์มโหลด หรือขณะออกแบบฟอร์ม
   - ตัวอย่างนี้มี 1 textbox ให้เพิ่มเป็น 2 textbox  ดูสิครับ
Private Sub DataGridView1_CellMouseClick( ...
        MsgBox(DataGridView1.CurrentRow.Cells("eid").Value)
        TextBox1.Text = DataGridView1.CurrentCell.Value.ToString
End Sub

ตัวอย่าง 4.3 อ่านข้อมูลจากแฟ้มแอคเซสส่งเข้าดาต้ากริดแบบใช้เอสคิวแอล
    - ใช้การเชื่อมต่อแฟ้มข้อมูลแบบ microsoft.jet.oledb.4.0
   - ต้อง Imports system.data.oledb เพื่อใช้คลาสอื่น เช่น OleDbCommand และ OleDbDataReader
   - ผลการแก้ไขข้อมูลในดาต้ากริดไม่ส่งผลกลับไปยังแฟ้มแอคเซส
Private Sub Form1_Load( ...
  Dim strconn As String = "provider=microsoft.jet.oledb.4.0;data source=c:\d.mdb"
  Dim cn As New OleDbConnection(strconn)
  cn.Open()
  Dim cm As New OleDbCommand("select * from employees", cn)
  Dim dr As OleDbDataReader = cm.ExecuteReader()
  DataGridView1.Columns.Add("eid", "Employee ID")
  DataGridView1.Columns.Add("ename", "Employee Name")
  DataGridView1.Columns.Item(1).Width = 150
  Do While dr.Read()
      Dim x As Integer = DataGridView1.Rows.Count() - 1
      DataGridView1.Rows.Add()
      DataGridView1.Rows(x).Cells(0).Value = dr.Item(0)
      DataGridView1.Rows(x).Cells(1).Value = dr.Item(1)
   Loop
   cn.Close()
End Sub
Private Sub Button1_Click( ...
   DataGridView1.Columns.Clear()
End Sub

ตัวอย่าง 4.4 นำข้อมูลจากแฟ้มแอคเซสโยงเข้าดาต้ากริดและสั่งอัพเดทแฟ้มเดิม
    - เชื่อมตารางชื่อ tbthai ในแฟ้มแอคเซสเข้ากับดาต้ากริด ถ้าต้องการใช้บางเขตข้อมูลก็ต้องใช้คิวรี่
   - สั่งปรับปรุงตารางในแฟ้มแอคเซสผ่านการกดปุ่ม สามารถใช้คิวรี่ในแฟ้มแอคเซสแทนตารางได้
   Dim strconn As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:/d.mdb"
    Dim cn As New System.Data.OleDb.OleDbConnection(strconn)
    Dim da As New System.Data.OleDb.OleDbDataAdapter
    Dim ds As New DataSet
    Private Sub Form1_Load( ...               
        Dim sql as String = "select * from tbthai"
        da.SelectCommand = New System.Data.OleDb.OleDbCommand(sql, cn)
        da.Fill(ds, "tb")
        DataGridView1.DataSource = ds.Tables("tb")
  DataGridView1.Columns.Item(0).HeaderText() = "a"
    End Sub
    Private Sub Button1_Click( ...
        Dim cb As New System.Data.OleDb.OleDbCommandBuilder(da)
        Dim chg As Integer = da.Update(ds, "tb")
        MsgBox(DataGridView1.Rows.Count())
    End Sub




เครดิตจากคุณ wasin45


Post

แสดงข้อมูลที่เราเลือกใน ListView ออกมาใช้งาน(แบบ DATASET/DATATABLE)

Dim drv As DataRowView = DirectCast(ListView.SelectedItem, DataRowView)
Dim id As String = drv.Row(0).ToString()
MsgBox(id)


ตัวอย่างด้านบนเป็นการแสดงข้อมูล จาก Listview ของ Colum แรก ออกมาใส่ไว้ในตัวแปร id



Dim id As String = drv.Row(0).ToString()
ถ้าเราต้องการแสดง Colum อื่นๆ ให้เปลี่ยนตรงเลขศูนย์ เป็นเลขของ Colum ที่คุณต้องการ


Post

ค้นหาข้อมูลจาก DATASET หรือ DATATABLE แบบ RowFilter

Dim dView As DataView

dView = ds.Tables("member").DefaultView

dView.RowFilter = "colum1 Like '%34%' or colum2 Like '%12%'"

ListView.DataContext = dView


เป็นการค้นหาข้อมูลแบบ RowFilter  โดยจะหาจาก colum1 และ colum2


Post

หาตำแหน่งที่เราคลิกใน Listview

MsgBox(ListView.Items.IndexOf(ListView.SelectedItem))

ตำแหน่งใน Listview เริ่มต้นจะเริ่มนับจาก 0 นะครับ


Post

ทำวันที่หรือเดือนให้เป็นภาษาไทย VB.NET

    Public Function GenMonthThai(ByVal intMonth As Integer, ByVal intParameter As Integer)
        Dim strMonth As String = String.Empty
        Select Case intMonth.ToString
            Case "1"
                If intParameter = 1 Then
                    strMonth = "ม.ค"
                ElseIf intParameter = 2 Then
                    strMonth = "มกราคม"
                End If

            Case "2"
                If intParameter = 1 Then
                    strMonth = "ก.พ"
                ElseIf intParameter = 2 Then
                    strMonth = "กุมภาพันธ์"
                End If

            Case "3"
                If intParameter = 1 Then
                    strMonth = "มี.ค"
                ElseIf intParameter = 2 Then
                    strMonth = "มีนาคม"
                End If

            Case "4"
                If intParameter = 1 Then
                    strMonth = "เม.ษ"
                ElseIf intParameter = 2 Then
                    strMonth = "เมษายน"
                End If

            Case "5"
                If intParameter = 1 Then
                    strMonth = "พ.ค"
                ElseIf intParameter = 2 Then
                    strMonth = "พฤษภาคม"
                End If

            Case "6"
                If intParameter = 1 Then
                    strMonth = "มิ.ย"
                ElseIf intParameter = 2 Then
                    strMonth = "มิถุนายน"
                End If

            Case "7"
                If intParameter = 1 Then
                    strMonth = "ก.ค"
                ElseIf intParameter = 2 Then
                    strMonth = "กรกฏาคม"
                End If

            Case "8"
                If intParameter = 1 Then
                    strMonth = "ส.ค"
                ElseIf intParameter = 2 Then
                    strMonth = "สิงหาคม"
                End If

            Case "9"
                If intParameter = 1 Then
                    strMonth = "ก.ย"
                ElseIf intParameter = 2 Then
                    strMonth = "กันยายน"
                End If

            Case "10"
                If intParameter = 1 Then
                    strMonth = "ต.ค"
                ElseIf intParameter = 2 Then
                    strMonth = "ตุลาคม"
                End If

            Case "11"
                If intParameter = 1 Then
                    strMonth = "พ.ย"
                ElseIf intParameter = 2 Then
                    strMonth = "พฤศจิกายน"
                End If

            Case "12"
                If intParameter = 1 Then
                    strMonth = "ธ.ค"
                ElseIf intParameter = 2 Then
                    strMonth = "ธันวาคม"
                End If

        End Select
        Return strMonth
    End Function


================================================================
ตัวอย่างคำสั่งสำหรับดึงฟังชั่นมาใช้

Dim strDate = "8/5/2555 15:59:37"

MsgBox(Day(strDate) & " - " & GenMonthThai(Month(strDate), 1) & " - " & Year(strDate) & "Time=" & String.Format(strDate, Now.Hour, Now.Minute, Now.Second))


ลองนำไปดัดแปลงดูนะครับ





Tags