การวางตำแหน่งและการระบายสีของแถวใน DBGrid ใน DELPHI
เมื่อใช้งานระบบฐานข้อมูล ฉันพบว่าแถวข้อมูลในตัวควบคุม DBGrid ไม่สามารถวางตำแหน่งได้ และหลังจากระบุตำแหน่งแถวใดแถวหนึ่งแล้ว แถวปัจจุบันก็ไม่สามารถทำเครื่องหมายได้อย่างชัดเจน (เช่น การเปลี่ยนสี) หลังจากค้นหาจำนวนมาก ข้อมูล ฉันพบว่า โดยพื้นฐานแล้วไม่มีการแนะนำเนื้อหานี้ รวมถึงสีแถวบนสุดแบบไดนามิกด้วย บทความต่างๆ เช่น Se พูดคุยเกี่ยวกับการดำเนินการที่ดำเนินการระหว่างการเริ่มต้นข้อมูล แต่ไม่มีฟังก์ชันการเปลี่ยนตำแหน่งหลังจากรีเฟรชแหล่งข้อมูล ดังนั้นฉันจึงตัดสินใจที่จะแก้ไขปัญหานี้ หลังจากช่วงเช้าของการค้นคว้าเกี่ยวกับ DELPHI และตรวจสอบข้อมูลที่เกี่ยวข้อง ฉันพบปัญหาเล็กน้อย เสี่ยวเฉิง ตอนนี้เขียนมันลงไปและเรียนรู้จากมันร่วมกับเพื่อนร่วมงานของฉันทุกคน โปรดให้คำแนะนำฉันเกี่ยวกับสิ่งที่ไม่เหมาะสมด้วย
ขั้นแรก ฉันค้นหาตัวควบคุม Ttable และ Tquery และไม่พบวิธีใดที่สามารถค้นหาแถวข้อมูลได้โดยตรง ฉันยังค้นหา DBGrid และไม่พบฟังก์ชันที่เกี่ยวข้องซึ่งสามารถค้นหาแถวข้อมูลบางแถวได้โดยตรง จากนั้นฉันก็ค้นหาจากคลาสของ ชุดข้อมูล หลังจากพยายามอย่างต่อเนื่อง ในที่สุดฉันก็พบวิธีการใน TdataSet: GoToBookmark วิธีการนี้สามารถทำให้ตัวชี้บันทึกใน DBGrid ปัจจุบันชี้ไปที่แถวที่คุณต้องการระบุ
หลังจากค้นหาวิธีนี้แล้ว ปัญหาจะได้รับการแก้ไขเพียงครึ่งเดียว สีของแถวข้อมูลที่ชี้ไปโดยตัวชี้ปัจจุบันจะต้องเปลี่ยนด้วย กล่าวคือ แถวที่เลือกในปัจจุบันจะต้องถูกทำเครื่องหมายอย่างชัดเจน (ยกเว้นแถวขนาดเล็ก และอันที่น่าอึดอัดใจบน DBGrid) (ยกเว้นบุ๊กมาร์กที่ชัดเจน) สิ่งนี้ถูกนำไปใช้อย่างชัดเจนในการควบคุม DBGrid มีเหตุการณ์ OnDrawDataCell ในการควบคุม DBGrid การโอเวอร์โหลดวิธีนี้สามารถเปลี่ยนสีของแถวข้อมูลที่ระบุได้
ขั้นตอนการใช้งานเฉพาะมีดังนี้:
(1) วางตำแหน่งแถวข้อมูลแบบไดนามิก
//================================================ ===============
//ชื่อกระบวนการ: DyDbgDataLine
//ผู้เขียน: ชาวเฮติ
//วันที่: 22-02-2546
//ฟังก์ชัน: ย้ายไปยังแถวข้อมูลในการควบคุม DBGrid โดยอัตโนมัติซึ่งตรงตามเงื่อนไขนี้ตามเงื่อนไขที่ผู้ใช้ระบุ
//พารามิเตอร์อินพุต:
// sValue: ค่าของแถวที่ต้องการย้าย;
// แท็บ: ข้อมูลของตารางที่เกี่ยวข้องใน DBGrid ปัจจุบัน
// dsr: แหล่งข้อมูลที่ต้องดำเนินการในปัจจุบัน
//ค่าส่งคืน: ไม่มี
//แก้ไขบันทึก:
//================================================ ================
PROcedure DyDbgDataLine (sValue: สตริง; แท็บ: Ttable; dsr: TDatasource)
var
บุ๊คมาร์ค:TBookMark;
เริ่ม
//บันทึกบรรทัดที่ทำเครื่องหมายไว้ในปัจจุบัน;
บุ๊คมาร์ค:=self.tab.GetBookmark;
self.tab.first;
ในขณะที่ไม่ใช่ self.tab.Eof ทำ
เริ่ม
ถ้า self.tab.FieldByName('cpbh').AsString= sValue แล้ว
เริ่ม
บุ๊คมาร์ค:=self.tab.GetBookmark;
หยุดพัก;
จบ;
self.tab.ถัดไป;
จบ;
self.dsr.DataSet.GotoBookmark (ตัวชี้ (บุ๊กมาร์ก));
จบ;
คำอธิบาย: ตารางที่ใช้ถูกผูกไว้กับ DBGrid บนอินเทอร์เฟซการแสดงผลปัจจุบัน
(2) เปลี่ยนสีเพื่อทำเครื่องหมายแถวข้อมูลปัจจุบัน
ขั้นแรก ตั้งค่าคุณสมบัติ Default Drawing ของ DBGrid เป็น false จากนั้นเรียกใช้ฟังก์ชันต่อไปนี้ในฟังก์ชันเหตุการณ์ OnDrawDataCell:
//================================================ ===============
//ชื่อกระบวนการ: DrawLine
//ผู้เขียน: ชาวเฮติ
//วันที่: 22-02-2546
//ฟังก์ชั่น: เปลี่ยนสีของแถวที่ระบุใน Dbgrid เป็นเครื่องหมาย;
//พารามิเตอร์อินพุต:
// zdm: ชื่อฟิลด์;
// Rect: หน่วยของแถวที่ต้องเข้าและออก
// สนาม: ฟิลด์ที่แสดงอยู่ในปัจจุบัน;
// state: สถานะการแสดงผลของแถวปัจจุบัน;
// zdz: ค่าของแถวที่ต้องการย้าย;
// แท็บ: ข้อมูลของตารางที่เกี่ยวข้องใน DBGrid ปัจจุบัน
// dbg: DBGrid ที่ต้องดำเนินการในปัจจุบัน;
//ค่าส่งคืน: ไม่มี
//แก้ไขบันทึก:
//================================================ ================
procedurDrawLine(tab:Ttable;const Rect:Trect;ฟิลด์:Tfield;state:TgridDrawState;dbg:TDBGrid)
เริ่ม
ถ้า (tab.fieldbyname(zdm).asstring=zdz)แล้ว
เริ่ม
dbg.canvas.font.color:=clred;
dbg.canvas.brush.color:=clyellow;
จบ;
dbg.DefaultDrawDataCell(Rect,ฟิลด์,สถานะ);
จบ;