atulya
atulya

Reputation: 539

add clickable/hyperlink text to datagrid text during runtime

I am want to add clickable/hyperlink text to datagrid text during runtime.

Here is my XAML code for DataGrid

 <DataGrid Height="298" HorizontalAlignment="Left" Margin="18,273,0,0" Name="ResultDataGrid" VerticalAlignment="Top" Width="415" 
 RowBackground="#6B8DBBD1" AlternatingRowBackground="#CAD3D3BB" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" 
 CanUserSortColumns="True" IsReadOnly="True" HeadersVisibility="Column" HorizontalGridLinesBrush="#97000000" VerticalGridLinesBrush="#97000000" />

On a Button click, I am adding ItemSource to DataGrid

    var resultDT = CDataBaseHelper.GetProjectsReviewedBtw(sDate, eDate);
        if(resultDT !=null)
        {
            ResultDataGrid.AutoGenerateColumns = true;
            ResultDataGrid.ItemsSource = LoadCollectionData(resultDT);
            ResultDataGrid.Focus();

            NoofRecordFoundLable.Content = resultDT.Rows.Count + " records found";
        }

Here is my LoadCollectionData, which will return collection

    private List<ReviewedData> LoadCollectionData(DataTable resultData)
    {
        List<ReviewedData> result = new List<ReviewedData>();

        if (resultData != null && resultData.Rows.Count > 0)
        {
            for (var i = 0; i < resultData.Rows.Count; ++i)
            {
                result.Add( new ReviewedData()
                {
                    PROJECTNAME = resultData.Rows[i]["Name"].ToString(),
                    STATUS = resultData.Rows[i]["status"].ToString()
                });                    
            }
        }
        return result;
    }

How I can add clickable/hyperlink text to each PROJECTNAME, so that I can open new window to show more project details on each project displayed in DataGrid?

Any suggestions.

Regards

Upvotes: 1

Views: 3149

Answers (1)

har07
har07

Reputation: 89295

Instead of modifying UI at runtime, you should rely more on databinding and templating. That's the nature of WPF.

For this case, you may want to consider using DataGridHyperlinkColumn. Don't forget to turn off AutoGenerateColumns feature since you want to control appearance of the column :

<DataGrid AutoGenerateColumns="False"
         .... >
    <DataGrid.Columns>
        <DataGridHyperlinkColumn Binding="{Binding PROJECTNAME}" Header="Name">
            <DataGridHyperlinkColumn.ElementStyle>
                <Style>
                    <EventSetter Event="Hyperlink.Click" Handler="Hyperlink_Click"/>
                </Style>
            </DataGridHyperlinkColumn.ElementStyle>
        </DataGridHyperlinkColumn>
        <DataGridTextColumn Binding="{Binding STATUS}" Header="Status"/>
    </DataGrid.Columns>
</DataGrid>      

Then you can handle hyperlink clicked event according to your needs :

private void Hyperlink_Click(object sender, RoutedEventArgs e)
{
    Hyperlink link = (Hyperlink)e.OriginalSource;
    //Do something useful instead of just showing the hyperlink text in message box :
    MessageBox.Show(link.NavigateUri.ToString());
}

Upvotes: 2

Related Questions