001.
Public
Class
usrCtrSales3
002.
003.
Private
bsSales
As
New
BindingSource
004.
005.
Private
Sub
usrCtrProduct_Load(sender
As
Object
, e
As
EventArgs)
Handles
Me
.Load
006.
dgvSaleItems.Columns(2).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight
007.
dgvSaleItems.Columns(3).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight
008.
dgvSaleItems.Columns(4).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight
009.
dgvSaleItems.Columns(5).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight
010.
Call
MakeDataTableDEMO_Data()
011.
End
Sub
012.
Private
Sub
MakeDataTableDEMO_Data()
013.
Dim
dtSales
As
New
DataTable
014.
dtSales.Columns.Add(
"Part_NO"
,
GetType
(
String
))
015.
dtSales.Columns.Add(
"Part_Desc"
,
GetType
(
String
))
016.
dtSales.Columns.Add(
"xQTY"
,
GetType
(
Double
))
017.
dtSales.Columns.Add(
"xPrice"
,
GetType
(
Double
))
018.
dtSales.Columns.Add(
"xTotal"
,
GetType
(
Double
))
019.
dtSales.Columns.Add(
"xDiscount"
,
GetType
(
Double
))
020.
021.
dtSales.Rows.Add(
New
Object
() {
"P-001"
,
"สินค้าตัวอย่าง1"
, 2, 50, 100, 0})
022.
dtSales.Rows.Add(
New
Object
() {
"P-002"
,
"สินค้าตัวอย่าง2"
, 5, 30, 150, 0})
023.
dtSales.Rows.Add(
New
Object
() {
"P-003"
,
"สินค้าตัวอย่าง3"
, 4, 6, 24, 0})
024.
025.
dtSales.AcceptChanges()
026.
027.
bsSales.DataSource = dtSales
028.
029.
SetDGVInfo(bsSales)
030.
End
Sub
031.
Private
Sub
SetDGVInfo(
ByVal
bs
As
BindingSource)
032.
dgvSaleItems.AutoGenerateColumns =
False
033.
dgvSaleItems.Columns(0).DataPropertyName =
"Part_NO"
034.
dgvSaleItems.Columns(1).DataPropertyName =
"Part_Desc"
035.
dgvSaleItems.Columns(2).DataPropertyName =
"xQTY"
036.
dgvSaleItems.Columns(3).DataPropertyName =
"xPrice"
037.
dgvSaleItems.Columns(4).DataPropertyName =
"xTotal"
038.
dgvSaleItems.Columns(5).DataPropertyName =
"xDiscount"
039.
dgvSaleItems.DataSource = bsSales
040.
End
Sub
041.
042.
Private
Sub
BacktoPanelHead()
043.
pnlDetail1.Visible =
False
044.
pnlDetail2.Visible =
False
045.
pnlHead.Visible =
True
046.
pnlDetail2.Dock = DockStyle.Bottom
047.
pnlDetail1.Dock = DockStyle.Bottom
048.
pnlHead.Dock = DockStyle.Fill
049.
End
Sub
050.
051.
Private
Sub
tsbAction_Click(sender
As
Object
, e
As
EventArgs)
Handles
tsbAdd.Click
052.
Actions(
"A"
)
053.
End
Sub
054.
055.
Private
Sub
tsbEdit_Click(sender
As
Object
, e
As
EventArgs)
Handles
tsbEdit.Click
056.
Actions(
"E"
)
057.
End
Sub
058.
059.
Private
Sub
Actions(
ByVal
mode
As
String
)
060.
pnlDetail1.Visible =
True
061.
pnlDetail2.Visible =
False
062.
pnlHead.Visible =
False
063.
pnlDetail1.Dock = DockStyle.Fill
064.
pnlDetail2.Dock = DockStyle.None
065.
pnlHead.Dock = DockStyle.None
066.
lblActions.Text =
If
(mode =
"A"
,
"เพิ่มข้อมูล"
,
"แก้ไขข้อมูล"
)
067.
If
mode =
"E"
Then
068.
069.
For
i
As
Integer
= 0
To
Me
.Controls.Count - 1
070.
071.
072.
073.
Next
074.
Else
075.
076.
mduControlManager.GetAllControl(pnlDetail1,
GetType
(WL_Controls.usrCtrlTextBox)).ToList().ForEach(
Sub
(x)
DirectCast
(x, WL_Controls.usrCtrlTextBox).ResetValue())
077.
mduControlManager.GetAllControl(pnlDetail1,
GetType
(WL_Controls.usrCtrComboBox)).ToList().ForEach(
Sub
(x)
DirectCast
(x, WL_Controls.usrCtrComboBox).ResetValue())
078.
End
If
079.
End
Sub
080.
081.
Private
Sub
tsbBack_Click(sender
As
Object
, e
As
EventArgs)
Handles
tsbBack.Click
082.
083.
BacktoPanelHead()
084.
End
Sub
085.
Private
Sub
dgvSaleItems_EditingControlShowing(sender
As
Object
, e
As
DataGridViewEditingControlShowingEventArgs)
Handles
dgvSaleItems.EditingControlShowing
086.
087.
088.
End
Sub
089.
Private
Sub
dgvSaleItems_CellValidating(sender
As
Object
, e
As
DataGridViewCellValidatingEventArgs)
Handles
dgvSaleItems.CellValidating
090.
091.
dgvSaleItems.Rows(e.RowIndex).ErrorText =
String
.Empty
092.
If
dgvSaleItems.Rows(e.RowIndex).IsNewRow
Then
093.
Exit
Sub
094.
End
If
095.
If
dgvSaleItems.CurrentCell.IsInEditMode
Then
096.
If
e.ColumnIndex = 0
Then
097.
dgvSaleItems.Rows(e.RowIndex).Cells(1).Value = Guid.NewGuid()
098.
dgvSaleItems.Rows(e.RowIndex).Cells(2).Value = 1.0
099.
dgvSaleItems.Rows(e.RowIndex).Cells(3).Value = 200.0
100.
dgvSaleItems.Rows(e.RowIndex).Cells(4).Value = 200.0
101.
dgvSaleItems.Rows(e.RowIndex).Cells(5).Value = 0.0
102.
End
If
103.
End
If
104.
If
e.ColumnIndex > 1
Then
105.
Dim
newDouble
As
Double
106.
If
Not
Double
.TryParse(
If
(e.FormattedValue =
String
.Empty, 0, e.FormattedValue.ToString()), newDouble)
OrElse
newDouble < 0
Then
107.
e.Cancel =
True
108.
Me
.dgvSaleItems.Rows(e.RowIndex).ErrorText =
"ต้องป้อนเป็นตัวเลขเท่านั้น"
109.
End
If
110.
End
If
111.
End
Sub
112.
113.
Private
Sub
dgvSaleItems_CellValidated(sender
As
Object
, e
As
DataGridViewCellEventArgs)
Handles
dgvSaleItems.CellValidated
114.
If
Not
dgvSaleItems.CurrentRow.IsNewRow
Then
115.
If
e.ColumnIndex > 1
Then
116.
dgvSaleItems.Rows(e.RowIndex).Cells(4).Value = dgvSaleItems.Rows(e.RowIndex).Cells(2).Value * dgvSaleItems.Rows(e.RowIndex).Cells(3).Value
117.
End
If
118.
End
If
119.
End
Sub
120.
Private
Sub
dgvSaleItems_CellMouseClickORDbClick(
ByVal
sender
As
Object
,
ByVal
e
As
System.Windows.Forms.DataGridViewCellMouseEventArgs)
Handles
dgvSaleItems.CellMouseClick, dgvSaleItems.CellMouseDoubleClick
121.
Try
122.
If
String
.IsNullOrEmpty(dgvSaleItems.Rows(e.RowIndex).Cells(0).Value)
Then
123.
dgvSaleItems.CurrentCell = dgvSaleItems(0, e.RowIndex)
124.
Return
125.
End
If
126.
Dim
col
As
Short
= dgvSaleItems.CurrentCell.ColumnIndex
127.
If
dgvSaleItems.Columns(col).Visible =
False
OrElse
dgvSaleItems.Columns(col).
ReadOnly
=
True
OrElse
dgvSaleItems.Columns(col).CellType.ToString =
"System.Windows.Forms.DataGridViewImageCell"
Then
128.
For
iSub
As
Short
= col
To
dgvSaleItems.ColumnCount - 1
129.
col = (col + 1)
Mod
dgvSaleItems.ColumnCount
130.
If
dgvSaleItems.Columns(col).Visible =
True
AndAlso
dgvSaleItems.Columns(col).
ReadOnly
=
False
AndAlso
_
131.
dgvSaleItems.Columns(col).CellType.ToString <>
"System.Windows.Forms.DataGridViewImageCell"
Then
132.
Exit
For
133.
End
If
134.
Next
135.
End
If
136.
dgvSaleItems.CurrentCell = dgvSaleItems.CurrentRow.Cells(col)
137.
Catch
ex
As
Exception
138.
139.
End
Try
140.
End
Sub
141.
142.
143.
Private
Sub
dgvSaleItems_KeyDown(sender
As
Object
, e
As
KeyEventArgs)
Handles
dgvSaleItems.KeyDown
144.
If
dgvSaleItems.CurrentCell.ColumnIndex = 0
AndAlso
e.KeyCode = Keys.Right
Then
145.
e.Handled =
True
146.
dgvSaleItems.CurrentCell = dgvSaleItems(2, dgvSaleItems.CurrentCell.RowIndex)
147.
End
If
148.
If
dgvSaleItems.CurrentCell.ColumnIndex = 2
AndAlso
e.KeyCode = Keys.Left
Then
149.
e.Handled =
True
150.
dgvSaleItems.CurrentCell = dgvSaleItems(0, dgvSaleItems.CurrentCell.RowIndex)
151.
End
If
152.
If
dgvSaleItems.CurrentCell.ColumnIndex > 1
AndAlso
(e.KeyCode = Keys.Down
OrElse
e.KeyCode = Keys.Enter)
Then
153.
e.Handled =
True
154.
If
dgvSaleItems.CurrentCell.RowIndex + 2 >= dgvSaleItems.Rows.Count
Then
155.
dgvSaleItems.CurrentCell = dgvSaleItems(0, dgvSaleItems.Rows.Count - 1)
156.
Else
157.
If
dgvSaleItems.CurrentCell.ColumnIndex = 5
Then
158.
dgvSaleItems.CurrentCell = dgvSaleItems.Rows(dgvSaleItems.CurrentCell.RowIndex).Cells(0)
159.
Else
160.
dgvSaleItems.CurrentCell = dgvSaleItems.Rows(dgvSaleItems.CurrentCell.RowIndex).Cells(dgvSaleItems.CurrentCell.ColumnIndex + 1)
161.
End
If
162.
End
If
163.
End
If
164.
End
Sub
165.
166.
167.
168.
Private
Sub
dgvSaleItems_RowPostPaint(
ByVal
sender
As
Object
,
ByVal
e
As
System.Windows.Forms.DataGridViewRowPostPaintEventArgs)
Handles
dgvSaleItems.RowPostPaint
169.
Try
170.
Dim
length
As
String
= dgvSaleItems.RowCount.ToString.Length
171.
Dim
row
As
String
= (e.RowIndex + 1).ToString.PadLeft(length,
" "
)
172.
Dim
size
As
SizeF = e.Graphics.MeasureString(
"ก"
,
Me
.Font)
173.
Using b
As
SolidBrush =
New
SolidBrush(dgvSaleItems.RowHeadersDefaultCellStyle.ForeColor)
174.
e.Graphics.DrawString(row, dgvSaleItems.DefaultCellStyle.Font, b, e.RowBounds.Location.X + ((dgvSaleItems.RowHeadersWidth - size.Width) / 2) + 1, e.RowBounds.Location.Y + ((e.RowBounds.Height - size.Height) / 2))
175.
End
Using
176.
Catch
177.
178.
End
Try
179.
End
Sub
180.
181.
Private
Sub
dgvSaleItems_RowHeaderMouseDoubleClick(sender
As
Object
, e
As
DataGridViewCellMouseEventArgs)
Handles
dgvSaleItems.RowHeaderMouseDoubleClick
182.
If
bsSales.Position <> -1
Then
183.
DirectCast
(bsSales.DataSource, DataTable).Rows(bsSales.Position).Delete()
184.
End
If
185.
End
Sub
186.
187.
Private
Sub
btnGetRowState_Click(sender
As
Object
, e
As
EventArgs)
Handles
btnGetRowState.Click
188.
Dim
dt =
DirectCast
(bsSales.DataSource, DataTable)
189.
If
dt IsNot
Nothing
Then
190.
Dim
rowStateDeleted = dt.GetChanges(DataRowState.Deleted)
191.
Dim
rowStateModifyed = dt.GetChanges(DataRowState.Modified)
192.
Dim
rowStateAdded = dt.GetChanges(DataRowState.Added)
193.
194.
195.
If
"ขนขึ้น"
<>
"หอยไม่ขึ้น"
Then
196.
197.
End
If
198.
End
If
199.
End
Sub
200.
End
Class