การคำนวนตัวเลขใน datagrid ผลรวมใน datagrid รบกวนพี่ๆๆ ด้วยครับ
ดึง datasource ของ datagridview มาใส่ dataview แล้วก็จัดการวนลูป
Date :
2010-12-27 09:28:59
By :
ตังค์แมน
ใช้ even cell click ของ datagridview นะคับ
คือวนลูป คำนวนค่าไปนะคับ อย่างเช่น
01 00001 20
02 00002 30
โค้ดตัวอย่างผมเอา textbox มารับค่านะครับ
Code (C#)
if (dataGridView1.RowCount > 0)
{
int sum_money = 0;
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
sum_money = sum_money + Convert.ToInt32(dataGridView1.Rows[i].Cells[2].Value.ToString());
textBox3.Text = sum_money.ToString();
}
}
ไม่รู้ว่าตรงความต้องการหรือเปล่าครับ
Date :
2010-12-27 10:00:26
By :
piag3026
แล้วถ้าต้องการคำนวนค่าใน datagrid เลยล่ะครับ
Date :
2017-08-08 15:30:51
By :
ben
เขียนยังไงครับ
Date :
2017-08-08 15:31:53
By :
ben
ในภาษา C# ครับ
เขียนยังไง
Date :
2017-08-11 09:42:11
By :
Gust
งงCodeของ VBครับ
Date :
2017-08-11 10:21:32
By :
Gust
ผมใช้ Visual Studio 2015
ช่วยผมด้วยครับ
Date :
2017-08-11 10:28:52
By :
Gust
ขอบคุณ TOR_CHEMISTRYครับ
Date :
2017-08-11 11:49:36
By :
Gust
ไม่ได้ครับ
ของผมมันจะมีข้อมูล
1.รหัสสินค้า
2.ชื่อสินค้า
3.ราคาขาย
4.จำนวน
5.จำนวนเงิน
แล้วผมอยากให้กรอกจำนวน ให้คำนวนจำนวนเงินเลยครับ
เช่นรหัสสินค้า คือ 1 ชื่อสินค้า คือ ไอติม ราคา คือ 10
แล้วผมอยากให้กรอกจำนวนเข้าไปแล้ว ให้มันคำนวนจำนวนเงินเลยครับเขียนยังไง
รบกวนอีกครั้งครับ
Date :
2017-08-11 21:51:51
By :
Gust
ใช้ Event CellEndEdit ครับ แล้ว หาผลลัพธ์ บวก ลบ คูณ หาร อะไรก็ว่าไป
ตัวอย่าง
Code (VB.NET)
Friend totalxS, totalyS, totalzS As Decimal
Private Sub sumDatagridview()
'บวก datagrid
For x = 0 To DGV1.RowCount - 1
If IsDBNull(Me.DGV1.CurrentRow.Cells(4).Value) _
OrElse Me.DGV1.CurrentRow.Cells(4).Value = Nothing _
OrElse Me.DGV1.CurrentRow.Cells(4).Value < 0 Then
Me.DGV1.CurrentRow.Cells(4).Value = 0.0
End If
Me.DGV1.Rows(x).Cells(6).Value = CDec(Me.DGV1.Rows(x).Cells(2).Value) * CDec(Me.DGV1.Rows(x).Cells(3).Value) _
- CDec(Me.DGV1.Rows(x).Cells(4).Value)
totalxS += CDec(DGV1.Rows(x).Cells(6).Value)
totalyS += CDec(DGV1.Rows(x).Cells(3).Value)
totalzS = Me.DGV1.Rows.Count
Next
Me.lblPWgetTotalPrice.Text = totalxS.ToString("N2")
Me.lblPWtotalXYZ.Text = "รายการ " & totalzS.ToString & " | ปริมาณ " & totalyS.ToString
totalxS = Nothing
totalyS = Nothing
totalzS = Nothing
End Sub
Code (VB.NET)
Private Sub DGV1_CellEndEdit(sender As Object, e As DataGridViewCellEventArgs) Handles DGV1.CellEndEdit
Call sumDatagridview()
End Sub
เวลาแก้ไขก็บังคับให้ยูสใส่ได้เฉพาะตัวเลข เพราะถ้าใส่ตัวอักษรจะคำนวนไม่ได้ โดยใช้ Event EditingControlShowing
Code (VB.NET)
Friend Sub KeyPress_decimal(ByVal sender As Object, ByVal e As KeyPressEventArgs)
If Char.IsControl(e.KeyChar) = False Then
If Char.IsDigit(e.KeyChar) Or e.KeyChar = "." Then
If sender.Text.Contains(".") Then
If sender.Text.Split(".")(1).Length < 2 Then
If Char.IsDigit(e.KeyChar) = False Then
e.Handled = True
End If
Else
e.Handled = True
End If
End If
Else
e.Handled = True
End If
End If
End Sub
Private Sub DGV1_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles DGV1.EditingControlShowing
If Me.DGV1.CurrentCell.ColumnIndex = 4 Then
AddHandler CType(e.Control, TextBox).KeyPress, AddressOf KeyPress_decimal
End If
If Me.DGV1.CurrentCell.ColumnIndex = 3 Then
AddHandler CType(e.Control, TextBox).KeyPress, AddressOf KeyPress_decimal
End If
End Sub
ประวัติการแก้ไข 2017-08-12 09:19:55
Date :
2017-08-12 09:09:53
By :
pakyaudio
งงมากครับ
Date :
2017-08-13 21:47:15
By :
Gust
คุณpakyaudio Cell(6)คืออะไรครับ
Date :
2017-08-14 12:15:54
By :
Gust
cell(6) คือ ตารางของดาต้ากริตที่ต้องการคำนวนครับ
Code (VB.NET)
'ผมประกาศตัวแปร 3 ตัว
Friend totalxS, totalyS, totalzS As Decimal
Private Sub sumDatagridview()
'บวก datagrid
For x = 0 To DGV1.RowCount - 1
'เงื่อนไขถ้าเซลล์ว่างไว้หรือมีค่าน้อยกว่า 0 ให้ใส่ 0 เข้าไป
If IsDBNull(Me.DGV1.CurrentRow.Cells(4).Value) _
OrElse Me.DGV1.CurrentRow.Cells(4).Value = Nothing _
OrElse Me.DGV1.CurrentRow.Cells(4).Value < 0 Then
Me.DGV1.CurrentRow.Cells(4).Value = 0.0
End If
'ตามรูป หมายเลขที่ 1
Me.DGV1.Rows(x).Cells(6).Value = CDec(Me.DGV1.Rows(x).Cells(2).Value) * CDec(Me.DGV1.Rows(x).Cells(3).Value) _
- CDec(Me.DGV1.Rows(x).Cells(4).Value)
'หาผลรวม
totalxS += CDec(DGV1.Rows(x).Cells(6).Value)
totalyS += CDec(DGV1.Rows(x).Cells(3).Value)
totalzS = Me.DGV1.Rows.Count
Next
'ตามรูปหมายเลข 2
Me.lblPWgetTotalPrice.Text = totalxS.ToString("N2")
Me.lblPWtotalXYZ.Text = "รายการ " & totalzS.ToString & " | ปริมาณ " & totalyS.ToString
totalxS = Nothing
totalyS = Nothing
totalzS = Nothing
End Sub
Date :
2017-08-14 14:46:44
By :
pakyaudio
คืออยากให้กรอกจำนวนไปแล้วคำนวนจำนวนเงินเลยอ่ะครับ
ส่วนของ Code C#
รบกวนผู้รู้ช่วยผมด้วยครับ มือใหม่ครับ
Date :
2017-08-15 13:18:09
By :
Gust
โทดทีครับรูปใหญ่ไป
คืออยากให้กรอกจำนวนไปแล้วคำนวนจำนวนเงินเลยอ่ะครับ
รบกวนผู้รู้ช่วยผมด้วยครับ มือใหม่ครับ
Date :
2017-08-15 13:29:35
By :
Gust
มันก็เหมือนกันไมใช่หรอครับ
และก็ยังไม่คำนวนจำนวนเงิน คอลัมน์สุดท้ายใน Datagrid ให้ด้วยครับ
รบกวนอีกครั้งครับ
Date :
2017-08-15 20:16:51
By :
Gust
CellValueChanged จะทำงานทุกครั้งที่ User กดแป้นพิมซึ่งจะเกิด Error ง่ายในแง่ของการพิมตัวเลข
ส่วน CellEndEdit จะทำงานก็ต่อเมื่อ User พิมเสร็จแล้วก็วางเม้าไว้ที่อื่น ครับ
หมายความว่า User ใส่ตัวเลข ราคาขายในช่องที่ 2 กับ จำนวน ในช่องที่ 3 แล้วช่องที่ 4 ก็จะคำนวณให้เรา
ทีนี้ก็ต้องดูที่โค้ดครับว่าเขียนถูกตามที่ควรจะเป็นรึไม่
Date :
2017-08-15 23:24:19
By :
lamaka.tor
จากรูปตัวอย่างนะครับคืออยากให้คำนวนราคาขาย * จำนวน
โดยกรอกเฉพาะจำนวนแล้วคำนวนเลยครับ
แล้วถึงจะได้จำนวนเงินลงใน datagrid
ปล.จำนวนเงินผมใช้กรอกเอาก่อนนะครับ
Date :
2017-08-16 09:48:11
By :
Gust
รบกวนอีกครั้งครับ
Date :
2017-08-16 09:50:06
By :
Gust
เขียนแค่ให้คำนวนจาก textboxtotal
คราวนี้อยากให้มันคำนวนจาก datagrid ครับ
ต้องทำยังไง
Date :
2017-08-16 11:28:22
By :
Gust
ใช่ครับ ช่องที่ 4 คือจำนวน ผมอยากให้กรอกไปแล้ว คำนวนในช่องที่ 5 เลยอ่ะครับ
Date :
2017-08-16 21:53:55
By :
Gust
รบกวนด้วยครับ
Date :
2017-08-17 12:48:58
By :
Gust
ได้แล้วครับ
Date :
2017-08-19 08:45:41
By :
Gust
มีปัญหาอีกแล้วครับคือ
ถ้าไม่อยากทำให้คอลัมน์ใน Datagridไม่ให้สามารถทำงานได้ต้องทำยังไงหรอครับ
ปล.ยังไม่ได้เขียนโค้ด
Date :
2017-08-19 09:01:13
By :
Gust
ขอตัวอย่างโค้ดหน่อยครับ
Date :
2017-08-19 12:26:47
By :
Gust
รบกวนอีกพี่ๆครับ
string PROID = dataGridViewproduct.CurrentRow.Cells[0].Value.ToString();
string PRONAME = dataGridViewproduct.CurrentRow.Cells[1].Value.ToString();
string PROPRICE = dataGridViewproduct.CurrentRow.Cells[4].Value.ToString();
this.dataGridViewSale.Rows.Add(PROID, PRONAME, PROPRICE, "", "");
ต้องการเช็คค่าใน DataGridView ว่ามีค่าซ้ำกันหรือไม่ครับ
Date :
2017-08-20 14:38:05
By :
dew
ตอบความคิดเห็นที่ : 35 เขียนโดย : dew เมื่อวันที่ 2017-08-20 14:38:05
รายละเอียดของการตอบ ::
หลักการบ้านๆเลยนะ
1. กรณีที่มีข้อมูลอยู่แล้วให้เพิ่มจำนวน เช่นจาก 4 เป็น 5 จากนั้นก็
2. กรณีที่ไม่มีข้อมูลอยู่แล้วให้เพิ่ม row ใหม่
เมื่อเช็ค 1 หรือ 2 แล้ว ก็ให้คิดราคา รวม
Code (C#)
string PROID = dataGridViewproduct.CurrentRow.Cells[0].Value.ToString();
string PRONAME = dataGridViewproduct.CurrentRow.Cells[1].Value.ToString();
string PROPRICE = dataGridViewproduct.CurrentRow.Cells[4].Value.ToString();
bool b = false; // ไว้เช็คว่ามีรึไม่มี
// for loop เพื่อเช็คว่ามีรึไม่
for (int i = 0; i < dataGridView1.RowCount; i++)
{
//เช็คว่า PROID ตรงกันไม๊
if(dataGridView1[0,i].Value.ToString() == PROID)
{
b = true;//ถ้าตรงกันก็เพิ่มจำนวนซะเลย
dataGridView1[3, i].Value = (int)dataGridView1[3, i].Value + 1;// เพิ่มมันซะเลย +1 ก็เพิ่มที่ละ 1 นั่นแหละ
dataGridView1[4, i].Value = (int)dataGridView1[2, i].Value * (int)dataGridView1[3, i].Value;//มันก็ต้องมาคิดยอดรวมใหม่อ่ะนะ PROPRICE*count
return;// ถ้าตรงกัน คำนวณ ทุกอย่างเรียบร้อย ให้เด้งออกไปเลย (จะอยู่ต้อทำไมละ 5555)
}
}
//เมื่อหลุด for มาได้(b = false) แสดงว่าไม่มี ข้อมูลใน dataGridView ให้เพิ่ม row ใหม่
this.dataGridViewSale.Rows.Add(PROID, PRONAME, PROPRICE, 1, PROPRICE); // 1*PROPRICE = PROPRICE เผื่อมีคนสงสัยใคร่ถาม ที่นี้ User เขาจะเปลี่ยน จาก 1 เป็น 2 3 4 ก็แล้วแต่เขา เราทำ ค่า defualt เป็น 1 ไว้เฉยๆ
Date :
2017-08-20 20:07:47
By :
lamaka.tor
ลองดูแล้วครับ
ยังตรวจสอบไม่ได้ว่าซ้ำกันหรือไม่ครับ
รบกวนอีกครั้งครับ
Date :
2017-08-21 10:21:50
By :
Gust
private void dataGridViewproduct_MouseDoubleClick(object sender, MouseEventArgs e)
{
int i = 0;
string PROID = dataGridViewproduct.CurrentRow.Cells[0].Value.ToString();
string PRONAME = dataGridViewproduct.CurrentRow.Cells[1].Value.ToString();
string PROPRICE = dataGridViewproduct.CurrentRow.Cells[4].Value.ToString();
this.dataGridViewSale.Rows.Add(PROID, PRONAME, PROPRICE, "", "");
if (dataGridViewSale[0,i].Value.ToString() == PROID)
{
dataGridViewSale[0, i].Value = PROID;
}
else
{
MessageBox.Show("ข้อมูบซ้ำกัน กรุณาเลือกข้อมูลใหม่", "..",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
this.dataGridViewSale.Columns[0].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
this.dataGridViewSale.Columns[2].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
this.dataGridViewSale.Columns[3].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
this.dataGridViewSale.Columns[4].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
if (dataGridViewSale.Rows.Count > 0)
{
int sum = 0;
for ( i = 0; i < dataGridViewSale.Rows.Count; i++)
{
if (dataGridViewSale.Rows[i].Cells[4].Value != null && dataGridViewSale.Rows[i].Cells[4].Value.ToString() != "")
{
sum = sum + Convert.ToInt32(dataGridViewSale.Rows[i].Cells[4].Value.ToString());
}
}
textBoxtotal.Text = sum.ToString();
}
}
Date :
2017-08-21 11:11:31
By :
benz
ใช้โค้ดตัวไหนดีอ่ะครับ
Date :
2017-08-21 13:26:49
By :
gust
โค้ดที่ทำให้datagrid เวลาซ้ำกันแล้วให้ขึ้นแจ้งเตือน
Date :
2017-08-21 13:32:13
By :
gust
คือจะใส่ อีเว้นไหนให้แจ้งเตือน
แก้ตามแล้วครับ
int i = 0;
string PROID = dataGridViewproduct.CurrentRow.Cells[0].Value.ToString();
string PRONAME = dataGridViewproduct.CurrentRow.Cells[1].Value.ToString();
string PROPRICE = dataGridViewproduct.CurrentRow.Cells[4].Value.ToString();
bool b = false;
for (i = 0; i < dataGridViewSale.RowCount; i++)
{
if (dataGridViewSale[0, i].Value.ToString() == PROID)
{
b = true;
dataGridViewSale[3, i].Value = (int)dataGridViewSale[3, i].Value + 1;
dataGridViewSale[4, i].Value = (int)dataGridViewSale[2, i].Value * (int)dataGridViewSale[3, i].Value;
return;
}
}
this.dataGridViewSale.Rows.Add(PROID, PRONAME, PROPRICE, "", "");
}
Date :
2017-08-21 14:01:33
By :
gust
อันที่จริงผมไม่ชอบ MouseDoubleClick ขอใช้เป็น CellClick หรือ CellDoubleClick หรือ RowHeaderMouseClick ก็จะเข้าท่ากว่า
เช่น
Code (C#)
private void dataGridViewproduct_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
if(e.RowIndex <0) return;//เช็คก่อนว่า dataGridViewproduct คลิกที่ RowIndex <0 รึป่าว หมายถึงต่ำกว่าแถวแรกอ่านะ
int sum = 0;
string PROID = dataGridViewproduct[0,e.RowIndex].Value.ToString();
string PRONAME = dataGridViewproduct[1,e.RowIndex].Value.ToString();
string PROPRICE = dataGridViewproduct[4,e.RowIndex].Value.ToString();
bool b = false; // ไว้เช็คว่ามีรึไม่มี
// for loop เพื่อเช็คว่ามีรึไม่
for (int i = 0; i < dataGridViewSale.RowCount; i++)
{
//เช็คว่า PROID ตรงกันไม๊
if(dataGridViewSale[0,i].Value.ToString() == PROID)
{
b = true;//ถ้าตรงกันก็เพิ่มจำนวนซะเลย
dataGridViewSale[3, i].Value = (int)dataGridViewSale[3, i].Value + 1;// เพิ่มมันซะเลย +1 ก็เพิ่มที่ละ 1 นั่นแหละ
dataGridViewSale[4, i].Value = (int)dataGridViewSale[2, i].Value * (int)dataGridViewSale[3, i].Value;//มันก็ต้องมาคิดยอดรวมใหม่อ่ะนะ PROPRICE*count
sum += (int)dataGridViewSale[4, i].Value; // ก็คิด sum ไปด้วยเลยจะได้ไม่ต้องเสียเวลา
}
}
//เมื่อหลุด for มาได้(b = false) แสดงว่าไม่มี ข้อมูลใน dataGridView ให้เพิ่ม row ใหม่
if(b = false)
{
this.dataGridViewSale.Rows.Add(PROID ,PRONAME , PROPRICE, 1, PROPRICE); // 1*PROPRICE = PROPRICE เผื่อมีคนสงสัยใคร่ถาม ที่นี้ User เขาจะเปลี่ยน จาก 1 เป็น 2 3 4 ก็แล้วแต่เขา เราทำ ค่า defualt เป็น 1 ไว้เฉยๆ
sum += (int)dataGridViewSale[4, i].Value; // ก็คิด sum จาก PROPRICE ถ้าหากยังงงอยู่อีก 1*PROPRICE = PROPRICE เหมือนเดิม
}
textBoxtotal.Text = sum.ToString();
}
โค้ดสั้นกระทับรัด ครบทุกความต้องการ
Date :
2017-08-21 16:55:30
By :
lamaka.tor
ปุ่มยกเลิกข้อมูลทำยังไงครับ
อันนี้ไม่เข้าใจจริงๆ
ขอโค้ดตัวอย่างหน่อยก็ดีครับ
รบกวนด้วยครับ
Date :
2017-09-12 15:17:18
By :
Gust
สรุป คือ: ไม่ได้อะไรเลย
Date :
2019-05-16 08:40:02
By :
Kenzero
Load balance : Server 04