Hello
I would like to know how to change the displayed text of an Hyperlink column in an unbound Gridview in C#.
I added the hyperlink column like this (replaces an already existing column containing the shortcut):
GridViewHyperlinkColumn hyperlinkColumn = new GridViewHyperlinkColumn("shortcut");
hyperlinkColumn.ReadOnly = true;
hyperlinkColumn.Width = 200;
radGridDocuments.Columns.Remove("shortcut");
radGridDocuments.Columns.Add(hyperlinkColumn);
It displays the link correctly, and I am able to click on it to open documents or websites, but I would like to change the text displayed to a more user-friendly text, like simply the document's name instead of the full "\\sharefolder\somefolder\someusername\somedocument.doc", or the full "http://www.telerik.com/forums/winforms/gridview/etc.html".
I have the text I want displayed in another column, on the same row.
Thanks.
                                I would like to know how to change the displayed text of an Hyperlink column in an unbound Gridview in C#.
I added the hyperlink column like this (replaces an already existing column containing the shortcut):
GridViewHyperlinkColumn hyperlinkColumn = new GridViewHyperlinkColumn("shortcut");
hyperlinkColumn.ReadOnly = true;
hyperlinkColumn.Width = 200;
radGridDocuments.Columns.Remove("shortcut");
radGridDocuments.Columns.Add(hyperlinkColumn);
It displays the link correctly, and I am able to click on it to open documents or websites, but I would like to change the text displayed to a more user-friendly text, like simply the document's name instead of the full "\\sharefolder\somefolder\someusername\somedocument.doc", or the full "http://www.telerik.com/forums/winforms/gridview/etc.html".
I have the text I want displayed in another column, on the same row.
Thanks.
5 Answers, 1 is accepted
0
                                Accepted
Hi Philippe,
Thank you for writing.
The easiest way to achieve this is by subscribing to CellFormatting event and in the handler change the Text property of the GridCellElement which you receive as an argument.
I followed your instructions and prepared a small example in which I read the source of a GridHyperlinkCellElement from an existing cell in grid and then deleted the column which contained the existing cell. By subscribing to CellFormatting event I put more user friendly names of the links in the cells. Please see my code snippet below:
 
 
 
 
 
 
 
 
Additional information on styling and behavior customization you can find here.
I am also sending you a .gif file showing how the grid looks on my side.
I hope this helps. Should you have further questions please do not hesitate to write back.
Regards,
Hristo
Telerik 
 
                                        Thank you for writing.
The easiest way to achieve this is by subscribing to CellFormatting event and in the handler change the Text property of the GridCellElement which you receive as an argument.
I followed your instructions and prepared a small example in which I read the source of a GridHyperlinkCellElement from an existing cell in grid and then deleted the column which contained the existing cell. By subscribing to CellFormatting event I put more user friendly names of the links in the cells. Please see my code snippet below:
public partial class Form1 : Form{    string nameLink1;    string nameLink2;    string nameLink3;    public Form1()    {        InitializeComponent();        var dataTable = new DataTable();        dataTable.Columns.Add("Id", typeof(int));        dataTable.Columns.Add("Source", typeof(string));        dataTable.Rows.Add(0, "http://www.telerik.com/help/winforms/gridview-columns-gridviewhyperlinkcolumn.html");        dataTable.Rows.Add(1, "http://www.telerik.com/help/winforms/gridview-columns-gridviewimagecolumn.html");        dataTable.Rows.Add(2, "http://www.telerik.com/help/winforms/gridview-columns-gridviewtextboxcolumn.html");        this.radGridView1.DataSource = dataTable;        GridViewHyperlinkColumn hyperlinkColumn = new GridViewHyperlinkColumn("Shortcut");        hyperlinkColumn.ReadOnly = true;        hyperlinkColumn.Width = 200;        this.radGridView1.Columns.Add(hyperlinkColumn);        this.nameLink1 = this.radGridView1.Rows[0].Cells["Source"].Value.ToString();        this.nameLink2 = this.radGridView1.Rows[1].Cells["Source"].Value.ToString();        this.nameLink3 = this.radGridView1.Rows[2].Cells["Source"].Value.ToString();        this.radGridView1.Rows[0].Cells["Shortcut"].Value = this.nameLink1;        this.radGridView1.Rows[1].Cells["Shortcut"].Value = this.nameLink1;        this.radGridView1.Rows[2].Cells["Shortcut"].Value = this.nameLink1;        this.radGridView1.Columns.Remove("Source");        this.radGridView1.BestFitColumns(BestFitColumnMode.AllCells);    }    private void radGridView1_CellFormatting(object sender, CellFormattingEventArgs e)    {        if (e.CellElement is GridHyperlinkCellElement)        {            if (e.RowIndex == 0 && e.ColumnIndex == 1)            {                e.CellElement.Text = "Hyperlink Column";            }            else if (e.RowIndex == 1 && e.ColumnIndex == 1)            {                e.CellElement.Text = "Image Column";            }            else            {                e.CellElement.Text = "Textbox Column";            }        }    }}Additional information on styling and behavior customization you can find here.
I am also sending you a .gif file showing how the grid looks on my side.
I hope this helps. Should you have further questions please do not hesitate to write back.
Regards,
Hristo
Telerik
Check out the Telerik Platform - the only platform that combines a rich set of UI tools with powerful cloud services to develop web, hybrid and native mobile apps.
0
                                
                                                    Philippe
                                                    
                                            
    Top achievements
    
            
                
                Rank 2
            
    
                                                
                                                answered on 19 Jan 2015, 03:33 PM
                                            
                                        Thanks Hristo. 
I don't like having to add even more overhead to my already-packed _CellFormatting function, especially for something that could have been set once at the column's setup. Still, the solution works. Thanks for your help!
For reference, here is my final code to make it work:
                                        I don't like having to add even more overhead to my already-packed _CellFormatting function, especially for something that could have been set once at the column's setup. Still, the solution works. Thanks for your help!
For reference, here is my final code to make it work:
private void radGridDocuments_CellFormatting(object sender, CellFormattingEventArgs e){    if (e.RowIndex > -1)        if ((string)e.CellElement.ColumnInfo.Name == "shortcut")            e.CellElement.Text = e.Row.Cells["itemName"].Value.ToString();}0
                                Hello Philippe,
Thank you for writing back.
I am glad that the provided solution worked for your project.
Have in mind that because of data virtualization the Formatting events are the best place to set the visual appearance of rows, cells etc. Additional information can be found in the following blog post and in this help topic.
Should you have further questions please do not hesitate to write back.
Regards,
Hristo
Telerik 
 
                                        Thank you for writing back.
I am glad that the provided solution worked for your project.
Have in mind that because of data virtualization the Formatting events are the best place to set the visual appearance of rows, cells etc. Additional information can be found in the following blog post and in this help topic.
Should you have further questions please do not hesitate to write back.
Regards,
Hristo
Telerik
Check out the Telerik Platform - the only platform that combines a rich set of UI tools with powerful cloud services to develop web, hybrid and native mobile apps.
0
                                
                                                    Todd
                                                    
                                            
    Top achievements
    
            
                
                Rank 1
            
    
                                                
                                                answered on 24 Mar 2015, 07:46 PM
                                            
                                        Could you provide a code snippet how to change the visited state of the cell element of the hypelink column to default? The info at http://www.telerik.com/help/winforms/gridview-columns-gridviewhyperlinkcolumn.html isn't very helpful.
                                        0
                                Hello Todd,
Thank you for writing.
You can set a color to the already visited hyperlink cells by handling the CellFormatting event:
 
I hope this information is useful. Should you have further questions please do not hesitate to write back.
Regards,
Hristo Merdjanov
Telerik 
 
                                        Thank you for writing.
You can set a color to the already visited hyperlink cells by handling the CellFormatting event:
private void radGridView1_CellFormatting(object sender, CellFormattingEventArgs e){    GridHyperlinkCellElement hyperlinkCell = e.CellElement as GridHyperlinkCellElement;    if (hyperlinkCell != null)    {        GridViewHyperlinkCellInfo hyperlinkCellInfo = hyperlinkCell.RowInfo.Cells[e.ColumnIndex] as GridViewHyperlinkCellInfo;        if (hyperlinkCellInfo != null)        {            if (hyperlinkCellInfo.Visited)            {                hyperlinkCell.ContentElement.ForeColor = Color.FromArgb(21, 66, 139);            }            else            {                hyperlinkCell.ContentElement.ResetValue(LightVisualElement.ForeColorProperty, ValueResetFlags.Local);            }        }    }}I hope this information is useful. Should you have further questions please do not hesitate to write back.
Regards,
Hristo Merdjanov
Telerik
See What's Next in App Development. Register for TelerikNEXT.
