2017-10-09 3 views
-1

Je suis frappé, cela semble simple mais je suis confus. J'ai un contrôle DataGrid qui remplit les données à l'exécution à partir de SQL Server. Tout ce que je besoin est de faire la colonne d'identification dans un lien hypertexte (je l'ai aussi essayé de changer la couleur bleu sans succès)Comment faire une colonne (sinon la première colonne) d'un DataGrid en lien hypertexte

private void fillDataGrid(string strSQL) 
    { 

     try 
     { 
      SqlConnection con = new SqlConnection(); 
      con.ConnectionString = KaskoConnectionString.ConnectionString; 
      con.Open(); 
      sda = new SqlDataAdapter(strSQL, con); 
      ds = new DataSet(); 
      sda.Fill(ds); 
      DGHolder.ItemsSource = ds.Tables[0].DefaultView; 
      //DGHolder.Columns[0]. 

     } 
     catch (Exception ex) 
     { 
      this.ShowMessageAsync("Error", ex.Message, MessageDialogStyle.Affirmative); 
     } 

et le XAML est très basique comme ci-dessous

<DataGrid Name="DGHolder" BorderBrush="Gray" BorderThickness="4" Background="LightGray" AlternatingRowBackground="LightBlue" AutoGenerateColumns="True" Style="{StaticResource AzureDataGrid}" Grid.Column="0" FontWeight="Bold" MouseLeftButtonUp="DGHolder_MouseLeftButtonUp"> 

      </DataGrid> 

toute aide serait très apprécié ...

Merci beaucoup

Répondre

0

Qu'en est-ce?

code:

using System.Diagnostics; 
using System.Windows; 
using System.Windows.Documents; 

namespace WpfApp1 
{ 
    public partial class MainWindow 
    { 
     public MainWindow() 
     { 
      InitializeComponent(); 

      DataContext = new[] 
      { 
       new Example {Company = "Google", Url = "http://www.google.com"}, 
       new Example {Company = "Amazon", Url = "http://www.amazon.com"} 
      }; 
     } 

     private void HyperlinkClick(object sender, RoutedEventArgs e) 
     { 
      var link = (Hyperlink) e.OriginalSource; 
      Process.Start(link.NavigateUri.AbsoluteUri); 
     } 
    } 

    internal class Example 
    { 
     public string Company { get; set; } 
     public string Url { get; set; } 
    } 
} 

XAML:

<Window 
    x:Class="WpfApp1.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:wpfApp1="clr-namespace:WpfApp1" 
    mc:Ignorable="d"> 

    <Grid> 
     <DataGrid 
      d:DataContext="{d:DesignInstance wpfApp1:Example}" 
      AutoGenerateColumns="False" 
      ItemsSource="{Binding}"> 
      <DataGrid.Columns> 
       <DataGridTextColumn Binding="{Binding Company}" Header="Company" /> 
       <DataGridHyperlinkColumn Binding="{Binding Url}" Header="Url"> 
        <DataGridHyperlinkColumn.ElementStyle> 
         <Style> 
          <EventSetter Event="Hyperlink.Click" Handler="HyperlinkClick" /> 
         </Style> 
        </DataGridHyperlinkColumn.ElementStyle> 
       </DataGridHyperlinkColumn> 
      </DataGrid.Columns> 
     </DataGrid> 
    </Grid> 
</Window> 

Vous devez le gestionnaire d'un lien hypertexte ici parce qu'il est hébergé dans un Window, s'il est hébergé dans un NavigationWindow puis it's automatic.

0

Vous pouvez gérer l'événement AutoGeneratingColumn:

<DataGrid Name="DGHolder" ... AutoGeneratingColumn="dg_AutoGeneratingColumn"> 

private void dg_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) 
{ 
    if (e.PropertyName == "ID") 
    { 
     e.Column = new DataGridHyperlinkColumn() 
     { 
      ContentBinding = new Binding(e.PropertyName), 
     }; 
    } 
}