 |
|
วิธีการ select combobox ใน datagridview เพื่อไปแสดงบนอีก column (VB) |
|
 |
|
|
 |
 |
|
Code (VB.NET)
Private Sub DataGridView1_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles DataGridView1.EditingControlShowing
If TypeOf e.Control Is ComboBox Then
If DataGridView1.CurrentCell.ColumnIndex = 0 Then
Dim cb As ComboBox = TryCast(e.Control, ComboBox)
'remove handler if it was added before
RemoveHandler cb.SelectedIndexChanged, AddressOf ColumnCombo1SelectionChanged
AddHandler cb.SelectedIndexChanged, AddressOf ColumnCombo1SelectionChanged
End If
End If
End Sub
Private Sub ColumnCombo1SelectionChanged(sender As Object, e As EventArgs)
Dim combo As ComboBox = CType(sender, ComboBox)
'ค้นหาข้อมูลที่นี่ โดยใช้ combo.Text เป็นเงื่อนไขค้นหา
End Sub
|
 |
 |
 |
 |
Date :
2017-05-29 18:28:32 |
By :
pakyaudio |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณครับได้ผลอย่างไรจะมาแจ้งให้ทราบนะครับคุณ : pakyaudio
|
 |
 |
 |
 |
Date :
2017-05-30 08:51:49 |
By :
monsteralive |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
1 ไอดีน่าจะมีข้อมูลแถวเดียวไม่ต้อง While ก็ได้ครับ
Code (VB.NET)
Private Sub ColumnCombo1SelectionChanged(sender As Object, e As EventArgs)
Dim combo As ComboBox = CType(sender, ComboBox)
'ค้นหาข้อมูลที่นี่ โดยใช้ combo.Text เป็นเงื่อนไขค้นหา
Dim dr As OleDbDataReader
Dim s As String = "select * from product where Pid = '" & combo.Text & "' "
dr = ExecuteReader(s)
dr.Read()
dgv.CurrentRow.Cells(1).Value= dr.Item("Pname")
dgv.CurrentRow.Cells(2).Value= dr.Item("bar")
dgv.CurrentRow.Cells(3).Value= dr.Item("bar")
dgv.CurrentRow.Cells(4).Value= dr.Item("bar")
dgv.CurrentRow.Cells(5).Value= dr.Item("bar")
dgv.CurrentRow.Cells(6).Value= dr.Item("bar")
dgv.CurrentRow.Cells(7).Value= dr.Item("bar")
|
 |
 |
 |
 |
Date :
2017-05-30 10:18:14 |
By :
pakyaudio |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณครับ คุณ pakyaudio ช่วยให้กระจ่างเลยครับว่าการทำงานของ .text ธรรมดา กับ column บน DataGridviews นั้นคำสั่งต่างกัน
ขอบคุณมากเลยครับ
|
 |
 |
 |
 |
Date :
2017-05-30 15:03:29 |
By :
monsteralive |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอถามนิดหนึ่งครับว่า ทำไม ไม่ใช้ DataGridViewComboBoxColumn ในการเลือก ชื่อสินค้า
แทนที่จะให้ user ท่องจำ รหัสสินค้า ละครับ

ถ้าขัดกับเจตนารมณ์เดิมก็ไม่เป็นไรครับ
พอดีผมนึกภาพตอน user ใช้งานโปรแกรม แล้วต้องนั่งจำ รหัสสินค้า เพื่อเอามาป้อนข้อมูลก็สงสาร user ครับ
แต่ถ้าใช้ DataGridViewComboBoxColumn ในการเลือก ชื่อสินค้า แทนที่จะเลือก รหัสสินค้า
ก็น่าจะช่วย user ได้เยอะครับ
|
 |
 |
 |
 |
Date :
2017-05-30 16:16:10 |
By :
lamaka.tor |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอแทรกนิดนึงน่ะครับ
เท่าที่เคยได้ใช้ดูจากโปรแกรมอื่น ๆ น่ะครับ
ปกติ combobox ในตารางจะใช้กับพวกตัวเลือกเล็ก ๆ น้อย ๆ เช่น
Status ต่าง ๆ
หรือการเลือก option เล็ก ๆ น้อย ๆ
มี 1-10 ข้อให้เลือก
เพราะถ้ามันมีตัวเลือกเป็น 100 หรือเป็น 1000
น่าจะไม่ค่อยสะดวกในการใช้งานครับ
ทึ่เคยเห็นแล้วดูน่าประทับใจก็จะเป็น
การกรอกข้อมูลเข้าไปนิดหน่อย แล้วระบบค้นหาสิ่งที่ใกล้เคียงมาให้เลือกครับ
เช่นกรอกเข้าไป ไฟ แดง 25
ก็จะมีพวก สายไฟต่าง ๆ สีแดง ขนาด 25 มาให้เลือกเลยครับ
ผิดถูกขอภัยน่ะครับ
|
 |
 |
 |
 |
Date :
2017-05-30 16:43:42 |
By :
fonfire |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณทุกคอมเมนท์นะครับ ช่วยได้เยอะเลยในการนำไปพัฒนางาน
ขอบคุณมากๆครับ (TOR_CHEMISTRY ,FONFIRE , pakyaudio )
|
 |
 |
 |
 |
Date :
2017-05-31 08:40:42 |
By :
monsteralive |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
สอบถามเพิ่มเติมนะครับในช่องจำนวน กับ หน่วยละ
ผมเอามาคำนวณแบบนี้ผิดตรงไหนครับเพราะมันไม่ขึ้นผลลัพธ์ที่ช่องรวม
Code (VB.NET)
Private Sub cal()
Dim i As Integer = 0
Dim total As Integer = 0
For i = 0 To dgv_SO.Rows.Count - 1
total = CDbl(dgv_SO.Rows(i).Cells(2).Value) * CDbl(dgv_SO.Rows(i).Cells(4).Value)
total = dgv_SO.Rows(i).Cells(5).Value
Next
tb_total.Text = total.ToString("##,##0.0")
End Sub
|
 |
 |
 |
 |
Date :
2017-06-01 15:39:41 |
By :
monsteralive |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Code (VB.NET)
total = CDbl(dgv_SO.Rows(i).Cells(2).Value) * CDbl(dgv_SO.Rows(i).Cells(4).Value)
total = dgv_SO.Rows(i).Cells(5).Value
ไม่มีการเอา total ไปใช้งานครับ
ผมเดาว่า ท่านคงอยากให้เป็นแบบนี้รึป่าวครับ
Code (VB.NET)
total = CDbl(dgv_SO.Rows(i).Cells(2).Value) * CDbl(dgv_SO.Rows(i).Cells(4).Value)
dgv_SO.Rows(i).Cells(5).Value = total 'ให้คอลัมที่ 5 โชว ค่า ที่ รวมมาได้
ปล. แนะนำให้ยัดโค้ดเกี่ยวกับการคำนวณ นี้ไว้ใน CellEndEdit Event ดีไม๊ครับ
ผมมองว่า มันควรจะคำนวณให้เราเลย เมื่อ เรากรอกตัวเลขเสร็จแล้วประมาณนี้ครับ
Code (VB.NET)
Private Sub DataGridView1_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
Try
DataGridView1(5, e.RowIndex).Value = CDbl(DataGridView1(2, e.RowIndex).Value) * CDbl(DataGridView1(4, e.RowIndex).Value)
Catch ex As Exception
End Try
'ใส่ Try ไว้ เผื่อค่าที่กรอกไปมีปัญหาไปงั้นๆแหละ
End Sub
แบบนี้ถึงเราจะกรอกข้อมูลลง DataGridView ด้วยมือเอง หรือดึงมาจาก datatable เอง มันก็จะคำนวณให้ อยู่แล้ว
|
ประวัติการแก้ไข 2017-06-01 16:07:19
 |
 |
 |
 |
Date :
2017-06-01 15:53:13 |
By :
lamaka.tor |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ลองเช็คให้หน่อยครับ
Code (VB.NET)
Private Sub cal()
Dim i As Integer = 0
Dim total As Integer = 0
For i = 0 To dgv_SO.Rows.Count - 1
total = CDbl(dgv_SO.Rows(i).Cells(2).Value) * CDbl(dgv_SO.Rows(i).Cells(4).Value)
dgv_SO.Rows(i).Cells(5).Value = total
MessageBox.Show(total) 'แค่อยากรู้ว่ามันคำนวณให้เรารึป่าว
Next
tb_total.Text = total.ToString("##,##0.0")
End Sub
|
 |
 |
 |
 |
Date :
2017-06-01 16:23:58 |
By :
lamaka.tor |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ในลูปค่า Total ไม่ได้บวกของเก่าครับ
รับค่ามาใหม่ทุกรอบ
Private Sub cal()
Dim i As Integer = 0
Dim total As Integer = 0
For i = 0 To dgv_SO.Rows.Count - 1
total += CDbl(dgv_SO.Rows(i).Cells(2).Value) * CDbl(dgv_SO.Rows(i).Cells(4).Value)
dgv_SO.Rows(i).Cells(5).Value = total
Next
tb_total.Text = total.ToString("##,##0.0")
End Sub
|
 |
 |
 |
 |
Date :
2017-06-01 17:11:29 |
By :
fonfire |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
@monsteralive
ผมอยากได้ Input/Output แบบนี้ (Windows Application/Web Applicatin)

คุณคิดว่า "ความต้องการของผม พอจะมีคนซวยไหม?"
|
 |
 |
 |
 |
Date :
2017-06-01 21:51:23 |
By :
รถคันนี้สีดำ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ทำไม? "รถคันนี้สำดำ"
ทำไม? " รถคันนี้สีดำ"
"เกิดมาเป็นขี้ข้า" + 98% (A. ขาวก็เอา B. เทาก็เอา C. ดำก็เอา)
"เกิดมาเป็นพ่อค้า" + 1% (A + C + D + E)
"เกิดมาเป็นคหบดี" + 1% (A + C + D + E + F)
+55555
|
 |
 |
 |
 |
Date :
2017-06-01 22:23:34 |
By :
สีดำและสำดี |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ตอบความคิดเห็นที่ : 32 เขียนโดย : monsteralive เมื่อวันที่ 2017-06-02 10:54:23
รายละเอียดของการตอบ ::
น่าจะมียอดรวม ก่อนคิด VAT อีกช่องหนึ่งรึป่าวครับ(แต่ก็ช่างเถอะ 55555)
เอาเป็นว่า มองยังงี้นะครับ(กรุณนึกภาพแล้วคล้อยตาม)
1. เปิดหน้ามาปุ๊บ ค่า vat จะเป็นค่ามาตรฐานที่เรากำหนด(จะเป็น 0 หรือ 7% หรือ 100% ก็ว่ากันไป)
พอ User กรอกตัวเลขใน datagrid หรือรับข้อมูลเข้ามา(เอาเป็นว่า มีการเปลี่ยนแปลง ข้อมูลละกัน)
ก็จะมีการคำนวณ ตรงช่อง เป็นเงิน
แล้วก็นำมาคิดยอดรวมด้านลง
ถึงตอนนี้ไม่งงนะครับ
2. พอ User คลิกเปลี่ยน VAT ใน combobox ก็ให้นำค่า ใน datagrid มาคิดใหม่
สมมุติ นะครับ สมมุติ
ถ้าเรามี method CalVAT() ซักตัวคิดเอาสดๆนี่แหละ 55
เพื่อมาจัดการเรื่อง VAT
แล้วมีการเรียกใช้ทุกครั้งที่ มีการเปลี่ยนแปลง ข้อมูล ของ Datagrid และ/หรือ combobox
มันจะหมายความว่า
ทั้ง User กรอกตัวข้อมูลใน Datagrid และ/หรือ เปลี่ยนค่า VAT ใน combobox
ก็ให้ CalVAT() เพื่อ เปลี่ยนค่า tb_total.text
ถ้าเรามี ค่าก่อนรวม VAT ซึ่งเปลี่ยนแปลงทุกครั้งที่ มีการเปลี่ยนแปลง ข้อมูล ของ Datagrid ยังตามยุนะครับ
เราก็จะเอาค่านั้นๆ มาคิดได้เลย โดยไม่ต้องไป forloop เพื่อ sum ค่าอีก
บ้านๆง่ายๆก็ประมาณนี้ครับ
มองถึงตอนที่ User ใช้งาน อย่ามองตอนที่เราเขียนโปรแกรม แล้วจะนึกภาพการทำงานของโปรแกรมง่ายขึ้น
|
 |
 |
 |
 |
Date :
2017-06-02 12:30:27 |
By :
lamaka.tor |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
คำสั่ง cal เรียกใช้ตอนไหนเหรอคัรบ
อันนี้ไม่น่าเกี่ยวน่ะครับ
dgv_SO.Rows(i).Cells(5).Value = total
เพราะเห็นทำใน endedit แล้ว
คืออยากจะเอายอดรวมไว้ที่ textbox เฉย ๆ ใช่ไหมครับ
|
 |
 |
 |
 |
Date :
2017-06-02 15:08:06 |
By :
fonfire |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ลองแบบนี้ดูนะครับ
Code (VB.NET)
Private Sub CalVAT()
txtVat.text = VATttttttttt 'คำนวณ ค่า VAT ออกมา
txtTotalSumVat.txt =CDbl( txtTotal.text) +CDbl( txtVat.text )
End Sub
จากนั้นก็ไปเพิ่มโค้ดใน Event ของ Combobox
Code (VB.NET)
Private Sub ComboBox1_TextChanged(sender As Object, e As EventArgs) Handles ComboBox1.TextChanged
CalVAT()
End Sub
และ
Code (VB.NET)
Private Sub dgv_SO_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles dgv_SO.CellEndEdit
Try
dgv_SO(5, e.RowIndex).Value = CDbl(dgv_SO(2, e.RowIndex).Value) * CDbl(dgv_SO(4, e.RowIndex).Value)
CalVAT()
Catch ex As Exception
End Try
End Sub
แค่นี้ไม่ว่า User จะเปลี่ยน vat ตรง Combobox
หรือกรอกข้อมูลใน DataGridView
ค่ารวมก็จะเปลี่ยนให้เราทั้งนั้นครับ
|
 |
 |
 |
 |
Date :
2017-06-02 15:40:38 |
By :
lamaka.tor |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
txtVat.text = VATttttt
สีแดงนี่คือค่าที่ได้จากคอมโบบอกซ์ใช่ไหมครับ
|
ประวัติการแก้ไข 2017-06-02 16:40:19 2017-06-02 16:41:31
 |
 |
 |
 |
Date :
2017-06-02 16:29:11 |
By :
monsteralive |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
  
|
 |
 |
 |
 |
Date :
2017-06-02 16:50:40 |
By :
lamaka.tor |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|