רוצה להפוך את רשת עריכת הנתונים הטובה ביותר אי פעם? להלן הוראות לבניית ממשק משתמש לעריכת שדות בדיקה בתוך DBGrid. באופן ספציפי, נבדוק כיצד למקם DBLookupComboBox לתא של DBGrid.
מה שזה יעשה זה לקרוא למידע ממקור נתונים שישמש לאכלוס תיבה נפתחת.
כדי להציג DBLookupComboBox בתוך תא של DBGrid, תחילה עליך להפוך אחד לזמין בזמן ריצה ...
צור בדיקת מידע באמצעות DBLookupComboBox
בחר בדף "פקדי נתונים" בלוח הרכיבים ובחר DBLookupComboBox. זרוק אחד בכל מקום בטופס והשאיר את שם ברירת המחדל של "DBLookupComboBox1." לא משנה איפה תשימו אותו כי רוב הזמן, הוא יהיה בלתי נראה או יצוף מעל הרשת.
הוסף עוד רכיב DataSource ו- DataSet כדי "למלא" את תיבת המשולבת בערכים. זרוק TDataSource (עם השם DataSource2) ו- TAdoQuery (תן שם AdoQuery1) בכל מקום בטופס.
כדי ש- DBLookupComboBox יעבוד כראוי, יש להגדיר מספר מאפיינים נוספים; הם המפתח לחיבור האיתור:
- מקור מידע ו DataField לקבוע את הקשר הראשי. ה- DataField הוא תחום לתוכו אנו מכניסים את ערכי החיפוש.
- ListSource הוא מקור מערך הנתונים של החיפוש.
- קיפילד מזהה את השדה באזור ListSource זה חייב להתאים לערך של DataField שדה.
-
ListFields הוא השדות (ים) של מערך הנתונים לחיפוש המוצגים בפועל בשילוב. ListField יכול להציג יותר משדה אחד, אך יש להפריד את הכפולים באמצעות נקודה-פסיק.
עליך להגדיר ערך מספיק גדול עבור DropDownWidth (של ComboBox) כדי לראות באמת עמודות נתונים מרובות.
כך תגדיר את כל המאפיינים החשובים מקוד (בטופס של הטופס אירוע OnCreate מטפל):
תהליך TForm1.FormCreate (שולח: TObject);
התחל עם DBLookupComboBox1 dobegin
DataSource: = DataSource1; // -> AdoTable1 -> DBGrid1
ListSource: = DataSource2;
DataField: = 'מחבר דואר אלקטרוני'; // מתוך AdoTable1 - מוצג ב- DBGrid
KeyField: = 'דוא"ל';
ListFields: = 'שם; אימייל';
גלוי: = שקר;
סוף;
DataSource2.DataSet: = AdoQuery1;
AdoQuery1.Connection: = AdoConnection1;
AdoQuery1.SQL.Text: = 'בחר שם, שלח דוא"ל מאת מחברים';
AdoQuery1.Open;
סוף;
הערה: כאשר ברצונך להציג יותר משדה אחד ב- DBLookupComboBox, כמו בדוגמה לעיל, עליך לוודא שכל העמודות גלויות. זה נעשה על ידי הגדרת המאפיין DropDownWidth.
עם זאת, תראה כי בהתחלה, עליך להגדיר את זה לערך גדול מאוד מה שמביא לכך שהרשימה שנשמטה תהיה רחבה מדי (ברוב המקרים). דרך אחת לעקיפת הבעיה היא להגדיר את רוחב התצוגה של שדה מסוים המוצג ב רשימה נפתחת.
קוד זה, המוצב בתוך האירוע OnCreate עבור הטופס, מבטיח כי גם שם המחבר וגם הדוא"ל שלו יוצגו ברשימה הנפתחת:
AdoQuery1.FieldByName ('דוא"ל'). רוחב תצוגה: = 10;
AdoQuery1.FieldByName ('שם'). רוחב תצוגה: = 10;
AdoQuery1.DropDownWidth: = 150;
מה שנותר לנו לעשות הוא בעצם לגרום לתיבת משולבת לרחף מעל תא (כאשר במצב עריכה), הצגת השדה AuthorEmail. ראשית, עלינו לוודא ש- DBLookupComboBox1 מועבר בגודל מעל התא בו מוצג שדה AuthorEmail.
תהליך TForm1.DBGrid1DrawColumnCell
(שולח: נושא;
const Rect: TRect;
DataCol: מספר שלם;
עמודה: TColumn;
מדינה: TGridDrawState);
התחלה (gd ממוקד בתוך מדינה) אז בגיניף (טור. שדה. FieldName = DBLookupComboBox1.DataField) אז DBLookupComboBox1 לעשות
התחל
שמאל: = תיקון. שמאל + DBGrid1.Left + 2;
למעלה: = תיקון. למעלה + DBGrid1.Top + 2;
רוחב: = תיקון. מימין - נכון. שמאלה;
רוחב: = תיקון. מימין - נכון. שמאלה;
גובה: = נכון. התחתון - נכון. חלק עליון;
גלוי: = נכון;
סוף;
סוף
סוף;
בשלב הבא, כשאנו עוזבים את התא, עלינו להסתיר את תיבת המשולבת:
תהליך TForm1.DBGrid1ColExit (שולח: TObject);
התחלה DBGrid1.SelectedField. שדה שם = DBLookupComboBox1.DataField לאחר מכן
DBLookupComboBox1. נראה: = לא נכון
סוף;
שים לב שבמצב עריכה, כל הקשות המקשים עוברות לתא של DBGrid אך עלינו לוודא שהן נשלחות ל- DBLookupComboBox. במקרה של DBLookupComboBox, אנו מעוניינים בעיקר במפתח [Tab]; זה אמור להעביר את מיקוד הקלט לתא הבא.
תהליך TForm1.DBGrid1KeyPress (שולח: TObject; var מפתח: char);
התחלה (מקש = Chr (9)) לאחר מכן יציאה;
אם (DBGrid1.SelectedField. FieldName = DBLookupComboBox1.DataField) אז התחיל
DBLookupComboBox1.SetFocus;
SendMessage (DBLookupComboBox1.Handle, WM_Char, word (מפתח), 0);
סוף
סוף;
כשאתה בוחר פריט ("שורה") מ- DBLookupComboBox, הערך או המתאים קיפילד שדה מאוחסן כערך של DataField שדה.