2017-10-09 22 views
-1

我很震惊,听起来很简单,但我很困惑。我有一个DataGrid控件,它在运行时从SQL Server中填充数据。我需要的是让ID列到一个超级链接(我也试着改变颜色为蓝色,但没有成功)如何将DataGrid的列(如果不是第一列)制作为超链接

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); 
     } 

和XAML是如下非常基本的

<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> 

任何帮助将不胜感激...

很多谢谢

回答

0

这是怎么回事?

代码:

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> 

你需要在这里的超级链接处理程序,因为它是在一个Window托管,如果它在一个NavigationWindow然后it's automatic的托管。

0

你可以处理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), 
     }; 
    } 
} 
相关问题