כיצד להציג ולערוך שדות MEMO ב- TDBGrid של דלפי

click fraud protection

אם אתה מפתח יישומי מסד נתונים עם טבלאות המכילות שדות MEMO, תבחין כי כברירת מחדל, רכיב TDBGrid אינו מציג את התוכן של שדה MEMO בתוך תא DBGrid.

מאמר זה מספק מושג כיצד לפתור את הבעיה של TMemoField זו (עם כמה טריקים נוספים) ...

TMemoField

שדות תזכיר משמשים לייצוג טקסט ארוך או שילובים של טקסט ומספרים. בבניית יישומי מסד נתונים המשתמשים בדלפי, האובייקט TMemoField משמש לייצוג שדה תזכיר במערך נתונים. TMemoField מכסה את ההתנהגות הבסיסית המשותפת לשדות המכילים נתוני טקסט או אורך שרירותי. ברוב בסיסי הנתונים, גודל שדה התזכיר מוגבל על ידי גודל מסד הנתונים.

אמנם אתה יכול להציג את התוכן של שדה MEMO ברכיב TDBMemo, על ידי תכנון ה- TDBGrid יציג רק "(תזכיר)" לתוכן של שדות כאלה.

בכדי להציג בפועל טקסט (משדה ה- MEMO) בתא DBGrid המתאים, יהיה עליכם להוסיף רק שורת קוד פשוטה ...

לצורך הדיון הבא, נניח שיש לך טבלת מסד נתונים בשם "TestTable" עם שדה MEMO אחד לפחות בשם "Data".

OnGetText

כדי להציג את התוכן של שדה MEMO ב- DBGrid, עליך לצרף שורת קוד פשוטה בשדה OnGetText אירוע. הדרך הקלה ביותר ליצור את מטפל האירועים OnGetText היא להשתמש בעורך השדות בזמן העיצוב כדי ליצור רכיב שדה מתמשך לשדה התזכירים:

instagram viewer
  1. חבר את רכיב הצאצא של TDataset שלך (TTable, TQuery, TADOTable, TADOQuery ...) לטבלת מסד הנתונים "TestTable".
  2. לחץ פעמיים על רכיב הנתונים כדי לפתוח את עורך ה- Fields
  3. הוסף את שדה ה- MEMO לרשימת השדות המתמשכים
  4. בחר בשדה MEMO בעורך שדות
  5. הפעל את הכרטיסייה אירועים במפקח האובייקטים
  6. לחץ פעמיים על האירוע OnGetText כדי ליצור את מטפל האירועים

הוסף את שורת הקוד הבאה (נטוי בהמשך):

נוהל TForm1.DBTableDataGetText (
שולח: TField;
var טקסט: מחרוזת;
DisplayText: בוליאני);
התחל
טקסט: = העתק (DBTableData. AsString, 1, 50);

הערה: לאובייקט הנתונים נקרא "DBTable", שדה MEMO נקרא "DATA", ולכן, כברירת מחדל, TMemoField המחובר לשדה מסד הנתונים של MEMO נקרא "DBTableData". על ידי הקצאה DBTableData. AsString אל ה טקסט הפרמטר של אירוע OnGetText, אנו אומרים לדלפי להציג את כל הטקסט משדה MEMO בתא DBGrid.
אתה יכול גם התאם את רוחב התצוגה של שדה התזכיר לערך מתאים יותר.

הערה: מכיוון ששדות MEMO יכולים להיות גדולים למדי, כדאי להציג רק חלק ממנו. בקוד שלעיל מוצגות רק 50 התווים הראשונים.

עריכה בטופס נפרד

כברירת מחדל, ה- TDBGrid אינו מאפשר עריכה של שדות MEMO. אם ברצונך לאפשר עריכה "במקום", תוכל להוסיף קוד להגיב על פעולת משתמש המציגה חלון נפרד המאפשר עריכה באמצעות רכיב TMemo.
לשם הפשטות נפתח חלון עריכה כאשר לחצו על ENTER "בשדה MEMO" ב- DBGrid.
בוא נשתמש ב- KeyDown אירוע של רכיב DBGrid:

נוהל TForm1.DBGrid1KeyDown (
שולח: נושא;
var מפתח: Word;
Shift: TShiftState);
התחל
אם מקש = VK_RETURN אז
התחל
אם DBGrid1.SelectedField = DBTableData אז
עם TMemoEditorForm. צור (אפס) לעשות
נסה
DBMemoEditor. טקסט: = DBTableData. AsString;
ShowModal;
DBTable. עריכה;
DBTableData. AsString: = DBMemoEditor. טקסט;
סוף סוף
חינם;
סוף;
סוף;
סוף;

הערה 1: "TMemoEditorForm" הוא צורה משנית המכילה רק רכיב אחד: "DBMemoEditor" (TMemo).
הערה 2: "TMemoEditorForm" הוסר מרשימת "צור טפסים אוטומטיים" בחלון הדו-שיח אפשרויות פרויקט.

בואו נראה מה קורה במנהל האירועים של ה- DBDrid1 KeyDown:

  1. כאשר משתמש לוחץ על מקש ENTER (אנו משווים את פרמטר המפתח ל- VK_RETURN קוד מפתח וירטואלי) [מפתח = VK_RETURN],
  2. אם השדה שנבחר כרגע ב- DBGrid הוא שדה ה- MEMO שלנו (DBGrid1.SelectedField = DBTableData),
  3. אנו יוצרים את TMemoEditorForm [TMemoEditorForm. צור (אפסי)],
  4. שלח את הערך של שדה MEMO לרכיב TMemo [DBMemoEditor. טקסט: = DBTableData. AsString],
  5. הצגת הטופס באופן מודרני [ShowModal],
  6. כאשר משתמש מסיים בעריכה וסוגר את הטופס, עלינו להכניס את הדאטה למצב עריכה [DBTable. ערוך],
  7. על מנת להיות מסוגלים להקצות את הערך הערוך לשדה ה- MEMO שלנו [DBTableData. AsString: = DBMemoEditor. טקסט].

הערה: אם אתה מחפש מאמרים נוספים וטיפים לשימוש בנושא TDBGrid, הקפד לבקר ב: "TDBGrid ל- MAXאוסף טיפים.

instagram story viewer