รายละเอียดของการตอบ ::
ของผมอาจจะบ้านๆซักหน่อยนะครับ(เน้น user ใช้ง่าย)
1. สร้างตัวเช็คยอดคงเหลือมา อาจจะประกาศ เป็นตัวแปร หรือ ใช้ textbox รับค่ามาจาก SQL ก็ย่อมได้
2. หาวิธีเปรียบเทียบให้ได้ อาจจะเช็คตอนที่ กรอกข้อมูลเลย ทำยังไงก็ได้ให้โปรแกรมมันรู้ว่า ต้องเอาตัวไหนมารวมกันมั่ง
อาจจะเอาตัวล่างสุดมาเลย หรืออื่นๆ
ของผมนั้น บ้านๆ มาก เพราะ datagrid หรือ Control ต่างๆ ผูกกับ BindingSource
จากรูปถ้าเราเปลี่ยนค่าใน combobox รายชื่อสาร
จะได้ว่า
Code (C#)
private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(rlIDTextBox.Text)) return;
tblReagent_oBindingSource.Filter = " rrID = '" + rlIDTextBox.Text + "'";
tblReagent_BLBindingSource.Filter = " rlID = '" + rlIDTextBox.Text + "'";
this.tblReagent_oDataGridView.SetDefaultCellStyle();
}
แค่นี้ก็ได้ ยอดคงเหลือมาแล้วครับ(ไม่ซับซ้อน บ้านๆ จริงๆ)
เมื่อ User ทำการใส่ตัวเลขลงใน DataGridView เพื่อเบิกสาร
Code (C#)
private void tblReagent_rDataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
//รับ ID มาใส่เลย
tblReagent_oDataGridView[1, e.RowIndex].Value = rlIDTextBox.Text;
// ลงชื่ออัตโนมัติ จะได้ไม่เสียเวลา
tblReagent_oDataGridView[3, e.RowIndex].Value = _class.clsUserLogin.EmployeeName;
// ลงเวลาอัตโนมัติ จะได้ไม่เสียเวลา
tblReagent_oDataGridView[4, e.RowIndex].Value = DateTime.Now;
// เช็คยอดว่าตรงไม๊
if (CheckBL())
{
MessageBox.Show("จำนวนคงเหลือ ไม่พอในการเบิกจ่าย","แจ้งเตือน");
tblReagent_oDataGridView[2, e.RowIndex].Value = bLTextBox.Text;
}
}
จากนั้นผมก็สั่งเช็คยอดครับ
Code (C#)
bool CheckBL()
{
int n = 0;
for (int i = 0; i < tblReagent_oDataGridView.RowCount - 1; i++)
{
if ((int)tblReagent_oDataGridView[0,i].Value <0)
n += (int)tblReagent_oDataGridView[2, i].Value;
}
return (n > bLTextBox.Text.ToInt());
}
มีหลายวิธีที่จะทำ ขึ้นอยู่กับว่าเราเริ่มต้นยังไง ผมเริ่มด้วย datagrid ผูกกับ BindingSource
เพราะงั้น เวลา เราเพิ่ม ข้อมูลลงไปใหม่ ก็ จะมีค่า
ติดลบ ตรง คอลัมน์แรก(หวานกันเลยทีเดียว)
ก็เอาตัวนั้นมาใช้เป็นประโยชน์
บ้านๆก็มีแค่นี้ละครับ แค่มองหลักการให้ออก แล้วก็ เขียนโค้ดให้ตรงกับหลักที่เราตั้งไว้ก็พอ
ยังไงผลลัพธ์ก็ย่อมตรงกัน และ User ก็ไม่สนใจด้วยว่าเราจะเขียนยังไง เขาสนแค่ผลลัพธ์