ËÒ¡ÁÕ¤Ó¶ÒÁ ¢ÍãËéä»â¾Êµìŧ àÇ纺ÍÃì´¨Õ·Ù¨Õà¹çµ´Íµ¤ÍÁ µÑÇãËÁèá·¹¹èФÃѺ

ËÃ×͵ԴµèÍà¢éÒÁÒ·Ò§ Inbox ·Õè à¿«ºØê¤ ¼Á¤ÃѺ

˹éÒËÅÑ¡
¢èÒÇÊÒà - º·¤ÇÒÁ ·Ñé§ËÁ´
VB 6/VB.Net
ASP/ASP.Net
¨Ñº©èÒ¤ÍÁ¾ÔÇàµÍÃì
àÃÕ¹ÃÙé¼èÒ¹ Flash Movie
º·¤ÇÒÁ·ÕèÁÕ¼ÙéµÍºÅèÒÊØ´  
 RSS Feeds
 ´ÒǹìâËÅ´â»Ãá¡ÃÁ RSS Reader ä´é·Õè¹Õè ...   Download â»Ãá¡ÃÁ RSS Reader

Forum - www.g2gnet.com
Webmaster - www.g2gnet.com
Visitors - Session views
 5 6 1 6 1 5 7

7 ¸Ñ¹ÇÒ¤Á ¾.È.2549
112 Users On-Line.
Visitors - Page views
 8 9 7 3 9 0 0
1 ¡ØÁÀҾѹ¸ì ¾.È.2551

Google   
àÇçº g2gnet.com
¢¹Ò´µÑÇÍÑ¡ÉÃ:  

¾×鹰ҹ㹡ÒÃãªé§Ò¹ MS FlexGrid ¡è͹ÊÃéÒ§¤ÇÒÁÊÑÁ¾Ñ¹¸ìẺ One To Many (ÀÒ¤ 2)

Category »  VB 6/VB.Net
â´Â : Webmaster àÁ×èÍ 4/3/2553   àÇÅÒ: 12:54
(ÍèÒ¹ : 16983) 
º·¤ÇÒÁÊÓËÃѺàÃ×èͧ¹Õé «Ö觨ÐÁÕµÒÁÁÒÍÕ¡ã¹ËÅÒÂæµÍ¹ ... ¼Á¹ÓÁÒàʹÍã¹á§èÁØÁ 2 ´éÒ¹ ¤×Í ´éÒ¹ááÊÓËÃѺ¤¹·Õè¡ÓÅѧ¾Ñ²¹Ò ½Ö¡½¹ ã¹ÊÒ§ҹâ»Ãá¡ÃÁÁÔè§ÍÂÙè à¾×èÍãËéà¢éÒ㨡Ãкǹ¡ÒäԴ áÅÐ ¡ÒÃÍ͡Ẻ áÅÐ ÍÕ¡´éÒ¹ ¤×Í ¡ÒùÓàʹÍá¹Ç·Ò§ ËÃ×Í ÇÔ¸Õ¡ÒöèÒ·ʹ¤ÇÒÁÃÙé·ÕèÁÕÍÂÙèÍÍ¡ä» ã¹ÃٻẺ·Õèà»ç¹àÍ¡Åѡɳì੾ÒТͧµÑÇàͧ à¾×èÍÍÂÒ¡¨Ðºè§ºÍ¡ãËéÃÙé¡Ñ¹·ÑèÇä»ÇèÒ "¡ÒÃàÃÕ¹ÃÙé§Ò¹¾Ç¡¹Õé ÁѹäÁèä´éÂÒ¡à¡Ô¹ä»µÒÁ·ÕèËÅÒÂæ¤¹¤Ô´" ... ¤§¨ÐÁÕ¤¹¶ÒÁÇèÒ ·ÓäÁ¼ÁäÁèÊ͹ãËéÍ͡Ẻ ËÃ×Í ·Ó㺢Ò ¡Ñº ÅÙ¡¤éÒ ÁÒ¡è͹ ... µÍºä´éàŤÃѺÇèÒ ¡Ã³Õ¹ÕéÁѹÂѧäÁèãªè»ÃÐà´ç¹ËÅÑ¡æ·ÕèÊӤѭ àÁ×èÍà·Õº¡Ñº ¡Ò÷Ó㺢Ò ¡Ñº ÃÒ¡ÒÃÊÔ¹¤éÒ¡è͹ËÃÍ¡¤ÃѺ à¾ÃÒТÑ鹵͹¹Õé àÃÒÂѧäÁè¨Óà»ç¹µéͧä»Í͡ẺµÒÃÒ§¢éÍÁÙÅ´éÇ«éÓä» áµèâ»Ãá¡ÃÁ¨ÐÊÒÁÒö¤é¹ËÒÃËÑÊÊÔ¹¤éÒ¨Ò¡µÒÃÒ§¢éÍÁÙÅÍÍ¡ÁÒä´é ¾ÃéÍÁ¡Ñº ¡Ò÷Õè¼ÙéãªéÊÒÁÒöà¢éÒä»á¡é䢢éÍÁÙÅã¹µÒÃÒ§¡ÃÔ´â´ÂµÃ§ä´é·Ñ¹·Õ ... ¡Ò÷ÓẺ¹Õé àÃÒàÃÕ¡ÇèÒ Friendly Use ËÃ×Í à»ç¹ÁԵáѺ¼Ùéãªé§Ò¹ ... «Ö觨Ðᵡµèҧ仨ҡËÅÒÂæâ»Ãá¡ÃÁ·Õèà¢Ò·Ó¢Ò¡ѹ ËÃ×Í µÒÁ˹ѧÊ×Í ... äÁèàª×è͵éͧ´ÒǹìâËÅ´ Source Code ÁÒ·´Êͺ´Ù¹èФÃѺ¼Á
´ÒǹìâËÅ´
´ÒǹìâËÅ´ Source Code ÊÓËÃѺ MS Visual Basic 6.0 - Service Pack 6
 ´ÒǹìâËÅ´ Visual Basic 6.0 SP5: Run-Time Redistribution Pack
 ´ÒǹìâËÅ´ Microsoft Data Access Object (MDAC) áÅÐ Jet 4.0 Update
 ´ÒǹìâËÅ´ Microsoft Visual Basic Service Pack 6
¢éÍÁÙÅà¾ÔèÁàµÔÁ
µÒÃÒ§¡ÃÔ´ (MS Flex Grid) ¸ÃÃÁ´Ò ·ÕèäÁè¸ÃÃÁ´Ò ... VB 6.0
¡ÒÃÍèÒ¹¢éÍÁÙÅẺ Text File à¢éÒÊÙè MS FlexGrid ´éÇ MS Visual Basic 6.0
µÒÃÒ§¡ÃÔ´ (MS Flex Grid) ¸ÃÃÁ´Ò ·ÕèäÁè¸ÃÃÁ´Ò ... µÍ¹¡ÒèѴàÃÕ§¢éÍÁÙÅ㹡ÒÃáÊ´§¼ÅãËé MS FlexGrid
µÒÃÒ§¡ÃÔ´ (MS Flex Grid) ¸ÃÃÁ´Ò ·ÕèäÁè¸ÃÃÁ´Ò ... µÍ¹ãªé Wheel Mouse ã¹ MS FlexGrid
µÒÃÒ§¡ÃÔ´ (MS Flex Grid) ¸ÃÃÁ´Ò ·ÕèäÁè¸ÃÃÁ´Ò ... µÍ¹¨ÑºÂÑ´¢éÍÁÙÅà¢éÒä»ã¹ MS FlexGrid ä´é
¾×鹰ҹ㹡ÒÃãªé§Ò¹ MS FlexGrid ¡è͹ÊÃéÒ§¤ÇÒÁÊÑÁ¾Ñ¹¸ìẺ One To Many (ÀÒ¤ 1)
àÃÔèÁµé¹¡Ãкǹ¡Ò÷ӧҹ

Projects --> References ...


Projects --> Component ...


¡ÒÃÍ͡Ẻ Design Time
modDataBase.bas âÁ´ÙÅËÒ¡Ô¹ (ÁѹÁÒÍÕ¡áÅéÇ) ... 55555+

Option Explicit

Global ConnDB As New ADODB.Connection
Global RS As New ADODB.Recordset
Global DS As New ADODB.Recordset
Global Statement As String
Global SQLStmt As String
'
' ¡Ó˹´ÇèÒà»ç¹¡ÒÃà¾ÔèÁ ËÃ×Í á¡é䢢éÍÁÙÅ
Global blnNewData As Boolean
' ãËéà¡Ô´¡Òà Update 㹿ÍÃìÁ·ÕèÁÕ¡ÒÃà»ÅÕè¹á»Å§
Global FormUpdate As Boolean

' àª×èÍÁà¢éÒÊÙèä¿Åì°Ò¹¢éÍÁÙÅ MS Access
Public Sub OpenDataBase()
On Error GoTo Err_Handler
Dim DB_File As String
    DB_File = App.Path
    If Right$(DB_File, 1) <> "\" Then DB_File = DB_File & "\"
    DB_File = DB_File & "ProductDB.MDB"
    ' Open a connection.
    Set ConnDB = New ADODB.Connection
    ConnDB.ConnectionString = _
        "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & DB_File & ";" & _
        "Persist Security Info=False"
    ConnDB.Open
    Exit Sub
    
Err_Handler:
    MsgBox "Error : " & Err.Number & " " & Err.Description
    End
End Sub

Public Sub CloseDataBase()
    ' µÃǨÊͺÇèÒÁÕ¡ÒÃàª×èÍÁâ§ - Connect ¢éÍÁÙÅËÃ×ÍäÁè
    If ConnDB.State = adStateOpen Then
        ConnDB.Close
        Set ConnDB = Nothing
    End If
End Sub


Query - ¡ÒÃàª×èÍÁ¤ÇÒÁÊÑÁ¾Ñ¹¸ì¢Í§µÒÃÒ§ÊÔ¹¤éÒ (tblProduct) ¡Ñº µÒÃҧ˹èǹѺ (tblUnit) ... §Ò¹¨ÃÔ§æàŹèФÃѺ

¨Ò¡¹Ñé¹ä»àÅ×Í¡ÁØÁÁͧ SQL áÅéǵѴ Query Statement ÁÒá»Ðŧ㹠Visual Basic 6 ä´éàÅ ... ËÁÙÍÙê´æàÅÂ
SELECT tblProduct.ProductPK, tblProduct.ProductCode, tblProduct.Description, tblUnit.UnitName, tblProduct.PriceUnit
FROM tblProduct INNER JOIN tblUnit ON tblProduct.UnitFK = tblUnit.UnitPK



- ÍÂèÒ§·ÕèºÍ¡¡Ñ¹ÁÒµÅÍ´¤ÃѺ ËÅÑ¡áá (0) µéͧ¹ÓàÍÒ¤èÒ Primary 仫è͹äÁèãËé User àËç¹
- Primary Key µéͧäÁèãªèÃËÑÊÊÔ¹¤éÒ (ProductCode) ´éǤÃѺ

â¤é´ã¹¡Òäé¹ËÒÃËÑÊÊÔ¹¤éÒ¨Ò¡µÒÃÒ§¢éÍÁÙÅ tblProduct ... áÊ´§à©¾ÒÐÊèǹÊӤѭ¹èФÃѺ

' ======================================================
' ¡ÒõÑ駤èҤسÊÁºÑµÔ¢Í§ MS FlexGrid ã¹ÅѡɳТͧ Run Time
' ======================================================
Sub SetupGrid()
    With fgData
        .FixedRows = 1
        .FixedCols = 0
        ' ¡Ó˹´ 7 ËÅÑ¡
        .Cols = 7
        ' ¡Ó˹´ 1 á¶Ç (੾ÒÐ Column Header)
        .Rows = 1
        .ColWidth(0) = 0
        .ColWidth(1) = .Width \ 6 - 100
        .ColWidth(2) = .Width \ 6 + 250
        .ColWidth(3) = .Width \ 6 - 200
        .ColWidth(4) = .Width \ 6 - 100
        .ColWidth(5) = .Width \ 6 - 200
        .ColWidth(6) = .Width \ 6
        
        .TextMatrix(0, 0) = "PK"
        .TextMatrix(0, 1) = "ÃËÑÊÊÔ¹¤éÒ"
        .TextMatrix(0, 2) = "ª×èÍÊÔ¹¤éÒ"
        .TextMatrix(0, 3) = "˹èǹѺ"
        .TextMatrix(0, 4) = "ÃÒ¤ÒÊÔ¹¤éÒ"
        .TextMatrix(0, 5) = "¨Ó¹Ç¹" ' »é͹¢éÍÁÙÅä´éã¹ËÅÑ¡¹Õé
        .TextMatrix(0, 6) = "ÃÇÁ¨Ó¹Ç¹à§Ô¹"
    End With
    
End Sub

' ======================================================
' ¡ÒÃà¡Ô´à˵ءÒóì¤é¹ËÒ¢éÍÁÙÅÃËÑÊÊÔ¹¤éÒ â´Â¡Òá´»ØèÁ Enter
' ======================================================
Private Sub txtSearch_KeyPress(KeyAscii As Integer)
    If KeyAscii = vbKeyReturn Then
        Call CheckDataRow
    End If
End Sub

' ======================================================
' ¡ÒõÃǨÊͺ¤èÒã¹ MS FlexGrid ¡è͹·Õè¨ÐáÊ´§¼ÅÃÒ¡ÒÃãËÁè
' ======================================================
Private Sub CheckDataRow()
    Dim CurrentRow As Integer

    ' µÃǨÊͺÇèÒà»ç¹¤èÒÇèÒ§ËÃ×ÍäÁè ËÒ¡ãªè¡çÍÍ¡¨Ò¡â»Ãá¡ÃÁÂèÍ (User äÁèÁÕ¡ÒäÕÂì¢éÍÁÙÅã´æ)
    If Trim(txtSearch.Text) = "" Or Len(Trim(txtSearch.Text)) = 0 Then
        txtSearch.SetFocus
        Exit Sub
    End If

    ' ¤é¹ËÒ¢éÍÁÙÅÃËÑÊÊÔ¹¤éÒã¹µÒÃÒ§ÊÔ¹¤éÒ (tblProduct)
    ' ºÒ§¤¹ÍÒ¨¨ÐäÁèà¢éÒã¨ã¹Êèǹ¹Õé ¢ÍãËé¡ÅѺä»ÍèÒ¹º·¤ÇÒÁàÃ×èͧ VB6 ¡Ñº Access
    ' µÑé§áµèáá¡è͹¹èФÃѺ à¾ÃÒйÕèäÁèä´éÁҨҡ˹ѧÊ×Í áµèÁÒ¨Ò¡»ÃÐʺ¡ÒóìÅéǹæ¢Í§¼Á
Set RS = New Recordset Statement = "SELECT tblProduct.ProductPK, tblProduct.ProductCode, " & _ " tblProduct.Description, tblUnit.UnitName, tblProduct.PriceUnit " & _ " FROM tblProduct INNER JOIN tblUnit ON tblProduct.UnitFK = tblUnit.UnitPK " & _ " WHERE ProductCode = " & "'" & Trim$(txtSearch.Text) & "'" ' à¤ÅÕÂÃì¤èÒäÇéÃÍàÅ txtSearch.Text = "" RS.CursorLocation = adUseClient ' ¡Òäé¹ËÒ¢éÍÁÙŵéͧãªé¡ÒÃÍèÒ¹à´Ô¹Ë¹éÒÍÂèÒ§à´ÕÂÇ ¨Ð·ÓãËé¡ÒÃà¢éÒ¶Ö§¢éÍÁÙÅä´éàÃçÇ¢Öé¹ ... ÍÂèÒÅ×Á RS.Open Statement, ConnDB, adOpenForwardOnly, adLockReadOnly, adCmdText ' äÁ辺¢éÍÁÙÅ ãËéÍÍ¡¨Ò¡â»Ãá¡ÃÁÂèÍÂä»ä´éàÅ If RS.RecordCount = 0 Then RS.Close: Set RS = Nothing Exit Sub End If ' àÃÔèÁµé¹¡Òäé¹ËÒ¢éÍÁÙÅã¹µÒÃÒ§¡ÃÔ´ For CurrentRow = 1 To fgData.Rows - 1 ' ¤é¹ËÒÃËÑÊÊÔ¹¤éÒ·ÕèÍÂÙèã¹ËÅÑ¡·Õè 1 If fgData.TextMatrix(CurrentRow, 1) = RS("ProductCode") Then ' ËÒ¡¾ºÃÒ¡ÒÃÊÔ¹¤éÒà´ÔÁãÊè¨Ó¹Ç¹ÊÔ¹¤éÒà¾ÔèÁà¢éÒä»ÍÕ¡ 1 ·Ñ¹·Õ ã¹á¶Ç·ÕèÍÂÙè ³ »Ñ¨¨ØºÑ¹ fgData.TextMatrix(CurrentRow, 5) = Val(fgData.TextMatrix(CurrentRow, 5)) + 1 ' ¤Ù³ÃÒ¤ÒÊÔ¹¤éÒ ¡Ñº¨Ó¹Ç¹ÊÔ¹¤éÒà¢éÒä»ãËÁè fgData.TextMatrix(CurrentRow, 6) = Format(Val(fgData.TextMatrix(CurrentRow, 4)) * _ Val(fgData.TextMatrix(CurrentRow, 5)), "0.00") RS.Close: Set RS = Nothing ' ä»â»Ãá¡ÃÁÂèÍÂà¾×èͤӹdz¨Ó¹Ç¹à§Ô¹·Ñé§ËÁ´ Call CalTotalAmount ' ¨º¨Ò¡¡ÒÃǹÃͺ FOR áÅÐ ÍÍ¡¨Ò¡â»Ãá¡ÃÁÂèÍÂä»àŤÃѺ Exit Sub End If Next ' ================================================= ' ¡ÒùÓÃÒÂÅÐàÍÕ´¢Í§ÊÔ¹¤éÒà¢éÒÊÙèµÒÃÒ§¡ÃÔ´¹Ñè¹àͧ ' ================================================= ' à¾ÔèÁ¨Ó¹Ç¹á¶Çã¹ MS FlexGrid ÍÕ¡ 1 á¶Ç fgData.Rows = fgData.Rows + 1 ' ãËéá¶Ç»Ñ¨¨ØºÑ¹Å´Å§ 1 (à¾×èÍäÁèãËé¹Ñº Column Header) CurrentRow = fgData.Rows - 1 ' á¶ÇãËÁè·Õèà¾ÔèÁà¢éÒÁÒ ·Ó¡ÒÃÍèÒ¹¢éÍÁÙŨҡ RecordSet à¢éÒÁÒ ' »¡µÔËÅÑ¡áá (ËÅÑ¡ 0) µéͧ¹ÓàÍÒ¤èÒ Primary Key 仫è͹àÍÒäÇé¹èФÃѺ ... ÍÂèÒÅ×Á fgData.TextMatrix(CurrentRow, 0) = RS("ProductPK") ' áÊ´§ÃËÑÊÊÔ¹¤éÒ fgData.TextMatrix(CurrentRow, 1) = "" & RS("ProductCode") ' áÊ´§ª×èÍÊÔ¹¤éÒ fgData.TextMatrix(CurrentRow, 2) = "" & RS("Description") ' áÊ´§Ë¹èǹѺÊÔ¹¤éÒ fgData.TextMatrix(CurrentRow, 3) = "" & RS("UnitName") ' áÊ´§ÃÒ¤ÒÊÔ¹¤éÒ fgData.TextMatrix(CurrentRow, 4) = Format(RS("PriceUnit"), "0.00") ' ãÊè¨Ó¹Ç¹ÊÔ¹¤éÒ¤ÃÑé§ÅÐ 1 fgData.TextMatrix(CurrentRow, 5) = 1 ' ¤Ó¹Ç³ÃÒ¤Ò¢Ò ¡Ñº ¨Ó¹Ç¹ fgData.TextMatrix(CurrentRow, 6) = Format(fgData.TextMatrix(CurrentRow, 4) * _ fgData.TextMatrix(CurrentRow, 5), "0.00") RS.Close: Set RS = Nothing ' ä»â»Ãá¡ÃÁÂèÍÂà¾×èͤӹdz¨Ó¹Ç¹à§Ô¹·Ñé§ËÁ´ Call CalTotalAmount End Sub ' ============================================= ' ¤Ó¹Ç³ËÒ¼ÅÃÇÁ¢Í§ÃÒ¤ÒÊÔ¹¤éÒ·Ñé§ËÁ´ ' ============================================= Sub CalTotalAmount() ' ËÒ¡äÁèÁÕÊÑ¡ÃÒ¡ÒáçãËéÍÍ¡¨Ò¡â»Ãá¡ÃÁÂèÍÂä»àÅ If fgData.Rows = 1 Then Exit Sub Dim i As Integer Dim TotalAmount As Double ' ¹Ñºä»µÒÁ¨Ó¹Ç¹á¶Ç·ÕèÁÕÍÂÙè»Ñ¨¨ØºÑ¹¢Í§µÒÃÒ§¡ÃÔ´ ¨¹¡ÇèÒ¨ÐËÁ´ ' áÅéÇÃÇÁ¤èÒã¹ËÅÑ¡·Õè 6 äÇéã¹µÑÇá»ÃàÇÕ¹á·Õ¹ TotalAmount ... 55555+ For i = 1 To fgData.Rows - 1 TotalAmount = TotalAmount + Val(fgData.TextMatrix(i, 6)) Next lblTotalAmount.Caption = Format(TotalAmount, "#,##0.00") End Sub
ÅͧÂé͹¡ÅѺ价ÕèÀÒ¤ 1 ´ÙàŤÃѺ ... ÁѹÂѧ¤§ËÅÑ¡¡Òà ÇÔ¸Õ¤Ô´àªè¹à´ÔÁ áµèÊÔè§ËÅÑ¡æ·Õèà¾ÔèÁà¢éÒÁÒá·¹ (µÒÁ·Õèà¤ÂºÍ¡äÇéÅèǧ˹éÒáÅéÇ) ¡ç¤×Í ¡ÒÃÊÃéÒ§ RecordSet à¾×èÍ·Ó¡Òäé¹ËÒÃËÑÊÊÔ¹¤éÒ¨ÃÔ§æ ·ÕèÍÂÙèã¹µÒÃÒ§¢éÍÁÙÅ à¾×è͹ÓÁÒà»ÃÕºà·Õº¤èÒ (à¤Ã×èͧËÁÒ = ¹èФÃѺ) à¾ÃÒÐ㹡óչÕéàÃÒ¨Ðãªé LIKE äÁèä´é (Ãͺ˹éÒ¡ç¨ÐÁպ͡ÍÕ¡áËÅФÃѺ ... ¾Õè¹éͧ) ... ä˹æ¡çä˹áÅéÇ áºº¹ÕéÁѹÂѧäÁèà·è ¡Ôêºà¡ë¾Í àÃÒµéͧàÊ¡ãËéµÒÃÒ§¡ÃÔ´ÁѹÊÒÁÒö »é͹¢éÍÁÙÅŧä»ã¹ËÅÑ¡ áÅÐ á¶Ç·ÕèàÃÒµéͧ¡ÒÃä´é´éǨдաÇèÒ ... ¡çàÍÒÁÒ¨Ò¡º·¤ÇÒÁ·Õè¼Áà¤Âà¢Õ¹ä»áÅéǹÑè¹áËÅФÃѺ ... ÍÔÍÔÍÔÍÔÍÔ

â¤é´ã¹¡ÒÃàÊ¡à´ç¡à¢éÒ·éͧ àÍé ·ÓãËéµÒÃÒ§¡ÃÔ´¸ÃÃÁ´Òæ ÊÒÁÒö»é͹¢éÍÁÙÅŧä»ä´é
ÍèÒ¹á¹Ç·Ò§¢Í§¡ÒÃÍ͡Ẻ áÅÐ ¨Ô¹µ¹Ò¡ÒÃãËéµÒÃÒ§¡ÃÔ´ÊÒÁÒö»é͹¢éÍÁÙÅä´é ... ·Õè¹Õè

' =============================================
' ¾Ô¨ÒóҨҡà˵ءÒóì (Event) 㹡Òà Focus µÃ§µÓá˹è§ã¹ Cell
' =============================================
Sub fgData_EnterCell()
Select Case fgData.Col ' àÅ×Í¡ Column ·Õèµéͧ¡ÒÃ
    Case 0, 1, 2, 3, 4, 6: ' àÃÒäÁèä´é»é͹¢éÍÁÙÅã¹ËÅÑ¡·ÕèÃкØ
        txtData.Visible = False ' ¨Ö§µéͧÊÑè§ãËé»Ô´¡ÒÃÁͧàËç¹ txtData

        
    Case 5: ' âÍठ¶Ù¡µéͧ Cell ·Õè¡ÓÅѧ Focus ÁÒÍÂÙèËÅÑ¡·Õè 5 ¡çàÃÔèÁµé¹¡Ãкǹ¡Ò÷ӧҹä´é
        txtData.Visible = True ' à»Ô´ãËé txtData ÁͧàËç¹ä´é
        txtData.Text = fgData.Text ' ¤èÒà´ÔÁ·ÕèÍÂÙèã¹ Cell ¨Ð¶Ù¡Êè§µèÍä»ãËé txtData à¾×èÍ·Ó¡ÒÃá¡é䢵èÍä»

        ' ¢Ñ鹵͹¹Õé¤×Í¡ÒÃàÅ×è͹µÓá˹觢ͧ txtData ãËé价ѺÍÂÙ躹µÓá˹觢ͧ Cell (ËÅÑ¡·Õè¡Ó˹´) µÒÁ·ÕèàÃÒµéͧ¡ÒÃ
        ' ¡ÒÃà¤Å×è͹·Õè â´Â fgData.Move µÓá˹觷ҧ«éÒÂ, µÓá˹觺¹, ¤ÇÒÁ¡ÇéÒ§¢Í§à«ÅÅì, ¤ÇÒÁÊÙ§¢Í§à«ÅÅì
        txtData.Move fgData.CellLeft + 60, fgData.Top + fgData.CellTop, fgData.CellWidth, fgData.CellHeight

        ' àÁ×èÍ txtData à¤Å×è͹·Õè价ѺµÓáË¹è§ Cell ·ÕèàÃÒµéͧ¡ÒÃáÅéÇ ãËé Focus ä»·Õè txtData à¾×èÍ·Õè¨ÐÊÒÁÒöá¡é䢢éÍÁÙÅŧ㹠TextBox ä´é
        txtData.SetFocus
End Select

End Sub

' àÁ×èͤèÒã¹ TextBox à»ÅÕè¹ ¤èÒã¹ Cell ·Õè TextBox ·ÑºàÍÒäÇé ¡çµéͧà»ÅÕè¹µÒÁ
Private Sub txtData_Change()
    Dim sRow As Integer
    ' ËÒ¤èÒµÓá˹觢ͧá¶Ç
    sRow = fgData.Row
    
    ' àÁ×èÍ txtData à¡Ô´¡ÒÃà»ÅÕè¹á»Å§ ¡ç¨ÐÊ觤èÒãËé¡Ñº Cell ·ÕèàÃÒµéͧ¡ÒôéÇÂ
    ' áµè ³ ¢³Ð¹ÕéàÃÒÂѧÁͧäÁèàËç¹ËÃÍ¡¤ÃѺ à¾ÃÒÐ txtData Áѹ·Ñº Cell äÇéÍÂÙè -- ÊÓÁФѭ¹èеÑǹÕé
    ' ¤èÒã¹ TextBox ¨ÐµéͧäÁèà»ç¹¤èÒÇèÒ§ ËÃ×Í 0 ... ËÒ¡à»ç¹ãÊè 1 ãËéÁѹ«èÐ
    If Trim(txtData.Text) = "" Or Len(Trim(txtData.Text)) = 0 Or txtData.Text = "0" Then txtData.Text = "1"
    
    fgData.TextMatrix(sRow, 5) = txtData.Text
    ' ¤Ó¹Ç³ÃÒ¤Ò áÅÐ ¨Ó¹Ç¹ÊÔ¹¤éÒ
    fgData.TextMatrix(sRow, 6) = Format(fgData.TextMatrix(sRow, 4) * fgData.TextMatrix(sRow, 5), "0.00")

    ' ä»â»Ãá¡ÃÁÂèÍÂà¾×èͤӹdz¨Ó¹Ç¹à§Ô¹·Ñé§ËÁ´
    Call CalTotalAmount

End Sub

Private Sub txtData_GotFocus()
    ' â»Ãá¡ÃÁÂèÍÂ㹡ÒÃ·Ó High Light ã¹ TextBox
    Call HLText(txtData)
End Sub

' ¡Òôѡ¤ÕÂì·Õ衴ŧº¹ TextBox
Private Sub txtData_KeyDown(KeyCode As Integer, Shift As Integer)
    Select Case KeyCode
        Case vbKeyDown
            SendKeys "{DOWN}"
            Call txtData_KeyPress(vbKeyReturn)
        Case vbKeyUp
            SendKeys "{UP}"
            Call txtData_KeyPress(vbKeyReturn)
        Case vbKeyEscape
            Call txtData_KeyPress(vbKeyReturn)
    End Select
End Sub

Private Sub txtData_KeyPress(KeyAscii As Integer)
    If KeyAscii = vbKeyReturn Then
        txtData.Visible = False
        KeyAscii = 0
    Else
        ' µÃǨÊͺ¡Òá´¤ÕÂìµÑÇàÅ¢ä´éà·èÒ¹Ñé¹
        KeyAscii = CheckDigitOnly(KeyAscii)
    End If

End Sub

' ==========================================================
' ¾Ç¡¿Ñ§¤ìªÑè¹àËÅèÒ¹ÕéàÃÒµéͧãªé§Ò¹ºèÍÂæ ¤ÇùÓä»à¡çºäÇéã¹ Module ¨Ð´Õ¡ÇèÒ¹èФÃѺ
' ==========================================================
' µÃǨÊͺ¡Òûé͹¤èÒä´é੾ÒеÑÇàÅ¢
Function CheckDigitOnly(Index As Integer) As Integer
    Select Case Index
        Case 48 To 57 ' 0 - 9
        Case 8            ' Back Space
        Case 13         ' Enter
        Case Else
            Index = 0
    End Select
    CheckDigitOnly = Index
End Function

' â»Ãá¡ÃÁÂèÍÂ㹡ÒÃ·Ó High Light ã¹ TextBox ... ãªéÃèÇÁ¡Ñº GotFocus
Public Sub HLText(ByRef sText)
    On Error Resume Next
    With sText
        .SelStart = 0
        .SelLength = Len(sText.Text)
    End With
End Sub
Conclusion:
ËÒ¡¾Õè¹éͧ·èҹ㴠à¤Â¾ºàËç¹ÇÔ¸Õ¡ÒÃÊ͹Ẻ¹Õé ¢ÍãËéÃѺÃÙéäÇéàÅÂÇèÒ ¤¹¼Ùé¹Ñé¹µéͧ¿Ñ¹½èһѭËÒ ÍØ»ÊÃä ÊÓËÃѺ¡ÒþѲ¹Ò½Ö¡½¹µ¹àͧ ã¹§Ò¹à¢Õ¹â»Ãá¡ÃÁµèÒ§æ ÁÒÍÂèÒ§·ÃË´ Í´·¹àÍÒÁÒ¡æ ... ¤Ô¡ææææ ... àÍéÒ äÁèä´éÅéÍàÅè¹¹èФÃѺ à¾ÃÒÐÊÔè§àËÅèÒ¹ÕéÁѹäÁèà¤Â»ÃÒ¡¯ÍÂÙèµÒÁ˹ѧÊ×Í µÒÁµÓÃÒàÅÂÊÑ¡àÅèÁ ËÃ×ÍàÇçºä«µìã´æ ... áµè¼Á¡çËÇѧäÇéºéÒ§ÇèÒ ¤§¨ÐáçºÑ¹´ÒÅ㨠ãËé¡Ñº¾Õè¹éͧËÅÒÂæ·èÒ¹ (·Õè¤Ô´ÇèÒ¡ÒÃà¢Õ¹â»Ãá¡ÃÁÁѹà»ç¹àÃ×èͧÂÒ¡àÂç¹àÍÒ«èÐàËÅ×Íà¡Ô¹) ¨§ÁÕ¤ÇÒÁ¾ÂÒÂÒÁ ¿Ñ¹½èÒÍØ»ÊÃä ¢Çҡ˹ÒÁ·Ñé§ËÅÒ àËÁ×͹·Õè¼Áà¤ÂÊÑÁ¼ÑÊÁÒáÅéÇ

¨Õ ·Ù ¨Õ à¹çµ ´Íµ ¤ÍÁ - g2gNet Dot Com
àÅ¢·ÐàºÕ¹¾Ò³ÔªÂìÍÔàÅç¡·Ã͹ԡÊì 0407314800231
CopyLeft © 2004 - 2099 g2gNet.Com All rights reserved.
Email: [email protected] ËÃ×Í â·Ã. 08-6862-6560