שאלה קטנה ב-mfc...

mishat

New member
שאלה קטנה ב-mfc...

יש לי אובייקט מסוג: CListCtrl - יש בו מספר עמודות ואני רוצה להוסיף לתוכו פריטים: CListCtrl &l_oList = GetListCtrl(); // Sets The list view to be in more Report. l_oList.ModifyStyle(0, LVS_REPORT); // Adds columns. l_oList.InsertColumn(0, "Name", LVCFMT_CENTER, 100); l_oList.InsertColumn(1, "Language", LVCFMT_CENTER, 100); l_oList.InsertColumn(2, "Publisher", LVCFMT_CENTER, 100); l_oList.InsertColumn(3, "Writer", LVCFMT_CENTER, 100); l_oList.InsertColumn(4, "Number of pages", LVCFMT_CENTER, 100); l_oList.InsertColumn(5, "Year of publish", LVCFMT_CENTER, 100); אני לא מוצא כיצד לעשות זאת. ישנה פונקציה InsertItem - שיודעת להכניס פריטים - אבל הפריטים האלה מופיעים מתחת לעמודה Name בלבד. למשל: l_oList.InsertItem(1, "abc"); l_oList.InsertItem(2, "def"); אבל זה כמובן לא מה שאני רוצה - אלא רוצה להכניס אובייקטים שלמים שיש להם את השדות כמו העמודות שיצרתי. במקרה שלי - זהו אובייקט מסוג Book שיש לו את כל הפריטים כמו העמודות של cctlrlist.
 

אלדד26

New member
יש לך את התשובה

ב - MSDN, אם תקרא את הדף של InsertItem. בגדול, יש פקודה שנקראת SetItemText שמתייחסת ל - SubItems בתוך הרשימה.
 

אלדד26

New member
אוקיי... הסבר.

בוא נראה את הקוד שהם נתנו ב - MSDN:
for (int i=0;i < 10;i++) { strText.Format(TEXT("item %d"), i); // Insert the item, select every other item. pmyListCtrl->InsertItem( LVIF_TEXT|LVIF_STATE, i, strText, (i%2)==0 ? LVIS_SELECTED : 0, LVIS_SELECTED, 0, 0); // Initialize the text of the subitems. for (int j=1;j < nColumnCount;j++) { strText.Format(TEXT("sub-item %d %d"), i, j); pmyListCtrl->SetItemText(i, j, strText); } }​
הקוד מוסיף 10 שורות לטבלה. בכל שורה מבוצע InsertItem אחד, שבאמת קובע את התוכן של העמודה הראשונה (השמאלית) בטבלה. אבל אחרי ביצוע הפקודה הזו, מבוצעות עוד 10 SetItemText, שמקבלות את השורה, את העמודה, ואת הטקסט שיהיה שם. שים לב לדברים הבאים: 1. העמודות ממוספרות מ - 0 עד N, כאשר עמודה 0 נקבעת כבר על ידי פקודת ה - InsertItem. 2. כל התכנים הם מחרוזות - ולא שום טיפוס אחר. כלומר, אם יש לך מספר שאתה רוצה לשים בטבלה, תצטרך להשתמש ב - sprintf או משהו דומה. נהוג לכתוב שגרה שממלאת את הטבלה מתוך מערך של נתונים. השגרה עוברת איבר איבר על המערך, ובכל פעם ממלאת שורה לפי הערכים שבתוך אותו איבר. כדי להאיץ את העבודה, נהוג גם לעדכן ישירות את הטבלה, במקביל לעדכון הנתון במערך (למשל, אם יש לך טבלה עם שרתים ועם כתובות ה - IP שלהם, ושינית לאחד השרתים את הכתובת, לא תרצה שכל הטבלה תיבנה מחדש, אלא תבצע שינוי ישיר בתוך מבנה הנתונים שלך, ותבצע SetItemText אחד במקום הדרוש). עוד שאלות?
 
למעלה