如何获取DataGrid中选定单元格的行

本文关键字:单元格 DataGrid 何获取 获取 | 更新日期: 2023-09-27 17:57:52

我正在开发一个WPF应用程序。我使用DataGrid控件来显示包含各种信息的字段列表。在Visual Studio社区工具箱中找不到DatGridView控件。我在谷歌上的大部分搜索都只带回DataGridView的信息,非常令人沮丧。如果可以的话,我会使用DataGridView,但我跑题了。我想做的是当用户选择一个单元格时捕获当前行,这样我就可以从相邻的单元格中获得一个值。我不知道该怎么做。以下是我如何创建我的DataGrid:

 private void DisplayFieldLengths(string strFLFileName, Int32 intTotalRowSize, int[] intFieldLengths)
    {
        int intDisplayCnt, colCnt = 0;
        string strData = "";

        lblFLInfo.Content = "File: " + strFLFileName;
        DataTable dt = new DataTable();
        dt.Columns.Add("Field", typeof(string));
        dt.Columns.Add("Size", typeof(string));
        dt.Columns.Add(" New Size", typeof(string));
        dt.Columns[0].ReadOnly = true;
        dt.Columns[1].ReadOnly = true;

        for (intDisplayCnt = 0; intDisplayCnt < intFieldLengths.Length; intDisplayCnt++)
        {
            strData = "Field" + (intDisplayCnt + 1) + "|" + intFieldLengths[intDisplayCnt].ToString() + "|1";
            dt.Rows.Add(strData.Split('|'));
        }
        dtGrid.ItemsSource = dt.DefaultView;
        lblRowSize.Content = "Total row length: " + intTotalRowSize;
    }

这是DataGrid的xaml。

<DataGrid IsReadOnly="False" Name="dtGrid" Loaded="GridLoaded" CurrentCellChanged="NewFieldSizeChanged" HorizontalAlignment="Left" VerticalAlignment="Top" Height="365" Margin="48,53,0,0" Width="272" BorderThickness="1" BorderBrush="Black">
        <DataGrid.Resources>
            <Style TargetType="{x:Type DataGridCell}">
                <Style.Triggers>
                    <Trigger Property="DataGridCell.IsSelected" Value="True">
                        <Setter Property="Background" Value="#FF9DF3D6" />
                        <Setter Property="Foreground" Value="#000000" />
                    </Trigger>
                </Style.Triggers>
            </Style>
        </DataGrid.Resources>
    </DataGrid>

如何获取DataGrid中选定单元格的行

看起来您正在使用事件和代码隐藏来实现您想要实现的目标。我建议您接受MVVM范式并实现数据绑定。您的代码将不再在事件和代码隐藏中(即不在视图中),而是在视图模型中。例如,要跟踪行更改,请将SelectedItem属性绑定到视图模型中的属性。然后,对行更改的响应就变得和将代码放入视图模型属性的setter中一样微不足道。这个话题太长了,不能作为SO回答。祝你好运。