@nuraGGupta@ Ответов: 3

Получение выбранных элементов в WPF datagrid


Всем привет,

В моем приложении WPF мне нужно получить все выбранные строки datagrid одним нажатием кнопки, которая находится за пределами datagrid.Я использую флажок в шаблоне заголовка строки, чтобы выбрать или отменить выбор строки. Ниже приведен небольшой фрагмент кода моего datagrid xaml. Пожалуйста, может ли кто-нибудь помочь мне в извлечении всех выбранных строк одним нажатием кнопки. Я много искал в google, но все ссылки касаются fethcing выбранных элементов в событии "dataGrid_SelectionChanged", что очень просто.

<my:DataGrid AutoGenerateColumns="False" SelectionChanged="dataGrid_SelectionChanged" Initialized="DataGrid_Initialized" >

<my:DataGrid.RowHeaderTemplate>
                <DataTemplate>
                    <Grid>
                        <CheckBox IsChecked="{Binding Path=IsSelected, Mode=TwoWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type my:DataGridRow}}}"/>
                    </Grid>
                </DataTemplate>
            </my:DataGrid.RowHeaderTemplate>
 <my:DataGrid.Columns>
     <my:DataGridTemplateColumn Width="160" Header="Media Status" >
                    <my:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                         <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="5,8,5,0">
                                <TextBlock>
                             <TextBlock.Style>
                                <Style>
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding MediaStatus}"  Value="False">
                                            <Setter Property="TextBlock.Text" Value="Not Processed" />
                                        </DataTrigger>
                                        <DataTrigger Binding="{Binding MediaStatus}" Value="True">
                                            <Setter Property="TextBlock.Text" Value="Processed" />
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </TextBlock.Style>
                               </TextBlock>
                            </StackPanel>
                                                          
                        </DataTemplate>
                    </my:DataGridTemplateColumn.CellTemplate>
                </my:DataGridTemplateColumn>
            </my:DataGrid.Columns>
        </my:DataGrid>






Спасибо
Анурага

3 Ответов

Рейтинг:
28

@nuraGGupta@

Спасибо всем, кто читает этот пост. Я сделал это сам. Я публикую код ниже, Для справки о других, кто в нем нуждается. Пожалуйста, предложите, можно ли внести в него какие-либо хорошие изменения.


private void btnProcessMedia_Click(object sender, RoutedEventArgs e)
        {
                if (dgProjects.SelectedItems.Count > 0)
                {
                    for (int i = 0; i < dgProjects.SelectedItems.Count; i++)
                    {
                        System.Data.DataRowView selectedFile = (System.Data.DataRowView)dgProjects.SelectedItems[i];
                        string str = Convert.ToString(selectedFile.Row.ItemArray[10]);
                    }
                }
            
        }



Анурага


rajesh1986

Это очень полезный код. Я получил это решение после долгого наблюдения.
Спасибо

V G S Naidu A

Спасибо за Ваш пост.. но это полезно, когда я использую обычное кодирование, то есть получаю данные из базы данных и добавляю их в DataGrid....
Но когда я использую Entity FrameWork, он не возвращает SelectedItems в формате DATAGRIDROW, а возвращает objectType связанной таблицы ...

что я должен делать, когда использую EntityFrameWork?..

Рейтинг:
1

ferahl

Более эффективный способ:

foreach (var data in dataGridMain.SelectedItems)
{
    MyObservableCollection myData = data as MyObservableCollection;
    MessageBox.Show(myData.author);
}


Где "MyObservableCollection" - это ваш класс данных, привязанный к DataGrid (в данном случае dataGridMain). И в этой коллекции есть авторская строка, например.


Abubaker87

Спасибо..:) отличное решение.. Это сработало...

Member 12115375

Здорово :D Спасибо!

Рейтинг:
0

Member 11665245

Пожалуйста, прочтите эту ссылку.
Поведение MultiItemSelect в DataGrid [^]