WPF: איך עושים edit ל- DataGridHyperlinkColumn
-
יש לי 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)
-
לערוך את סגנון ה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)
-
בסוף באמת ביטלתי את יכולת העריכה של העמודה והוספתי כפתור בתוכו שבלחיצה עליו פותח חלון לבחירת 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)
-
תודה על השיתוף.
יפה מאוד הקוד.
אגב, יש בו טעות: המאפיין FileName של הדיאלוג מחזיר את כל הFull Name כלומר השם כולל הPath.
אז במקום הdialog.InitialDirectory + dialog.FileName, צריך להיות רק dialog.FileName.בהצלחה.
[size=85:33h4gybf]נ.ב. לעיצוב קטעי קוד בפוסטים בפורום, במקום להשתמש בלחצן code השתמשי בתיבת "בחר תחביר", זה מעצב לפי השפה הנבחרת.[/size:33h4gybf]פורסם במקור בפורום CODE613 ב11/07/2013 11:42 (+03:00)