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

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

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. WPF: איך עושים edit ל- DataGridHyperlinkColumn

WPF: איך עושים edit ל- DataGridHyperlinkColumn

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

    יש לי datagrid ואני רוצה עמודה מסוג DataGridHyperlinkColumn שמציגה לינק ל-filesystem של המחשב.
    עשיתי את זה כך:

    private void DG_Hyperlink_Click(object sender, RoutedEventArgs e)
    {
        Hyperlink link = e.OriginalSource as Hyperlink;
        System.Diagnostics.Process.Start(link.NavigateUri.AbsoluteUri);
    }
    
    
    <DataGridHyperlinkColumn Header="שמור בתיקיה" Binding="{Binding SavedPath}">
        <DataGridHyperlinkColumn.ElementStyle>
    	    <Style>
                <EventSetter Event="Hyperlink.Click" Handler="DG_Hyperlink_Click" />
            </Style>
        </DataGridHyperlinkColumn.ElementStyle>
    </DataGridHyperlinkColumn>
    

    השאלה היא איך עושים שבלחיצה על המקום הריק בעמודה או במקרה שאין תוכן בעמודה זה יפתח לי folderBrowser יבחר תיקיה או קובץ וימלא את ה-SavedPath בתוכן החדש.
    אני משערת שצריך להשתמש ב- DataGridHyperlinkColumn.EditingElementStyle רק אני לא מבינה איך משתמשים בו.

    תודה רבה

    פורסם במקור בפורום CODE613 ב26/06/2013 21:45 (+03:00)

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

      לערוך את סגנון הEditingElementStyle זה ייתן טקסטבוקס שונה לכתיבה אבל לא יפתח דיאלוג.
      אז צריך ללכוד את תחילת העריכה ולעצור אותה. ע"י האירוע BeginningEdit של הדטהגריד.
      כדי לא להרוס את התנהגות העריכה של שאר העמודות נבדוק קודם שהתא העומד לעריכה שייך לעמודה שלנו ובמידה וכן, נטרפד את העריכה ונציג תיבת דו שיח.
      ככה:

      private void dataGrid1_BeginningEdit(object sender, DataGridBeginningEditEventArgs e)
      {
          if (e.Column == ColumnHL)
          {
              var foDialog = new System.Windows.Forms.FolderBrowserDialog();
              if (foDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
              {
                  var o = e.Row.DataContext as YourObjectType;
                  o.SavedPath = foDialog.SelectedPath ;                
              }
              e.Cancel = true;
          }
      }
      

      יכול להיות שעדיף שהעריכה תתבצע עם לחצן או תפריט הקשר, ואז מצד אחד זה יותר פשוט (אם כך תעשי תצטרכי לבטל את היכולת העריכה של העמודה).

      פורסם במקור בפורום CODE613 ב27/06/2013 20:16 (+03:00)

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

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

      תגובה 1 תגובה אחרונה
      0
      • T מנותק
        T מנותק
        tkt
        כתב ב נערך לאחרונה על ידי
        #3

        בסוף באמת ביטלתי את יכולת העריכה של העמודה והוספתי כפתור בתוכו שבלחיצה עליו פותח חלון לבחירת path חדש.

        <DataGridTemplateColumn Header="שמור בתיקיה" Width="*" IsReadOnly="True">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock>
                            <Hyperlink Click="DG_Hyperlink_Click" TextDecorations="None" NavigateUri="{Binding SavedPath}">
                                <TextBlock Text="{Binding SavedPath}" FlowDirection="LeftToRight" TextDecorations="Underline"  />
                            </Hyperlink>
                        </TextBlock>
                        <Button Content="..." Width="30" Click="BrowseFolder_Click" Background="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type DataGridCell}}, Path=Background}"/>
                      
                    </StackPanel>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        
        
        private void DG_Hyperlink_Click(object sender, RoutedEventArgs e)
        {
                         Hyperlink link = e.OriginalSource as Hyperlink;
                System.Diagnostics.Process.Start(link.NavigateUri.LocalPath);
        }
        
        private void BrowseFolder_Click(object sender, RoutedEventArgs e)
        {
            System.Windows.Forms.OpenFileDialog dialog = new System.Windows.Forms.OpenFileDialog();
            if (dialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                ((DataLayer.Documents)((Button)e.Source).DataContext).SavedPath = dialog.InitialDirectory + dialog.FileName; 
        }
        

        תודה רבה על ההדרכה.

        פורסם במקור בפורום CODE613 ב11/07/2013 10:28 (+03:00)

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

          תודה על השיתוף.
          יפה מאוד הקוד.
          אגב, יש בו טעות: המאפיין FileName של הדיאלוג מחזיר את כל הFull Name כלומר השם כולל הPath.
          אז במקום הdialog.InitialDirectory + dialog.FileName, צריך להיות רק dialog.FileName.

          בהצלחה.
          [size=85:33h4gybf]נ.ב. לעיצוב קטעי קוד בפוסטים בפורום, במקום להשתמש בלחצן code השתמשי בתיבת "בחר תחביר", זה מעצב לפי השפה הנבחרת.[/size:33h4gybf]

          פורסם במקור בפורום CODE613 ב11/07/2013 11:42 (+03:00)

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

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

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

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

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

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