2013-11-19 5 views
0

Я получаю данные из базы данных SQL в свой DATAGRID в своем приложении WPF. Я хочу, чтобы иметь возможность щелкнуть ячейку с именем: «Следить за аудитом» и оттуда перенаправить на страницу анотер со всей информацией о том, сколько осталось для аудита.Как сделать ячейку в DATAGRID ссылке на другое окно?

Как я могу создать событие click для перехода на другую страницу?

P.S. Я новичок.

Edit: http://i.stack.imgur.com/LGnHA.png

Edit: http://i.stack.imgur.com/tU0bA.png - Хотите щелкнуть в ячейках на последнем столбце.

+0

Что вы * вы * пробовали до сих пор? – Sheridan

+0

@Sheridan Извините за поздний ответ, я попробовал событие click, а также попробовал метод Monika, однако я хочу, чтобы он ссылался на другое окно с именем xamlAllocateAudit в том же приложении, но я не знаю, как это сделать. Любая помощь, пожалуйста? –

+0

В своем вопросе, пожалуйста, покажите, как вы заполнили данные в своем «DataGrid». – Sheridan

ответ

0

Попробуйте это ..

Добавить EventSetter на CellStyle:

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

в код оных Обработчик:

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

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

Работает на моем конце. Первый щелчок выбирает ячейку, второй щелчок запускает обработчик, который открывается в новом окне.

Если вы хотите, чтобы то же окно обновлялось, а затем сохраняйте ссылку на окно, если оно существует, обновите его datacontext.

На Отер стороне в xamlAllocateAudit, создать обработчик для события "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 
} 

Ура !!

+0

Благодарим вас за ответ еще раз, однако я попробовал то, что вы опубликовали, и он продолжает придумывать ошибку «Ссылка на объект не установлена ​​в экземпляр объекта». Указывает на передачу части данных , Любая дополнительная помощь, которую вы могли бы дать, или несколько примеров того, как я мог бы лучше передавать данные без ошибок? –

+0

Хорошо. Какой тип столбца вы используете и как выглядит элемент ItemsSource DataGrid? – Anders

+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 указывает веб-сайт будет открыт с веб-браузером по умолчанию, если это папка будет открыта в проводнике, если это файл это будет открыт приложением по умолчанию, связанным с ним.

Чтобы использовать это для автогенерированных столбцов, ваше свойство должно иметь тип Uri, поэтому генерируется DataGridHyperlinkColumn. Затем вы можете подключить событие, помещая стиль в DataGrid.Resources:

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

Спасибо за ответ, я хочу открыть еще одно окно приложения, какой код я бы добавил для своей ситуации?Мое окно называется xamlAllocateAudits.xaml –

Смежные вопросы