|
C# DataGridView กับ Event และ Method แบบ บ้านๆ |
เนื้อหาวันนี้จะเขียนเรื่องการใช้ Event และ Method ของ DataGridView ที่ผมใช้งานเป็นประจำครับ
เนื้อหาอาจจะไม่มีความรู้วิชาการเลยนะครับ เพราะผมก็ทำไปเรื่อยๆ มันใช้ได้ผมก็พอใจตรงนั้น แล้วเอาไปใช้กับตัวอื่นต่อๆกันไป
มาเริ่มกันเลยนะครับ
1.Event CellEnter/CellClick/CellDoubleClick/CellMouseClick/CellMouseDoubleClick/CellContentClick/CellContentDoubleClick/RowHeaderMouseClick
Event ต่างๆเหล่านี้เกิดขึ้นมาเราคลิกไปที่ DataGridView ตรงส่วนที่ว่ามาครับ
Event เหล่านี้ เราสามารถที่จะเอามากำหนด ID ของ PK ได้ง่ายๆ
เช่น ผมมีตาราง ที่อยู่สาขาอยู่ แล้วผมก็มี ตาราง เบอร์โทร อีเมล์ ชื่อติดต่ออะไรสาระพัด ที่มัน พ่วงกันอยู่ แบบนี้
ผมก็คิดแบบบ้านๆ ง่ายๆ คือ ผมอยากคลิกที่ตางราง AddressDataGridView แล้วให้ตัวแปร เก็บค่า ID ที่คลิกไว้
พอเราไปแก้ข้อมูลในตาราง เบอร์โทร อีเมล์ ชื่อติดต่อ มันก็จะเอา ID ตัวนั้นแหละไปใช้ ไม่ต้องมาค้น ID ใหม่
โค้ดจะได้ประมานี้ ครับ
Code (C#)
private void company_AddressDataGridView_CellEnter(object sender, DataGridViewCellEventArgs e)
{
DataGridView dgv = sender as DataGridView;
if(!string.IsNullOrEmpty(dgv[0, e.RowIndex].Value.ToString()))
LocID = dgv[0, e.RowIndex].Value;
}
ตัว Event จะใช้เป็น CellEnter/CellClick/CellDoubleClick/CellMouseClick/CellMouseDoubleClick/CellContentClick/CellContentDoubleClick/RowHeaderMouseClick ได้หมดขึ้นกับความสะดวกครับ
แต่อย่าลืมเช็คก่อนว่ามันมีค่าไม๊โดยใช้ !string.IsNullOrEmpty เพื่อตรวจสอบ ครับ
นอกจากนี้ หากเราทำเป็น Dialog เราก็สามารถใช้งานได้ แบบนี้คือ
ผมทำ frmOrganize_Setting_Section เป็น Dialog ไว้
จากนั้นผมก็เขียนอีกตัวมาเป็น หน้าเนื้อหา หรือ list ทั้งหมด พอเรากดเลือกที่ DataGridView ก็ให้มัน shoedialog ขึ้นมา วิธีนี้ ต้องมี ฟอร์ม 2 ตัวด้วยกัน คือ ฟอร์มหลักไว้ดูข้อมูลทั้งหมด กับ ฟอร์มที่ไว้ดู รายละเอียดที่จะเป็น dialog ขึ้นมานั่งเอง
จากตัวอย่าง ผมปิดการแก้ไขใน DataGridView ไว้
Code (C#)
private void company_SectionDataGridView_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
{
// เช็คแถวดูก่อนจาก e.RowIndex >= 0
if (e.RowIndex >= 0)
{
new frmOrganize_Setting_Section() { ID = (sender as DataGridView)[0, e.RowIndex].Value.ToString() }.ShowDialog();
//เมื่อ Dialog ทำงานเสร็จแล้วก็ สั่ง Fill เพื่อ อัพเดท DataGridView
this.company_SectionTableAdapter.Fill(this.dATALAB_Company.Company_Section);
}
}
จากรูปคือผมใช้ Event CellMouseDoubleClick ดังนั้น เมื่อเรา ดัลเบิ้ลคลิกไปที่ Cell มมันก็จะ ShowDialog ขึ้นมา แล้วส่งค่า ID ไปให้ frmOrganize_Setting_Section
โดยที่ frmOrganize_Setting_Section ก็ต้องประกาศค่า ID แบบ public นะครับ ไม่งั้น มันส่งไปไม่ได้
ขอพูดในส่วนของ datatset แป๊บนะครับ
ตรง datatset นั้น ผมจะเพิ่ม parameter เพื่อค้นหาด้วย ID ลงไป ครับ
ถ้าสนใจก็สามารถเข้าไปอ่านได้ที่
C# - DataGridView การเพิ่ม Parameter การค้นหาใน Wizard แบบ บ้านๆ
https://www.thaicreate.com/community/csharp-add-query-parameter-in-wizard-ban-ban/view.html
ในฟอร์ม frmOrganize_Setting_Section ผมจะมีการเปิด Dialog 2 กรณี คือ ตอน Add data และ ตอนแก้ไข
ดังนั้ง โค้ด สำหรับ Fill เลยมี 2 แบบ คือ
Code (C#)
if (!string.IsNullOrEmpty(ID))
{
this.company_SectionTableAdapter.FillByID(this.dATALAB_Company.Company_Section, ID);
}
else
{
this.company_SectionTableAdapter.Fill(this.dATALAB_Company.Company_Section);
this.BS.AddNew();
}
เมื่อ frmOrganize_Setting_Section รับ ID ไปแล้ว
ให้ตรวจสอบดูก่อนว่า ID มันมีค่าไม๊ ถ้ามีค่า ก็ให้ใช้ FillByID แต่ถ้าไม่มีค่า ให้ใช้ Fill แล้วก็เพิ่ม BS.AddNew เพื่อ Add data
แค่นี้เราก็ได้ ฟอร์มง่ายๆ มาใช้ผ่าน DataGridView แล้วครับ
2.Event CellEndEdit Event นี้จะเกิดขึ้นตอนเราแก้ไขข้อมูลเสร็จ นั่นก้หมายความว่า เราอยากให้ทำอะไร ตอนแก้ข้อมูลเสร็จนั่นเอง
ส่วนตัวมีไว้เพิ่ม ID/ข้องมูล วันที่ ชื่อ คน/คำนวนผล ต่างๆ
ยกตัวอย่าง company_PhoneDataGridView ที่ใช้ดูข้อมูล เบอร์โทรนะครับ มัน อ้าง Location_ID ซึ่งเป็นรหัสสาขาอยู่
จากข้างต้นผมได้บอกไปแล้วว่า ถ้าเรา ใช้ CellEnter ให้มันเก็บ ID ให้ เราจะเอามาใช้ตอนนี้แหละครับ
และผมยังจะให้มัน Add ชื่อ และ วันเวลาที่แก้ไข ให้เป็นปัจจุบันอีกด้วย
โค้ดประมาณนี้ครับ
Code (C#)
private void company_PhoneDataGridView_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
//1. เช็คก่อนว่า Location_ID มันมีค่าไม๊
if (string.IsNullOrEmpty(company_PhoneDataGridView[1, e.RowIndex].Value.ToString()) && LocID != null)
{
//2. ไม่มีค่า ก้เพิ่ม เข้าไป
company_PhoneDataGridView[1, e.RowIndex].Value = LocID;
}
//3.เพิ่ม ชื่อ และ วันเวลาที่แก้ไข ให้เป็นปัจจุบัน
company_PhoneDataGridView[4, e.RowIndex].Value = _Class.UserLogin.EmployeeName;
company_PhoneDataGridView[5, e.RowIndex].Value = DateTime.Now;
}
นี่เป็นอีกตัวอย่างคือ เวลากรอกค่า Abs. เสร็จ มันจะคำนวณค่า sensetivity ของเครื่อง AAS ให้ เพิ่ม ID วันเวลาคนลงข้อมูลให้เรียบร้อย
ไหนๆก็ไหนๆ มันมีหลายๆตารางที่ใช้ร่วมกันเราก็เขียนโค้ดแบบนี้ครับ
แล้วไปเพิ่ม Event แบบนี้
แค่นี้เราก็เสร็จให้ได้กับ company_PhoneDataGridView company_PhoneInDataGridView company_FaxDataGridView และ company_EmailDataGridView เลยทีเดียว
วันนี้ก็ฝอยมายาวแล้ว ขอตัวไปทำแล็บก่อนนะครับ
เนื่องจากใช้ความรู้แบบบ้าน ๆ จึงได้โค้ด และ หลักการแบบบ้านๆ มาเขียนบทความแบบบ้านๆ ให้อ่านกันครับ
ผมหวังว่าหลายๆคนจะมองการเขียนโปรแกรม เป็นเรื่องง่ายขึ้นนะครับ
|
|
|
|
|
|
|
|
By : |
TOR_CHEMISTRY
|
|
Article : |
บทความเป็นการเขียนโดยสมาชิก หากมีปัญหาเรื่องลิขสิทธิ์ กรุณาแจ้งให้ทาง webmaster ทราบด้วยครับ |
|
Score Rating : |
|
|
Create Date : |
2019-07-01 |
|
Download : |
No files |
|
Sponsored Links |
|
|
|
|
|
|