Hyperlinks in autogenerated column of data grid
Hello Syncfusion,
Please could you help me with a task I am trying to complete. I am using the latest version of syncfusion tools in WPF, using the sfdatagrid to display a set of items from a datasource.
What I would like to do is make one of the columns of my grid hyperlinks so that the cursor would change appropriately when moving over the cells in that column and a method would fire on clicking each hyperlink.
I have modified an existing syncfusion demo project to show a little bit more what I need.
Please could you give me some pointers on how to do this?
Please could it be as MVVM as possible, ideally I'd like the cells to fire a bound command on click (but I'm not sure if that requires MVVMLight:eventtocommand and I've not had much success with that in the past.)
Thankyou very much for your help in advance,
Anya Hope
Attachment: WPF1691503399_fd73c749.zip
Please could you help me with a task I am trying to complete. I am using the latest version of syncfusion tools in WPF, using the sfdatagrid to display a set of items from a datasource.
What I would like to do is make one of the columns of my grid hyperlinks so that the cursor would change appropriately when moving over the cells in that column and a method would fire on clicking each hyperlink.
I have modified an existing syncfusion demo project to show a little bit more what I need.
Please could you give me some pointers on how to do this?
Please could it be as MVVM as possible, ideally I'd like the cells to fire a bound command on click (but I'm not sure if that requires MVVMLight:eventtocommand and I've not had much success with that in the past.)
Thankyou very much for your help in advance,
Anya Hope
Attachment: WPF1691503399_fd73c749.zip
SIGN IN To post a reply.
5 Replies
SV
Srinivasan Vasu
Syncfusion Team
June 1, 2017 05:42 PM UTC
Hi Anya,
Thanks for contacting Sycfusion support.
We have analyzed your query and we have modified your sample as per your requirement. In sample, we have changed the GridTextColumn text shown as HyperLink text by setting cellstyle.
Also, we have triggered the SfDataGrid.CellTapped event while clicking the text to shown a messagebox, which will be achieved by MVVM pattern using ICommand.
Please refer the code example.
XAML
|
<Style TargetType="syncfusion:GridCell" x:Key="style1">
<Setter Property="TextBlock.Foreground" Value="#FF2A6DCD"/>
</Style> |
C#
|
if (e.Column.MappingName == "EmployeeArea")
{
e.Column.AllowFocus = true;
(e.Column as GridTextColumn).TextDecorations = TextDecorations.Underline;
e.Column.CellStyle = Application.Current.FindResource("style1") as Style;
} |
Please download the sample from the below location.
Regards,
Srinivasan
Srinivasan
UN
Unknown
Syncfusion Team
June 2, 2017 07:55 AM UTC
Thank you very much for your really quick reply.
That's excellent and has done exactly what I wanted, thank you. I will have a quick look to see if I can change the cursor in those cells but the functionality I need is there.
Thanks again,
Anya
That's excellent and has done exactly what I wanted, thank you. I will have a quick look to see if I can change the cursor in those cells but the functionality I need is there.
Thanks again,
Anya
BR
Balamurugan Rajaraman
Syncfusion Team
June 5, 2017 12:35 PM UTC
Hi Anya
We are sorry for the inconvenience
We have checked your query “How to get the cell text while mouse cursor hover on that cell”. You can able to achieve you requirement by raising the MouseMove event of the SfDataGrid. In that event you can able to achieve your requirement as like the below provided code sample.
Code example
|
var visualcontainer = this.AssociatedObject.GetVisualContainer();
// get the row and column index based on the pointer position
var rowColumnIndex = visualcontainer.PointToCellRowColumnIndex(e.GetPosition(visualcontainer));
if (rowColumnIndex.IsEmpty)
return;
var columnName = AssociatedObject.Columns[rowColumnIndex.ColumnIndex].MappingName;
if (columnName==null|| columnName != "EmployeeArea")
return;
var colindex = this.AssociatedObject.ResolveToGridVisibleColumnIndex(rowColumnIndex.ColumnIndex);
if (colindex < 0 || colindex >= this.AssociatedObject.Columns.Count)
return;
var recordindex = this.AssociatedObject.ResolveToRecordIndex(rowColumnIndex.RowIndex);
if (recordindex < 0)
return;
var recordentry = this.AssociatedObject.View.GroupDescriptions.Count == 0 ? this.AssociatedObject.View.Records[recordindex] : this.AssociatedObject.View.TopLevelGroup.DisplayElements[recordindex];
//Returns if caption summary or group summary row encountered.
if (!recordentry.IsRecords)
return;
var record = (recordentry as RecordEntry).Data;
var value = record.GetType().GetProperty(AssociatedObject.Columns[colindex].MappingName).GetValue(record) ?? string.Empty;
MessageBox.Show("Cell Value : " + value); |
We have modified the provided sample as like mentioned above achieve your requirement and attached that sample for reference, you can able to get It from the below link
Please refer the below links for getting the record based upon the Mouse events
Regards,
Balamurugan R
UN
Unknown
Syncfusion Team
June 5, 2017 01:23 PM UTC
Hi Both,
Thank you very much for your reply, I hadn't expected you to look further into this so thank you very much, that was very kind of you. In the meantime however I did find a simpler way of doing this that may interest you.
I found this by studying the sfdatagrid documentation on the syncfusion website.
All I needed to do was replace the column type during column autogeneration. This displayed my text the way I wanted it and also changed the cursor in the right place automatically! The only code snippet needed was:
if (e.Column.MappingName == "EmployeeArea")
{
if (!(e.Column is GridHyperlinkColumn))
{
e.Column = new GridHyperlinkColumn() { MappingName = "EmployeeArea", HeaderText = "Employee Area" };
}
}
I have updated the demo project just for your interest. Hopefully this solution can help someone else in future.
As always thank you very much for your time and effort, it is greatly appreciated.
Anya
Attachment: WPF925338025_7bd7846e.zip
Thank you very much for your reply, I hadn't expected you to look further into this so thank you very much, that was very kind of you. In the meantime however I did find a simpler way of doing this that may interest you.
I found this by studying the sfdatagrid documentation on the syncfusion website.
All I needed to do was replace the column type during column autogeneration. This displayed my text the way I wanted it and also changed the cursor in the right place automatically! The only code snippet needed was:
if (e.Column.MappingName == "EmployeeArea")
{
if (!(e.Column is GridHyperlinkColumn))
{
e.Column = new GridHyperlinkColumn() { MappingName = "EmployeeArea", HeaderText = "Employee Area" };
}
}
I have updated the demo project just for your interest. Hopefully this solution can help someone else in future.
As always thank you very much for your time and effort, it is greatly appreciated.
Anya
Attachment: WPF925338025_7bd7846e.zip
SV
Srinivasan Vasu
Syncfusion Team
June 6, 2017 06:08 AM UTC
Hi Anya,
We are glad that you issue has been fixed and thank you for sharing us your solution.
Regards,
Srinivasan
Srinivasan
SIGN IN To post a reply.
- 5 Replies
- 3 Participants
-
UN Unknown
- May 31, 2017 11:52 AM UTC
- Jun 6, 2017 06:08 AM UTC