Выбранное значение из одного столбца в DataGrid - PullRequest
1 голос
/ 04 января 2012

У меня есть DataGrid с данными, заполненными из привязки XML.

Я хочу знать, как я могу получить выбранную строку в C #, более конкретно, я хочу вернуть значение 'ID' из выбранной строки из моего набора данных.

Я могу получить все содержимое строки с помощью:

 var downloadlistselected = downloadList.SelectedValue.ToString();

Однако я хочу только содержимое первого столбца.

Может кто-нибудь помочь?

1012 * XAML * <Grid.DataContext> <XmlDataProvider Source="E:\downloader\downloadConfig.xml" XPath="/xservdownload/downloadItem"></XmlDataProvider> </Grid.DataContext> <DataGrid x:Name="downloadList" Height="191" VerticalAlignment="Top" ItemsSource="{Binding}" AutoGenerateColumns="False" AlternatingRowBackground="Gainsboro" IsReadOnly="True" SelectionChanged="DownloadListSelectionChanged" DataContext="{Binding}" IsSynchronizedWithCurrentItem="True"> <DataGrid.Columns> <DataGridTextColumn Header="ID" Binding="{Binding XPath=ID}" Width="50"></DataGridTextColumn> <DataGridTextColumn Header="Name" Binding="{Binding XPath=Name}" Width="350"></DataGridTextColumn> <DataGridTextColumn Header="Status" Binding="{Binding XPath=Status}" Width="100"></DataGridTextColumn> </DataGrid.Columns>

Ответы [ 2 ]

1 голос
/ 04 января 2012

Что-то в этом духе должно быть:

var item = (XmlNode)downloadList.SelectedItem;
var value = item.SelectSingleNode("ID").InnerText;

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

0 голосов
/ 04 января 2012

Попробуйте с помощью этой функции, надеюсь, она поможет.

public static DataGridCell GetCell(DataGrid dataGrid, int row, int column)
        {
            DataGridRow rowContainer = GetRow(dataGrid, row);
            if (rowContainer != null)
            {
                DataGridCellsPresenter presenter = GetVisualChild<DataGridCellsPresenter>(rowContainer);

                // try to get the cell but it may possibly be virtualized
                DataGridCell cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(column);
                if (cell == null)
                {
                    // now try to bring into view and retreive the cell
                    dataGrid.ScrollIntoView(rowContainer, dataGrid.Columns[column]);

                    cell = (DataGridCell)presenter.ItemContainerGenerator.ContainerFromIndex(column);
                }

                return cell;
            }

            return null;
}

После получения DataGridCell может также потребоваться получить дочерний визуал с помощью класса VisualTreeHelper.

...