如何在DATAGRID链接到另一个窗口的单元格?

时间:2013-11-19 11:07:51

标签: c# wpf datagrid window

我从我的WPF应用程序中将SQL数据库中的数据导入到我的DATAGRID中。我希望能够点击一个名为的单元格:'离开审计'然后从那里被重定向到另一个页面,其中包含有关剩余审计数量的所有信息。

如何创建点击事件以将我带到另一个页面?

P.S。我是新手。

修改:http://i.stack.imgur.com/LGnHA.png

修改:http://i.stack.imgur.com/tU0bA.png - 想要点击最后一列的单元格。

2 个答案:

答案 0 :(得分:0)

希望这项工作:

<DataGridHyperlinkColumn Binding="{Binding Link}">
    <DataGridHyperlinkColumn.ElementStyle>
        <Style>
            <EventSetter Event="Hyperlink.Click" Handler="DG_Hyperlink_Click"/>
        </Style>
    </DataGridHyperlinkColumn.ElementStyle>
</DataGridHyperlinkColumn>

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

如果URI指向一个网站,它将使用默认的Web浏览器打开,如果它是一个文件夹,它将在资源管理器中打开,如果它是一个文件,它将使用与之关联的默认应用程序打开。 / p>

要将其用于自动生成的列,您的属性必须是Uri类型,因此会生成DataGridHyperlinkColumn。然后,您可以通过将样式放在DataGrid.Resources中来挂接事件:

<DataGrid.Resources>
    <Style TargetType="Hyperlink">
        <EventSetter Event="Click" Handler="DG_Hyperlink_Click"/>
    </Style>
</DataGrid.Resources>

答案 1 :(得分:0)

试试这个..

在CellStyle上添加一个EventSetter:

<DataGrid.CellStyle>
    <Style>
        <EventSetter Event="DataGridCell.MouseLeftButtonDown"
                     Handler="CellClicked" />
    </Style>
</DataGrid.CellStyle>

在Code Behind中添加处理程序:

private void CellClicked(object sender, MouseButtonEventArgs e)
{
    String cellContent = ((TextBlock)sender).Text;

    xamlAllocateAudit window = new xamlAllocateAudit
    {
        DataContext = cellContent
    }
    window.Show();
}

在我的结尾工作..首先点击选择单元格,然后第二次单击fires处理程序,这将打开新窗口。

如果你想要更新同一个窗口,那么保留一个窗口的引用,如果存在,则更新它的datacontext。

在xamlAllocateAudit的ohter侧,为事件“DataContextChanged”创建处理程序:

<Window x:Class="WpfApplication3.xamlAllocateAudit"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="DetailsWindow" Height="300" Width="300"
    DataContextChanged="Window_DataContextChanged">
<!-- Some graphics -->
</Window>

在CodeBehind中:

private void Window_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
{
    var newDataContext = e.NewValue;
    //do stuff with DataContext
}

干杯!!