Получить значение ячейки Datagrid при нажатии на ячейку в WPF - PullRequest
0 голосов
/ 14 октября 2019

Когда я щелкаю по ячейке в моей сетке данных, она должна сохранить значение ячейки в переменной, чтобы я могла использовать его в метке на следующей странице.

Вот что у меня сейчас:

Моя DataGrid

<DataGrid x:Name="DataGridTilKonti" Grid.Row="1">
            <DataGrid.Columns>
                <DataGridTextColumn Header="Type"
                                    HeaderStyle="{StaticResource DataGridHeaderStyle}"
                                    Binding="{Binding kontoType}"/>
                <DataGridTextColumn Header="Kontonummer"
                                    HeaderStyle="{StaticResource DataGridHeaderStyle}"
                                    Binding="{Binding kontoID}"/>
                <DataGridTextColumn Header="Saldo"
                                    HeaderStyle="{StaticResource DataGridHeaderStyle}"
                                    Binding="{Binding saldo}"/>
            </DataGrid.Columns>
            <DataGrid.CellStyle>
                <Style TargetType="DataGridCell">
                    <EventSetter Event="PreviewMouseDown" Handler="DataGridCell_PreviewMouseDown"/>
                </Style>
            </DataGrid.CellStyle>
        </DataGrid>

Мое событие щелчка и только одна из моих бесчисленных попыток.

private void DataGridCell_PreviewMouseDown(object sender, MouseButtonEventArgs e)
        {
            //var grid = DataGridTilKonti as DataGrid;
            //var cellValue = grid.SelectedValue;
            //MainWindow.k.EnkeltKontoType = cellValue.ToString();

            MainWindow.k.EnkeltKontoType = 
            DataGridTilKonti.SelectedCells[0].ToString();



            NavigationService.Navigate(new EnkeltKontosTransaktioner());
        }

Мой стиль DataGrid

        <!-- Style til DataGrid -->
        <Style TargetType="{x:Type DataGrid}">
            <Setter Property="AutoGenerateColumns" Value="False"/>
            <Setter Property="AlternatingRowBackground" Value="Gray"/>
            <Setter Property="IsReadOnly" Value="True"/>
            <Setter Property="HeadersVisibility" Value="Column"/>
            <Setter Property="CanUserSortColumns" Value="False"/>
            <Setter Property="CanUserResizeColumns" Value="False"/>
            <Setter Property="CanUserReorderColumns" Value="False"/>

            <Setter Property="SelectionUnit" Value="Cell"/>
            <Setter Property="SelectionMode" Value="Single"/>


            <Setter Property="Background" Value="Transparent"/>
            <Setter Property="BorderBrush" Value="Transparent"/>
            <Setter Property="HorizontalContentAlignment" Value="Center"/>
            <Setter Property="HorizontalAlignment" Value="Center"/>
            <Setter Property="Margin" Value="0 20 0 0"/>
            <Style.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="BorderBrush" Value="Transparent"/>
                </Trigger>
            </Style.Triggers>
        </Style>

        <!-- Style til DataGridColumnHeaders -->
        <Style TargetType="{x:Type DataGridColumnHeader}" x:Key="DataGridHeaderStyle" BasedOn="{StaticResource BaseFontFamily}">
            <Setter Property="Background" Value="Transparent"/>
            <Setter Property="Foreground" Value="Black"/>
            <Setter Property="FontSize" Value="20"/>
            <Setter Property="Margin" Value="0 0 15 0"/>
        </Style>

        <!-- Der ligger en ekstra header under den som jeg ændrede på tidligere. Denne style gør den usynlig. -->
        <Style TargetType="{x:Type DataGridColumnHeader}">
            <Setter Property="Background" Value="Transparent"/>
        </Style>

        <!-- Style som fjerner den blå baggrundsfarve og sorte border når man trykker på en celle. -->
        <Style TargetType="{x:Type DataGridCell}">
            <Setter Property="Foreground" Value="Black"/>
            <Style.Triggers>
                <Trigger Property="IsSelected" Value="True">
                    <Setter Property="Background" Value="{x:Null}"/>
                    <Setter Property="BorderBrush" Value="{x:Null}"/>
                </Trigger>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="Cursor" Value="Hand"/>
                </Trigger>
            </Style.Triggers>
        </Style>

И ошибка, которую я в настоящее время получаю:

ArgumentOutOfRangeException: аргумент находится вне диапазона.

Редактировать 1 : SelectionUnit установить в Cell и SelectionMode установлены на Single

Обновлен вывод ошибок.

1 Ответ

0 голосов
/ 14 октября 2019

Вы можете получить значение ячейки DataGrid в обработчике событий, как показано ниже.

    private void DataGridCell_PreviewMouseDown(object sender, MouseButtonEventArgs e)
    {
        DataGridCell cell = sender as DataGridCell;
        if (cell != null)
        {
            TextBlock tb = cell.Content as TextBlock;
            MainWindow.k.EnkeltKontoType = tb.Text;
            NavigationService.Navigate(new EnkeltKontosTransaktioner());
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...