דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. WPF איך לייצר DataGrid כולל ה- Headers באופן דינאמי

WPF איך לייצר DataGrid כולל ה- Headers באופן דינאמי

מתוזמן נעוץ נעול הועבר תכנות
4 פוסטים 2 כותבים 175 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • pcinfogmachP מנותק
    pcinfogmachP מנותק
    pcinfogmach
    כתב ב נערך לאחרונה על ידי
    #1

    אני מנסה לייצר DataGrid כולל ה- Headers באופן דינאמי
    כל המדריכים שקראתי מתארים איך לייצר את התוכן באופן דינאמי אבל אני לא מצליח לייצר את הכותרות באופן דינאמי ואז למלאות את התאים אשמח לקבל הדרכה בנושא.

    גמ"ח מידע מחשבים ואופיס

    תגובה 1 תגובה אחרונה
    0
    • dovidD מנותק
      dovidD מנותק
      dovid ניהול
      כתב ב נערך לאחרונה על ידי dovid
      #2

      אם מוגדר AutoGenerateColumns כtrue אז נוצרות עמודות אוטומטית לכל מאפיין כאשר השם הוא כשם המאפיין:

      dataGrid1.AutoGenerateColumns = false;
      dataGrid1.ItemsSource = Enumerable.Range(1, 10).Select(i => new DataExample { Name = "Name" + i, Age = i });
      

      ידנית אתה יכול להוסיף עמודות ככה:

      dataGrid1.AutoGenerateColumns = false;
      dataGrid1.ItemsSource = Enumerable.Range(1, 10).Select(i => new DataExample { Name = "Name" + i, Age = i });
      dataGrid1.Columns.Add(new DataGridTextColumn { Header = "שם העמודה", Binding = new Binding("Name") });
      

      את התאים אף פעם אל תוסיף ידנית, תחבר את הDataGrid למקור נתונים כל שהוא (למשל List<t>) כפי שהדגמתי.

      בשביל ההדגמה עשיתי קוד C# אבל בWPF בריא אתה אמור תמיד לעבוד חזק עם הXAML ולחבר אותו לקוד על ידי בינדינג. אכן את רשימת העמודות נראה לי שאי אפשר ליצור בצורה פשוטה עם Binding (אלא אם כן מרחיבים את הפקד DataGrid).

      מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

      בכל נושא אפשר ליצור קשר dovid@tchumim.com

      pcinfogmachP תגובה 1 תגובה אחרונה
      0
      • pcinfogmachP מנותק
        pcinfogmachP מנותק
        pcinfogmach
        השיב לdovid ב נערך לאחרונה על ידי pcinfogmach
        #3

        @dovid
        אם הבנתי נכון אזי בקוד שהצגת שמות העמודות הם סטטיים ("Name", Age") רק התוכן הוא דינאמי אני מחפש שגם שמות העמודות יהיו דינאמיים

        אולי אציג את הצורך הספיציפי שלי אזי נוכל להגיע לתשובה יותר מהר אני מנסה לייצר פקד כזה (התמונה מאוצר החכמה)
        68bc09f5-5904-4957-9910-4d9c65e13535-image.png
        בעצם הפקד לוקח רשימה של מילים ויוצר עמודות של מילים חילופיות עבורם לבחירה על ידי המשתמש

        גמ"ח מידע מחשבים ואופיס

        תגובה 1 תגובה אחרונה
        0
        • dovidD מנותק
          dovidD מנותק
          dovid ניהול
          כתב ב נערך לאחרונה על ידי dovid
          #4

          אתה רוצה DataGrid בגלל שהצורה הויזואלית נראת כטבלה, אבל בWPF הפקדים מייצגים רעיון לוגי ולא צורה ויזואלית - כי אפשר להציג הכל בכל צורה.
          הויזואל שאתה רוצה הוא רשת, כלומר Grid פשוט. למעשה אני לא חושב שאתה צריך גריד, אתה צריך נטו רשימת מילים אופקית ובכל רשימה אפשרויות חילופיות ברשימה אנכית. אני הכנתי לך קוד לדוגמה, זה המחלקות:

          class Word
          {
              public string OriginalWord { get; set; }
              public List<AlternativeWord> AlternativeWords { get; private set; } = new List<AlternativeWord>();
          }
          
          class AlternativeWord
          {
              public string Word { get; set; }
              public bool Include { get; set; }
          }
          

          זה הXAML להציג את המבנה:

          <ItemsControl x:Name="wordsAltPanel" >
              <ItemsControl.ItemsPanel>
                  <ItemsPanelTemplate>
                      <StackPanel Orientation="Horizontal"/>
                  </ItemsPanelTemplate>
              </ItemsControl.ItemsPanel>
              <ItemsControl.ItemTemplate>
                  <DataTemplate>
                      <StackPanel Margin="4">
                          <TextBlock Text="{Binding OriginalWord}" FontWeight="Bold"  />
                          <ItemsControl ItemsSource="{Binding AlternativeWords}">
                              <ItemsControl.ItemTemplate>
                                  <DataTemplate>
                                      <CheckBox Content="{Binding Word}" IsChecked="{Binding Include}" />
                                  </DataTemplate>
                              </ItemsControl.ItemTemplate>
                          </ItemsControl>
                      </StackPanel>
                  </DataTemplate>
              </ItemsControl.ItemTemplate>
          </ItemsControl>
          

          זה קוד לדוגמה:

          var textBox1 = new TextBox() { Text = "איסתרא בלגינא אכל נונא" };
          
          var input = textBox1.Text.Split(' ', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
          var words = new List<Word>();
          var rnd = new Random();
          foreach (var word in input)
          {
              var wordItem = new Word { OriginalWord = word };
              for (var i = rnd.Next(0, 4); i > 0; i--)
                  wordItem.AlternativeWords.Add(new AlternativeWord { Word = word + "-" + i });
              words.Add(wordItem);
          }
          
          wordsAltPanel.ItemsSource = words;
          

          תוצאה:
          8c089831-2a74-4fa4-9962-6f37c3d1aed0-image.png

          מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

          בכל נושא אפשר ליצור קשר dovid@tchumim.com

          תגובה 1 תגובה אחרונה
          4

          בא תתחבר לדף היומי!
          • התחברות

          • אין לך חשבון עדיין? הרשמה

          • התחברו או הירשמו כדי לחפש.
          • פוסט ראשון
            פוסט אחרון
          0
          • דף הבית
          • קטגוריות
          • פוסטים אחרונים
          • משתמשים
          • חיפוש
          • חוקי הפורום