Reputation: 539
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
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