获取隐藏列的值

本文关键字:隐藏 获取 | 更新日期: 2023-09-27 18:31:19

我有一个DataGrid,每行都有ID,Name列和一个HyperLinkButton。我的ID列被属性Visibility="Collapsed"隐藏。在HyperLinkButton的Click事件中,我正在访问我的列值,但是当它被隐藏时我无法访问该列,即它返回null。只有当我让它Visible时才能访问它。这个问题有什么解决方案吗?

XAML for DataGrid:

<sdk:DataGrid AutoGenerateColumns="False"
              HorizontalAlignment="Left"
              Height="163"
              VerticalAlignment="Top"
              Name="ProductGrid">
    <sdk:DataGrid.Columns>
        <sdk:DataGridTextColumn x:Name="ID"
                                Binding="{Binding Path=ProductID, Mode=OneWay}"
                                Header="ID"
                                IsReadOnly="True"
                                Width="50"
                                Visibility="Collapsed" />
        <sdk:DataGridTextColumn x:Name="Name"
                                Binding="{Binding Path=Name, Mode=OneWay}"
                                Header="Name"
                                IsReadOnly="True"
                                Width="340" />
        <sdk:DataGridTemplateColumn Header="">
            <sdk:DataGridTemplateColumn.CellTemplate>
                <DataTemplate x:Name="gridTemplate">
                    <StackPanel Orientation="Vertical"
                                VerticalAlignment="Center">
                        <HyperlinkButton Content="Details"
                                         Tag="Hyperlinkbutton"
                                         HorizontalAlignment="Center"
                                         Click="OnGetDetailsClick"
                                         Width="100" />
                    </StackPanel>
                </DataTemplate>
            </sdk:DataGridTemplateColumn.CellTemplate>
        </sdk:DataGridTemplateColumn>
    </sdk:DataGrid.Columns>

超链接的点击事件:

var selectedGridRow = DataGridRow.GetRowContainingElement(sender as FrameworkElement);
TextBlock txtblkID = (TextBlock)ProductGrid.Columns[0].GetCellContent(selectedGridRow);
p.ID = Int32.Parse(txtblkID.Text);

获取隐藏列的值

您可以获取所选行的 DataContext 并从中获取值。将"数据源类型"强制转换替换为模型。

var selectedGridRow = DataGridRow.GetRowContainingElement(sender as FrameworkElement);
p.ID = ((DataSourceType)selectedGridRow.DataContext).ProductID;